# HG changeset patch # User Martin Geisler # Date 1336126916 -7200 # Node ID 1041a845f02dfc0269642b0059515d3e006f01d1 # Parent 43fb170a23bd9bc72919516b79e31c7ece421141# Parent f208a4e20018aa8897ae1c097758162081335892 merge with stable diff -r f208a4e20018 -r 1041a845f02d hgext/largefiles/overrides.py --- 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 diff -r f208a4e20018 -r 1041a845f02d hgext/largefiles/uisetup.py --- 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) diff -r f208a4e20018 -r 1041a845f02d hgext/rebase.py --- 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 diff -r f208a4e20018 -r 1041a845f02d mercurial/patch.py --- 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) diff -r f208a4e20018 -r 1041a845f02d tests/test-largefiles.t --- 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 .. diff -r f208a4e20018 -r 1041a845f02d tests/test-rebase-parameters.t --- 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