mercurial/logexchange.py
changeset 43077 687b865b95ad
parent 43076 2372284d9457
child 43106 d783f945a701
equal deleted inserted replaced
43076:2372284d9457 43077:687b865b95ad
    14     util,
    14     util,
    15     vfs as vfsmod,
    15     vfs as vfsmod,
    16 )
    16 )
    17 
    17 
    18 # directory name in .hg/ in which remotenames files will be present
    18 # directory name in .hg/ in which remotenames files will be present
    19 remotenamedir = 'logexchange'
    19 remotenamedir = b'logexchange'
    20 
    20 
    21 
    21 
    22 def readremotenamefile(repo, filename):
    22 def readremotenamefile(repo, filename):
    23     """
    23     """
    24     reads a file from .hg/logexchange/ directory and yields it's content
    24     reads a file from .hg/logexchange/ directory and yields it's content
    37             continue
    37             continue
    38         # contains the version number
    38         # contains the version number
    39         if lineno == 0:
    39         if lineno == 0:
    40             lineno += 1
    40             lineno += 1
    41         try:
    41         try:
    42             node, remote, rname = line.split('\0')
    42             node, remote, rname = line.split(b'\0')
    43             yield node, remote, rname
    43             yield node, remote, rname
    44         except ValueError:
    44         except ValueError:
    45             pass
    45             pass
    46 
    46 
    47     f.close()
    47     f.close()
    53     yields a tuple (node, remotepath, name). It does not yields information
    53     yields a tuple (node, remotepath, name). It does not yields information
    54     about whether an entry yielded is branch or bookmark. To get that
    54     about whether an entry yielded is branch or bookmark. To get that
    55     information, call the respective functions.
    55     information, call the respective functions.
    56     """
    56     """
    57 
    57 
    58     for bmentry in readremotenamefile(repo, 'bookmarks'):
    58     for bmentry in readremotenamefile(repo, b'bookmarks'):
    59         yield bmentry
    59         yield bmentry
    60     for branchentry in readremotenamefile(repo, 'branches'):
    60     for branchentry in readremotenamefile(repo, b'branches'):
    61         yield branchentry
    61         yield branchentry
    62 
    62 
    63 
    63 
    64 def writeremotenamefile(repo, remotepath, names, nametype):
    64 def writeremotenamefile(repo, remotepath, names, nametype):
    65     vfs = vfsmod.vfs(repo.vfs.join(remotenamedir))
    65     vfs = vfsmod.vfs(repo.vfs.join(remotenamedir))
    66     f = vfs(nametype, 'w', atomictemp=True)
    66     f = vfs(nametype, b'w', atomictemp=True)
    67     # write the storage version info on top of file
    67     # write the storage version info on top of file
    68     # version '0' represents the very initial version of the storage format
    68     # version '0' represents the very initial version of the storage format
    69     f.write('0\n\n')
    69     f.write(b'0\n\n')
    70 
    70 
    71     olddata = set(readremotenamefile(repo, nametype))
    71     olddata = set(readremotenamefile(repo, nametype))
    72     # re-save the data from a different remote than this one.
    72     # re-save the data from a different remote than this one.
    73     for node, oldpath, rname in sorted(olddata):
    73     for node, oldpath, rname in sorted(olddata):
    74         if oldpath != remotepath:
    74         if oldpath != remotepath:
    75             f.write('%s\0%s\0%s\n' % (node, oldpath, rname))
    75             f.write(b'%s\0%s\0%s\n' % (node, oldpath, rname))
    76 
    76 
    77     for name, node in sorted(names.iteritems()):
    77     for name, node in sorted(names.iteritems()):
    78         if nametype == "branches":
    78         if nametype == b"branches":
    79             for n in node:
    79             for n in node:
    80                 f.write('%s\0%s\0%s\n' % (n, remotepath, name))
    80                 f.write(b'%s\0%s\0%s\n' % (n, remotepath, name))
    81         elif nametype == "bookmarks":
    81         elif nametype == b"bookmarks":
    82             if node:
    82             if node:
    83                 f.write('%s\0%s\0%s\n' % (node, remotepath, name))
    83                 f.write(b'%s\0%s\0%s\n' % (node, remotepath, name))
    84 
    84 
    85     f.close()
    85     f.close()
    86 
    86 
    87 
    87 
    88 def saveremotenames(repo, remotepath, branches=None, bookmarks=None):
    88 def saveremotenames(repo, remotepath, branches=None, bookmarks=None):
    91     respective files under ".hg/logexchange/" directory.
    91     respective files under ".hg/logexchange/" directory.
    92     """
    92     """
    93     wlock = repo.wlock()
    93     wlock = repo.wlock()
    94     try:
    94     try:
    95         if bookmarks:
    95         if bookmarks:
    96             writeremotenamefile(repo, remotepath, bookmarks, 'bookmarks')
    96             writeremotenamefile(repo, remotepath, bookmarks, b'bookmarks')
    97         if branches:
    97         if branches:
    98             writeremotenamefile(repo, remotepath, branches, 'branches')
    98             writeremotenamefile(repo, remotepath, branches, b'branches')
    99     finally:
    99     finally:
   100         wlock.release()
   100         wlock.release()
   101 
   101 
   102 
   102 
   103 def activepath(repo, remote):
   103 def activepath(repo, remote):
   112         rpath = util.pconvert(remote._repo.root)
   112         rpath = util.pconvert(remote._repo.root)
   113     elif not isinstance(remote, bytes):
   113     elif not isinstance(remote, bytes):
   114         rpath = remote._url
   114         rpath = remote._url
   115 
   115 
   116     # represent the remotepath with user defined path name if exists
   116     # represent the remotepath with user defined path name if exists
   117     for path, url in repo.ui.configitems('paths'):
   117     for path, url in repo.ui.configitems(b'paths'):
   118         # remove auth info from user defined url
   118         # remove auth info from user defined url
   119         noauthurl = util.removeauth(url)
   119         noauthurl = util.removeauth(url)
   120 
   120 
   121         # Standardize on unix style paths, otherwise some {remotenames} end up
   121         # Standardize on unix style paths, otherwise some {remotenames} end up
   122         # being an absolute path on Windows.
   122         # being an absolute path on Windows.
   138     """
   138     """
   139     remotepath = activepath(localrepo, remoterepo)
   139     remotepath = activepath(localrepo, remoterepo)
   140 
   140 
   141     with remoterepo.commandexecutor() as e:
   141     with remoterepo.commandexecutor() as e:
   142         bookmarks = e.callcommand(
   142         bookmarks = e.callcommand(
   143             'listkeys', {'namespace': 'bookmarks',}
   143             b'listkeys', {b'namespace': b'bookmarks',}
   144         ).result()
   144         ).result()
   145 
   145 
   146     # on a push, we don't want to keep obsolete heads since
   146     # on a push, we don't want to keep obsolete heads since
   147     # they won't show up as heads on the next pull, so we
   147     # they won't show up as heads on the next pull, so we
   148     # remove them here otherwise we would require the user
   148     # remove them here otherwise we would require the user
   149     # to issue a pull to refresh the storage
   149     # to issue a pull to refresh the storage
   150     bmap = {}
   150     bmap = {}
   151     repo = localrepo.unfiltered()
   151     repo = localrepo.unfiltered()
   152 
   152 
   153     with remoterepo.commandexecutor() as e:
   153     with remoterepo.commandexecutor() as e:
   154         branchmap = e.callcommand('branchmap', {}).result()
   154         branchmap = e.callcommand(b'branchmap', {}).result()
   155 
   155 
   156     for branch, nodes in branchmap.iteritems():
   156     for branch, nodes in branchmap.iteritems():
   157         bmap[branch] = []
   157         bmap[branch] = []
   158         for node in nodes:
   158         for node in nodes:
   159             if node in repo and not repo[node].obsolete():
   159             if node in repo and not repo[node].obsolete():