annotate mercurial/logexchange.py @ 43325:7d4f2e4899c5 stable

py3: fix headencode() with display=False We previously called str() on a email.header.Header object. On Python 2, this returns a bytestring and the __str__ method is actually an alias to .encode() method. On Python 3, __str__ does not perform encoding (and returns a unicode string). To keep a consistent behavior across Python versions, we explicitly use .encode() and we wrap the result with encoding.strtolocal() to get a bytestring in all cases. As a side effect of forcing bytes conversion, we need to decode back in _addressencode(). This is to make test-notify.t pass on Python 3. Also note that headers are now encoded in some patchbomb tests; this is because the charset is not always "us-ascii" ("iso-8859-1" otherwise) on Python 3.
author Denis Laxalde <denis.laxalde@logilab.fr>
date Thu, 24 Oct 2019 17:16:43 +0200
parents d783f945a701
children 89a2afe31e82
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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)