Mercurial > hg
annotate mercurial/logexchange.py @ 43786:421ea5772039
copies: split the combination of the copies mapping in its own function
In some case, this part take up to 95% of the copy tracing that take about a
hundred second. This poor performance comes from the fact we keep duplciating
and merging dictionary that are mostly similar.
I want to experiment with smarter native code to do this, so I need to isolate
the function first.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 13 Nov 2019 20:42:13 +0100 |
parents | d783f945a701 |
children | 89a2afe31e82 |
rev | line source |
---|---|
35347
a29fe459fc49
remotenames: rename related file and storage dir to logexchange
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35240
diff
changeset
|
1 # logexchange.py |
35236
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
2 # |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
3 # Copyright 2017 Augie Fackler <raf@durin42.com> |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
4 # Copyright 2017 Sean Farley <sean@farley.io> |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
5 # |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
6 # This software may be used and distributed according to the terms of the |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
7 # GNU General Public License version 2 or any later version. |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
8 |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
9 from __future__ import absolute_import |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
10 |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
11 from .node import hex |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
12 |
35237
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
13 from . import ( |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
14 pycompat, |
36059
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
15 util, |
35237
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
16 vfs as vfsmod, |
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
17 ) |
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
18 |
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
19 # directory name in .hg/ in which remotenames files will be present |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
20 remotenamedir = b'logexchange' |
35237
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
21 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41365
diff
changeset
|
22 |
35239
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
23 def readremotenamefile(repo, filename): |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
24 """ |
35347
a29fe459fc49
remotenames: rename related file and storage dir to logexchange
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35240
diff
changeset
|
25 reads a file from .hg/logexchange/ directory and yields it's content |
35239
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
26 filename: the file to be read |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
27 yield a tuple (node, remotepath, name) |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
28 """ |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
29 |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
30 vfs = vfsmod.vfs(repo.vfs.join(remotenamedir)) |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
31 if not vfs.exists(filename): |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
32 return |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
33 f = vfs(filename) |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
34 lineno = 0 |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
35 for line in f: |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
36 line = line.strip() |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
37 if not line: |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
38 continue |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
39 # contains the version number |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
40 if lineno == 0: |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
41 lineno += 1 |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
42 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
43 node, remote, rname = line.split(b'\0') |
35239
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
44 yield node, remote, rname |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
45 except ValueError: |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
46 pass |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
47 |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
48 f.close() |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
49 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41365
diff
changeset
|
50 |
35239
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
51 def readremotenames(repo): |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
52 """ |
35347
a29fe459fc49
remotenames: rename related file and storage dir to logexchange
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35240
diff
changeset
|
53 read the details about the remotenames stored in .hg/logexchange/ and |
35239
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
54 yields a tuple (node, remotepath, name). It does not yields information |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
55 about whether an entry yielded is branch or bookmark. To get that |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
56 information, call the respective functions. |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
57 """ |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
58 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
59 for bmentry in readremotenamefile(repo, b'bookmarks'): |
35239
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
60 yield bmentry |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
61 for branchentry in readremotenamefile(repo, b'branches'): |
35239
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
62 yield branchentry |
744d1c874a59
remotenames: add functions to read remotenames data from .hg/remotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35237
diff
changeset
|
63 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41365
diff
changeset
|
64 |
35237
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
65 def writeremotenamefile(repo, remotepath, names, nametype): |
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
66 vfs = vfsmod.vfs(repo.vfs.join(remotenamedir)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
67 f = vfs(nametype, b'w', atomictemp=True) |
35237
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
68 # write the storage version info on top of file |
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
69 # version '0' represents the very initial version of the storage format |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
70 f.write(b'0\n\n') |
35237
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
71 |
35240
2ea6e42ed15e
remotenames: consider existing data while storing newer data
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35239
diff
changeset
|
72 olddata = set(readremotenamefile(repo, nametype)) |
2ea6e42ed15e
remotenames: consider existing data while storing newer data
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35239
diff
changeset
|
73 # re-save the data from a different remote than this one. |
2ea6e42ed15e
remotenames: consider existing data while storing newer data
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35239
diff
changeset
|
74 for node, oldpath, rname in sorted(olddata): |
2ea6e42ed15e
remotenames: consider existing data while storing newer data
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35239
diff
changeset
|
75 if oldpath != remotepath: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
76 f.write(b'%s\0%s\0%s\n' % (node, oldpath, rname)) |
35240
2ea6e42ed15e
remotenames: consider existing data while storing newer data
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35239
diff
changeset
|
77 |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
78 for name, node in sorted(pycompat.iteritems(names)): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
79 if nametype == b"branches": |
35237
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
80 for n in node: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
81 f.write(b'%s\0%s\0%s\n' % (n, remotepath, name)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
82 elif nametype == b"bookmarks": |
35237
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
83 if node: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
84 f.write(b'%s\0%s\0%s\n' % (node, remotepath, name)) |
35237
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
85 |
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
86 f.close() |
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
87 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41365
diff
changeset
|
88 |
35237
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
89 def saveremotenames(repo, remotepath, branches=None, bookmarks=None): |
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
90 """ |
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
91 save remotenames i.e. remotebookmarks and remotebranches in their |
35347
a29fe459fc49
remotenames: rename related file and storage dir to logexchange
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35240
diff
changeset
|
92 respective files under ".hg/logexchange/" directory. |
35237
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
93 """ |
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
94 wlock = repo.wlock() |
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
95 try: |
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
96 if bookmarks: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
97 writeremotenamefile(repo, remotepath, bookmarks, b'bookmarks') |
35237
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
98 if branches: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
99 writeremotenamefile(repo, remotepath, branches, b'branches') |
35237
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
100 finally: |
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
101 wlock.release() |
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
102 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41365
diff
changeset
|
103 |
36059
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
104 def activepath(repo, remote): |
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
105 """returns remote path""" |
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
106 # is the remote a local peer |
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
107 local = remote.local() |
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
108 |
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
109 # determine the remote path from the repo, if possible; else just |
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
110 # use the string given to us |
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
111 rpath = remote |
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
112 if local: |
40420
94c0421d67a0
logexchange: convert paths to unix when detecting the active path
Matt Harbison <matt_harbison@yahoo.com>
parents:
37981
diff
changeset
|
113 rpath = util.pconvert(remote._repo.root) |
37365
1ccd75027abb
py3: use bytes instead of str in instance()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36059
diff
changeset
|
114 elif not isinstance(remote, bytes): |
36059
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
115 rpath = remote._url |
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
116 |
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
117 # represent the remotepath with user defined path name if exists |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
118 for path, url in repo.ui.configitems(b'paths'): |
36059
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
119 # remove auth info from user defined url |
37981
bbdc1bc56e58
remotenames: check the remotepath with url containing user information too
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37639
diff
changeset
|
120 noauthurl = util.removeauth(url) |
40420
94c0421d67a0
logexchange: convert paths to unix when detecting the active path
Matt Harbison <matt_harbison@yahoo.com>
parents:
37981
diff
changeset
|
121 |
94c0421d67a0
logexchange: convert paths to unix when detecting the active path
Matt Harbison <matt_harbison@yahoo.com>
parents:
37981
diff
changeset
|
122 # Standardize on unix style paths, otherwise some {remotenames} end up |
94c0421d67a0
logexchange: convert paths to unix when detecting the active path
Matt Harbison <matt_harbison@yahoo.com>
parents:
37981
diff
changeset
|
123 # being an absolute path on Windows. |
94c0421d67a0
logexchange: convert paths to unix when detecting the active path
Matt Harbison <matt_harbison@yahoo.com>
parents:
37981
diff
changeset
|
124 url = util.pconvert(bytes(url)) |
94c0421d67a0
logexchange: convert paths to unix when detecting the active path
Matt Harbison <matt_harbison@yahoo.com>
parents:
37981
diff
changeset
|
125 noauthurl = util.pconvert(noauthurl) |
37981
bbdc1bc56e58
remotenames: check the remotepath with url containing user information too
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37639
diff
changeset
|
126 if url == rpath or noauthurl == rpath: |
36059
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
127 rpath = path |
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
128 break |
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
129 |
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
130 return rpath |
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
131 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41365
diff
changeset
|
132 |
35236
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
133 def pullremotenames(localrepo, remoterepo): |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
134 """ |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
135 pulls bookmarks and branches information of the remote repo during a |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
136 pull or clone operation. |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
137 localrepo is our local repository |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
138 remoterepo is the peer instance |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
139 """ |
36059
62a428bf6359
logexchange: introduce helper function to get remote path name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35347
diff
changeset
|
140 remotepath = activepath(localrepo, remoterepo) |
37639
0e50dda7e9c1
logexchange: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37365
diff
changeset
|
141 |
0e50dda7e9c1
logexchange: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37365
diff
changeset
|
142 with remoterepo.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41365
diff
changeset
|
143 bookmarks = e.callcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
144 b'listkeys', {b'namespace': b'bookmarks',} |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
41365
diff
changeset
|
145 ).result() |
37639
0e50dda7e9c1
logexchange: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37365
diff
changeset
|
146 |
35236
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
147 # on a push, we don't want to keep obsolete heads since |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
148 # they won't show up as heads on the next pull, so we |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
149 # remove them here otherwise we would require the user |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
150 # to issue a pull to refresh the storage |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
151 bmap = {} |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
152 repo = localrepo.unfiltered() |
37639
0e50dda7e9c1
logexchange: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37365
diff
changeset
|
153 |
0e50dda7e9c1
logexchange: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37365
diff
changeset
|
154 with remoterepo.commandexecutor() as e: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
155 branchmap = e.callcommand(b'branchmap', {}).result() |
37639
0e50dda7e9c1
logexchange: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37365
diff
changeset
|
156 |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
157 for branch, nodes in pycompat.iteritems(branchmap): |
35236
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
158 bmap[branch] = [] |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
159 for node in nodes: |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
160 if node in repo and not repo[node].obsolete(): |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
161 bmap[branch].append(hex(node)) |
5a62910948d2
remotenames: move function to pull remotenames from the remoterepo to core
Pulkit Goyal <7895pulkit@gmail.com>
parents:
diff
changeset
|
162 |
35237
8df8ce2cc5dd
remotenames: add functionality to store remotenames under .hg/hgremotenames/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35236
diff
changeset
|
163 saveremotenames(localrepo, remotepath, bmap, bookmarks) |