##// END OF EJS Templates
phases: allow registration and boundary advancement with revision sets...
phases: allow registration and boundary advancement with revision sets The core internals either use revision sets already or can trivially use them. Use the new interface in cg1unpacker.apply to avoid materializing the list of all new nodes as it is normally just a revision range. This avoids about 67 Bytes / changeset on AMD64 in peak RSS. Differential Revision: https://phab.mercurial-scm.org/D9232

File last commit:

r45403:8e8fd938 default
r46374:09735cde default
Show More
gnuarch.py
378 lines | 13.0 KiB | text/x-python | PythonLexer
Martin Geisler
convert: add copyright and license headers to back-ends
r8250 # gnuarch.py - GNU Arch support for the convert extension
#
# Copyright 2008, 2009 Aleix Conchillo Flaque <aleix@member.fsf.org>
# and others
#
# This software may be used and distributed according to the terms of the
Matt Mackall
Update license to GPLv2+
r10263 # GNU General Public License version 2 or any later version.
timeless
convert: gnuarch use absolute_import
r28366 from __future__ import absolute_import
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
timeless
convert: gnuarch use absolute_import
r28366 import os
import shutil
import stat
import tempfile
Yuya Nishihara
py3: move up symbol imports to enforce import-checker rules...
r29205
from mercurial.i18n import _
timeless
convert: gnuarch use absolute_import
r28366 from mercurial import (
encoding,
error,
Denis Laxalde
py3: use mail.parsebytes() in gnuarch catlog parser...
r43699 mail,
Matt Harbison
py3: convert arguments, cwd and env to native strings when spawning subprocess...
r39851 pycompat,
Matt Harbison
convert: fix a file descriptor leak...
r39865 util,
timeless
convert: gnuarch use absolute_import
r28366 )
Yuya Nishihara
procutil: bulk-replace function calls to point to new module
r37138 from mercurial.utils import (
dateutil,
procutil,
)
timeless
convert: gnuarch use absolute_import
r28366 from . import common
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
Augie Fackler
formatting: blacken the codebase...
r43346
timeless
convert: gnuarch use absolute_import
r28366 class gnuarch_source(common.converter_source, common.commandline):
Benoit Boissinot
use new style classes
r8778 class gnuarch_rev(object):
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 def __init__(self, rev):
self.rev = rev
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 self.summary = b''
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 self.date = None
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 self.author = b''
Edouard Gomez
convert/gnuarch: parse continuation-of revisions in gnuarch source...
r7583 self.continuationof = None
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 self.add_files = []
self.mod_files = []
self.del_files = []
self.ren_files = {}
self.ren_dirs = {}
Matt Harbison
convert: save an indicator of the repo type for sources and sinks...
r35168 def __init__(self, ui, repotype, path, revs=None):
super(gnuarch_source, self).__init__(ui, repotype, path, revs=revs)
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if not os.path.exists(os.path.join(path, b'{arch}')):
Augie Fackler
formatting: blacken the codebase...
r43346 raise common.NoRepo(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 _(b"%s does not look like a GNU Arch repository") % path
Augie Fackler
formatting: blacken the codebase...
r43346 )
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
# Could use checktool, but we want to check for baz or tla.
self.execmd = None
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if procutil.findexe(b'baz'):
self.execmd = b'baz'
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 else:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if procutil.findexe(b'tla'):
self.execmd = b'tla'
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 else:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 raise error.Abort(_(b'cannot find a GNU Arch tool'))
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
timeless
convert: gnuarch use absolute_import
r28366 common.commandline.__init__(self, ui, self.execmd)
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
Matt Mackall
backout dbdb777502dc (issue3077) (issue3071)...
r15381 self.path = os.path.realpath(path)
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 self.tmppath = None
self.treeversion = None
self.lastrev = None
self.changes = {}
self.parents = {}
self.tags = {}
Brodie Rao
convert: use encoding.encoding instead of locale.getpreferredencoding()...
r11987 self.encoding = encoding.encoding
Edouard Gomez
convert/gnuarch: retrieve known archive names list...
r7584 self.archives = []
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
def before(self):
Edouard Gomez
convert/gnuarch: retrieve known archive names list...
r7584 # Get registered archives
Augie Fackler
formatting: blacken the codebase...
r43346 self.archives = [
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 i.rstrip(b'\n') for i in self.runlines0(b'archives', b'-n')
Augie Fackler
formatting: blacken the codebase...
r43346 ]
Edouard Gomez
convert/gnuarch: retrieve known archive names list...
r7584
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if self.execmd == b'tla':
output = self.run0(b'tree-version', self.path)
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 else:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 output = self.run0(b'tree-version', b'-d', self.path)
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 self.treeversion = output.strip()
# Get name of temporary directory
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 version = self.treeversion.split(b'/')
Augie Fackler
formatting: blacken the codebase...
r43346 self.tmppath = os.path.join(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 pycompat.fsencode(tempfile.gettempdir()), b'hg-%s' % version[1]
Augie Fackler
formatting: blacken the codebase...
r43346 )
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
# Generate parents dictionary
Edouard Gomez
convert/gnuarch: follow continuation-of revisions...
r7585 self.parents[None] = []
treeversion = self.treeversion
child = None
while treeversion:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 self.ui.status(_(b'analyzing tree version %s...\n') % treeversion)
Edouard Gomez
convert/gnuarch: follow continuation-of revisions...
r7585
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 archive = treeversion.split(b'/')[0]
Edouard Gomez
convert/gnuarch: follow continuation-of revisions...
r7585 if archive not in self.archives:
Augie Fackler
formatting: blacken the codebase...
r43346 self.ui.status(
_(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b'tree analysis stopped because it points to '
b'an unregistered archive %s...\n'
Augie Fackler
formatting: blacken the codebase...
r43346 )
% archive
)
Edouard Gomez
convert/gnuarch: follow continuation-of revisions...
r7585 break
# Get the complete list of revisions for that tree version
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 output, status = self.runlines(
b'revisions', b'-r', b'-f', treeversion
)
Augie Fackler
formatting: blacken the codebase...
r43346 self.checkexit(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 status, b'failed retrieving revisions for %s' % treeversion
Augie Fackler
formatting: blacken the codebase...
r43346 )
Edouard Gomez
convert/gnuarch: follow continuation-of revisions...
r7585
# No new iteration unless a revision has a continuation-of header
treeversion = None
for l in output:
rev = l.strip()
self.changes[rev] = self.gnuarch_rev(rev)
self.parents[rev] = []
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
Edouard Gomez
convert/gnuarch: follow continuation-of revisions...
r7585 # Read author, date and summary
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 catlog, status = self.run(b'cat-log', b'-d', self.path, rev)
Edouard Gomez
convert/gnuarch: follow continuation-of revisions...
r7585 if status:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 catlog = self.run0(b'cat-archive-log', rev)
Edouard Gomez
convert/gnuarch: follow continuation-of revisions...
r7585 self._parsecatlog(catlog, rev)
# Populate the parents map
self.parents[child].append(rev)
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
Edouard Gomez
convert/gnuarch: follow continuation-of revisions...
r7585 # Keep track of the current revision as the child of the next
# revision scanned
child = rev
# Check if we have to follow the usual incremental history
# or if we have to 'jump' to a different treeversion given
# by the continuation-of header.
if self.changes[rev].continuationof:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 treeversion = b'--'.join(
self.changes[rev].continuationof.split(b'--')[:-1]
Augie Fackler
formatting: blacken the codebase...
r43346 )
Edouard Gomez
convert/gnuarch: follow continuation-of revisions...
r7585 break
# If we reached a base-0 revision w/o any continuation-of
# header, it means the tree history ends here.
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if rev[-6:] == b'base-0':
Edouard Gomez
convert/gnuarch: follow continuation-of revisions...
r7585 break
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
def after(self):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 self.ui.debug(b'cleaning up %s\n' % self.tmppath)
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 shutil.rmtree(self.tmppath, ignore_errors=True)
def getheads(self):
return self.parents[None]
def getfile(self, name, rev):
if rev != self.lastrev:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 raise error.Abort(_(b'internal calling inconsistency'))
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
Patrick Mezard
Use lexists() instead of exists() where appropriate
r12344 if not os.path.lexists(os.path.join(self.tmppath, name)):
Mads Kiilerich
convert: use None value for missing files instead of overloading IOError...
r22296 return None, None
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
Patrick Mezard
convert: merge sources getmode() into getfile()
r11134 return self._getfile(name, rev)
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
Mads Kiilerich
convert: introduce --full for converting all files...
r22300 def getchanges(self, rev, full):
if full:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 raise error.Abort(_(b"convert from arch does not support --full"))
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 self._update(rev)
changes = []
copies = {}
for f in self.changes[rev].add_files:
changes.append((f, rev))
for f in self.changes[rev].mod_files:
changes.append((f, rev))
for f in self.changes[rev].del_files:
changes.append((f, rev))
for src in self.changes[rev].ren_files:
to = self.changes[rev].ren_files[src]
changes.append((src, rev))
changes.append((to, rev))
Patrick Mezard
convert/gnuarch: fix switched copy source and destination...
r7567 copies[to] = src
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
for src in self.changes[rev].ren_dirs:
to = self.changes[rev].ren_dirs[src]
Benoit Boissinot
fix coding style (reported by pylint)
r10394 chgs, cps = self._rendirchanges(src, to)
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 changes += [(f, rev) for f in chgs]
Patrick Mezard
convert/gnuarch: fix switched copy source and destination...
r7567 copies.update(cps)
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
self.lastrev = rev
Mads Kiilerich
convert: optimize convert of files that are unmodified from p2 in merges...
r24395 return sorted(set(changes)), copies, set()
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
def getcommit(self, rev):
changes = self.changes[rev]
Augie Fackler
formatting: blacken the codebase...
r43346 return common.commit(
author=changes.author,
date=changes.date,
desc=changes.summary,
parents=self.parents[rev],
rev=rev,
)
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
def gettags(self):
return self.tags
def _execute(self, cmd, *args, **kwargs):
cmdline = [self.execmd, cmd]
cmdline += args
Yuya Nishihara
procutil: bulk-replace function calls to point to new module
r37138 cmdline = [procutil.shellquote(arg) for arg in cmdline]
Ian Moody
convert: convert os.devnull to bytes before trying to join it with other bytes...
r43569 bdevnull = pycompat.bytestr(os.devnull)
cmdline += [b'>', bdevnull, b'2>', bdevnull]
Manuel Jacob
cleanup: eliminate procutil.quotecommand()...
r45403 cmdline = b' '.join(cmdline)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 self.ui.debug(cmdline, b'\n')
Matt Harbison
py3: convert arguments, cwd and env to native strings when spawning subprocess...
r39851 return os.system(pycompat.rapply(procutil.tonativestr, cmdline))
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
def _update(self, rev):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 self.ui.debug(b'applying revision %s...\n' % rev)
changeset, status = self.runlines(b'replay', b'-d', self.tmppath, rev)
Edouard Gomez
convert/gnuarch: follow continuation-of revisions...
r7585 if status:
# Something went wrong while merging (baz or tla
# issue?), get latest revision and try from there
shutil.rmtree(self.tmppath, ignore_errors=True)
Aleix Conchillo Flaque
convert: improve gnu arch source performance and other fixes...
r6049 self._obtainrevision(rev)
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 else:
Edouard Gomez
convert/gnuarch: follow continuation-of revisions...
r7585 old_rev = self.parents[rev][0]
Augie Fackler
formatting: blacken the codebase...
r43346 self.ui.debug(
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 b'computing changeset between %s and %s...\n' % (old_rev, rev)
Augie Fackler
formatting: blacken the codebase...
r43346 )
Edouard Gomez
convert/gnuarch: follow continuation-of revisions...
r7585 self._parsechangeset(changeset, rev)
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035
def _getfile(self, name, rev):
mode = os.lstat(os.path.join(self.tmppath, name)).st_mode
if stat.S_ISLNK(mode):
Matt Harbison
py3: convert os.readlink() path to native strings on Windows...
r39940 data = util.readlink(os.path.join(self.tmppath, name))
Jordi Gutiérrez Hermoso
style: kill ersatz if-else ternary operators...
r24306 if mode:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 mode = b'l'
Jordi Gutiérrez Hermoso
style: kill ersatz if-else ternary operators...
r24306 else:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 mode = b''
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 else:
Matt Harbison
convert: fix a file descriptor leak...
r39865 data = util.readfile(os.path.join(self.tmppath, name))
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 mode = (mode & 0o111) and b'x' or b''
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 return data, mode
def _exclude(self, name):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 exclude = [b'{arch}', b'.arch-ids', b'.arch-inventory']
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 for exc in exclude:
if name.find(exc) != -1:
return True
return False
def _readcontents(self, path):
files = []
contents = os.listdir(path)
while len(contents) > 0:
c = contents.pop()
p = os.path.join(path, c)
Aleix Conchillo Flaque
convert: do not skip some lines in gnu arch summaries
r6044 # os.walk could be used, but here we avoid internal GNU
# Arch files and directories, thus saving a lot time.
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 if not self._exclude(p):
if os.path.isdir(p):
contents += [os.path.join(c, f) for f in os.listdir(p)]
else:
files.append(c)
return files
def _rendirchanges(self, src, dest):
changes = []
copies = {}
files = self._readcontents(os.path.join(self.tmppath, dest))
for f in files:
s = os.path.join(src, f)
d = os.path.join(dest, f)
changes.append(s)
changes.append(d)
Patrick Mezard
convert/gnuarch: fix switched copy source and destination...
r7567 copies[d] = s
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 return changes, copies
Aleix Conchillo Flaque
convert: improve gnu arch source performance and other fixes...
r6049 def _obtainrevision(self, rev):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 self.ui.debug(b'obtaining revision %s...\n' % rev)
output = self._execute(b'get', rev, self.tmppath)
Aleix Conchillo Flaque
convert: improve gnu arch source performance and other fixes...
r6049 self.checkexit(output)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 self.ui.debug(b'analyzing revision %s...\n' % rev)
Aleix Conchillo Flaque
convert: improve gnu arch source performance and other fixes...
r6049 files = self._readcontents(self.tmppath)
self.changes[rev].add_files += files
Aleix Conchillo Flaque
convert: added GNU Arch (tla) tests and related fixes
r6079 def _stripbasepath(self, path):
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if path.startswith(b'./'):
Aleix Conchillo Flaque
convert: added GNU Arch (tla) tests and related fixes
r6079 return path[2:]
return path
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 def _parsecatlog(self, data, rev):
Edouard Gomez
convert/gnuarch: fix cat-log parsing...
r7578 try:
Denis Laxalde
py3: use mail.parsebytes() in gnuarch catlog parser...
r43699 catlog = mail.parsebytes(data)
Edouard Gomez
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
r7592
# Commit date
Boris Feld
util: extract all date-related utils in utils/dateutil module...
r36625 self.changes[rev].date = dateutil.datestr(
Augie Fackler
cleanup: remove pointless r-prefixes on single-quoted strings...
r43906 dateutil.strdate(catlog['Standard-date'], b'%Y-%m-%d %H:%M:%S')
Augie Fackler
formatting: blacken the codebase...
r43346 )
Edouard Gomez
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
r7592
# Commit author
Augie Fackler
cleanup: remove pointless r-prefixes on single-quoted strings...
r43906 self.changes[rev].author = self.recode(catlog['Creator'])
Edouard Gomez
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
r7592
# Commit description
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 self.changes[rev].summary = b'\n\n'.join(
Denis Laxalde
py3: encode strings before setting rev summary in gnuarch converter
r43701 (
Augie Fackler
cleanup: remove pointless r-prefixes on single-quoted strings...
r43906 self.recode(catlog['Summary']),
Denis Laxalde
py3: encode strings before setting rev summary in gnuarch converter
r43701 self.recode(catlog.get_payload()),
)
Augie Fackler
formatting: blacken the codebase...
r43346 )
Edouard Gomez
convert/gnuarch: recode cat-log parts to utf-8 to be hg.description friendly
r7592 self.changes[rev].summary = self.recode(self.changes[rev].summary)
# Commit revision origin when dealing with a branch or tag
Augie Fackler
cleanup: remove pointless r-prefixes on single-quoted strings...
r43906 if 'Continuation-of' in catlog:
Matt Mackall
many, many trivial check-code fixups
r10282 self.changes[rev].continuationof = self.recode(
Augie Fackler
cleanup: remove pointless r-prefixes on single-quoted strings...
r43906 catlog['Continuation-of']
Augie Fackler
formatting: blacken the codebase...
r43346 )
Peter Arrenbrecht
cleanup: drop unused assignments
r7875 except Exception:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 raise error.Abort(_(b'could not parse cat-log of %s') % rev)
Aleix Conchillo Flaque
convert: add full description for gnu arch revisions
r6037
Aleix Conchillo Flaque
convert: improve gnu arch source performance and other fixes...
r6049 def _parsechangeset(self, data, rev):
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 for l in data:
l = l.strip()
Aleix Conchillo Flaque
convert: support binary files, link to files (viceversa) in gnu arch
r6055 # Added file (ignore added directory)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 if l.startswith(b'A') and not l.startswith(b'A/'):
Aleix Conchillo Flaque
convert: added GNU Arch (tla) tests and related fixes
r6079 file = self._stripbasepath(l[1:].strip())
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 if not self._exclude(file):
self.changes[rev].add_files.append(file)
Aleix Conchillo Flaque
convert: support binary files, link to files (viceversa) in gnu arch
r6055 # Deleted file (ignore deleted directory)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 elif l.startswith(b'D') and not l.startswith(b'D/'):
Aleix Conchillo Flaque
convert: added GNU Arch (tla) tests and related fixes
r6079 file = self._stripbasepath(l[1:].strip())
Aleix Conchillo Flaque
convert: support binary files, link to files (viceversa) in gnu arch
r6055 if not self._exclude(file):
self.changes[rev].del_files.append(file)
# Modified binary file
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 elif l.startswith(b'Mb'):
Aleix Conchillo Flaque
convert: added GNU Arch (tla) tests and related fixes
r6079 file = self._stripbasepath(l[2:].strip())
Aleix Conchillo Flaque
convert: support binary files, link to files (viceversa) in gnu arch
r6055 if not self._exclude(file):
self.changes[rev].mod_files.append(file)
# Modified link
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 elif l.startswith(b'M->'):
Aleix Conchillo Flaque
convert: added GNU Arch (tla) tests and related fixes
r6079 file = self._stripbasepath(l[3:].strip())
Aleix Conchillo Flaque
convert: support binary files, link to files (viceversa) in gnu arch
r6055 if not self._exclude(file):
self.changes[rev].mod_files.append(file)
# Modified file
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 elif l.startswith(b'M'):
Aleix Conchillo Flaque
convert: added GNU Arch (tla) tests and related fixes
r6079 file = self._stripbasepath(l[1:].strip())
Aleix Conchillo Flaque
convert: support binary files, link to files (viceversa) in gnu arch
r6055 if not self._exclude(file):
self.changes[rev].mod_files.append(file)
# Renamed file (or link)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 elif l.startswith(b'=>'):
files = l[2:].strip().split(b' ')
Aleix Conchillo Flaque
convert: support binary files, link to files (viceversa) in gnu arch
r6055 if len(files) == 1:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 files = l[2:].strip().split(b'\t')
Aleix Conchillo Flaque
convert: added GNU Arch (tla) tests and related fixes
r6079 src = self._stripbasepath(files[0])
dst = self._stripbasepath(files[1])
if not self._exclude(src) and not self._exclude(dst):
self.changes[rev].ren_files[src] = dst
Aleix Conchillo Flaque
convert: support binary files, link to files (viceversa) in gnu arch
r6055 # Conversion from file to link or from link to file (modified)
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 elif l.startswith(b'ch'):
Aleix Conchillo Flaque
convert: added GNU Arch (tla) tests and related fixes
r6079 file = self._stripbasepath(l[2:].strip())
Aleix Conchillo Flaque
convert: support binary files, link to files (viceversa) in gnu arch
r6055 if not self._exclude(file):
self.changes[rev].mod_files.append(file)
# Renamed directory
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 elif l.startswith(b'/>'):
dirs = l[2:].strip().split(b' ')
Aleix Conchillo Flaque
convert: added GNU Arch source converter
r6035 if len(dirs) == 1:
Augie Fackler
formatting: byteify all mercurial/ and hgext/ string literals...
r43347 dirs = l[2:].strip().split(b'\t')
Aleix Conchillo Flaque
convert: added GNU Arch (tla) tests and related fixes
r6079 src = self._stripbasepath(dirs[0])
dst = self._stripbasepath(dirs[1])
if not self._exclude(src) and not self._exclude(dst):
self.changes[rev].ren_dirs[src] = dst