--- a/hgext/largefiles/overrides.py Fri May 04 12:04:07 2012 +0200
+++ b/hgext/largefiles/overrides.py Fri May 04 12:21:56 2012 +0200
@@ -781,6 +781,47 @@
archiver.done()
+def hgsubrepoarchive(orig, repo, ui, archiver, prefix):
+ rev = repo._state[1]
+ ctx = repo._repo[rev]
+
+ lfcommands.cachelfiles(ui, repo._repo, ctx.node())
+
+ def write(name, mode, islink, getdata):
+ if lfutil.isstandin(name):
+ return
+ data = getdata()
+
+ archiver.addfile(prefix + repo._path + '/' + name, mode, islink, data)
+
+ for f in ctx:
+ ff = ctx.flags(f)
+ getdata = ctx[f].data
+ if lfutil.isstandin(f):
+ path = lfutil.findfile(repo._repo, getdata().strip())
+ if path is None:
+ raise util.Abort(
+ _('largefile %s not found in repo store or system cache')
+ % lfutil.splitstandin(f))
+ f = lfutil.splitstandin(f)
+
+ def getdatafn():
+ fd = None
+ try:
+ fd = open(os.path.join(prefix, path), 'rb')
+ return fd.read()
+ finally:
+ if fd:
+ fd.close()
+
+ getdata = getdatafn
+
+ write(f, 'x' in ff and 0755 or 0644, 'l' in ff, getdata)
+
+ for subpath in ctx.substate:
+ sub = ctx.sub(subpath)
+ sub.archive(repo.ui, archiver, prefix)
+
# If a largefile is modified, the change is not reflected in its
# standin until a commit. cmdutil.bailifchanged() raises an exception
# if the repo has uncommitted changes. Wrap it to also check if
--- a/hgext/largefiles/uisetup.py Fri May 04 12:04:07 2012 +0200
+++ b/hgext/largefiles/uisetup.py Fri May 04 12:21:56 2012 +0200
@@ -100,6 +100,7 @@
extensions.wrapfunction(hg, 'merge', overrides.hgmerge)
extensions.wrapfunction(archival, 'archive', overrides.overridearchive)
+ extensions.wrapfunction(hgsubrepo, 'archive', overrides.hgsubrepoarchive)
extensions.wrapfunction(cmdutil, 'bailifchanged',
overrides.overridebailifchanged)
--- a/hgext/rebase.py Fri May 04 12:04:07 2012 +0200
+++ b/hgext/rebase.py Fri May 04 12:21:56 2012 +0200
@@ -182,7 +182,7 @@
branch = repo[None].branch()
dest = repo[branch]
else:
- dest = repo[destf]
+ dest = scmutil.revsingle(repo, destf)
if revf:
rebaseset = repo.revs('%lr', revf)
@@ -201,7 +201,7 @@
root = None
if not rebaseset:
- repo.ui.debug('base is ancestor of destination')
+ repo.ui.debug('base is ancestor of destination\n')
result = None
elif not keepf and list(repo.revs('first(children(%ld) - %ld)',
rebaseset, rebaseset)):
@@ -618,7 +618,7 @@
if commonbase == dest:
samebranch = root.branch() == dest.branch()
if samebranch and root in dest.children():
- repo.ui.debug('source is a child of destination')
+ repo.ui.debug('source is a child of destination\n')
return None
# rebase on ancestor, force detach
detach = True
--- a/mercurial/patch.py Fri May 04 12:04:07 2012 +0200
+++ b/mercurial/patch.py Fri May 04 12:21:56 2012 +0200
@@ -1040,12 +1040,13 @@
hunk.append(l)
return l.rstrip('\r\n')
- line = getline(lr, self.hunk)
- while line and not line.startswith('literal '):
+ while True:
line = getline(lr, self.hunk)
- if not line:
- raise PatchError(_('could not extract "%s" binary data')
- % self._fname)
+ if not line:
+ raise PatchError(_('could not extract "%s" binary data')
+ % self._fname)
+ if line.startswith('literal '):
+ break
size = int(line[8:].rstrip())
dec = []
line = getline(lr, self.hunk)
--- a/tests/test-largefiles.t Fri May 04 12:04:07 2012 +0200
+++ b/tests/test-largefiles.t Fri May 04 12:21:56 2012 +0200
@@ -1096,4 +1096,34 @@
abort: uncommitted changes in subrepo subrepo
(use --subrepos for recursive commit)
[255]
+
+# Add a normal file to the subrepo, then test archiving
+ $ echo 'normal file' > subrepo/normal.txt
+ $ hg -R subrepo add subrepo/normal.txt
+# Lock in subrepo, otherwise the change isn't archived
+ $ hg ci -S -m "add normal file to top level"
+ committing subrepository subrepo
+ Invoking status precommit hook
+ M large.txt
+ A normal.txt
+ Invoking status precommit hook
+ M .hgsubstate
+ $ hg archive -S lf_subrepo_archive
+ $ find lf_subrepo_archive -print
+ lf_subrepo_archive
+ lf_subrepo_archive/.hg_archival.txt
+ lf_subrepo_archive/.hgsubstate
+ lf_subrepo_archive/subrepo
+ lf_subrepo_archive/subrepo/large.txt
+ lf_subrepo_archive/subrepo/normal.txt
+ lf_subrepo_archive/a
+ lf_subrepo_archive/a/b
+ lf_subrepo_archive/a/b/c
+ lf_subrepo_archive/a/b/c/d
+ lf_subrepo_archive/a/b/c/d/e.normal.txt
+ lf_subrepo_archive/a/b/c/d/e.large.txt
+ lf_subrepo_archive/a/b/c/x
+ lf_subrepo_archive/a/b/c/x/y.normal.txt
+ lf_subrepo_archive/.hgsub
+
$ cd ..
--- a/tests/test-rebase-parameters.t Fri May 04 12:04:07 2012 +0200
+++ b/tests/test-rebase-parameters.t Fri May 04 12:21:56 2012 +0200
@@ -158,12 +158,12 @@
$ cd ..
-Rebase with dest == `hg branch` => same as no arguments (from 3 onto 8):
+Rebase with dest == branch(.) => same as no arguments (from 3 onto 8):
$ hg clone -q -u 3 a a3
$ cd a3
- $ hg rebase --dest `hg branch`
+ $ hg rebase --dest 'branch(.)'
saved backup bundle to $TESTTMP/a3/.hg/strip-backup/*-backup.hg (glob)
$ hg tglog