# HG changeset patch # User Wagner Bruna # Date 1367417929 10800 # Node ID da4175159dac80ebc954530a5abfbacf064ba465 # Parent fc081623f4bd918e384b47231707a4ee71dc1ccf# Parent 271985b6788804f6c644525af7cb6c6e28426d64 merge with i18n diff -r 271985b67888 -r da4175159dac mercurial/dispatch.py --- a/mercurial/dispatch.py Wed May 01 00:38:43 2013 +0900 +++ b/mercurial/dispatch.py Wed May 01 11:18:49 2013 -0300 @@ -485,6 +485,22 @@ The values are listed in the order they appear in args. The options and values are removed from args. + + >>> args = ['x', '--cwd', 'foo', 'y'] + >>> _earlygetopt(['--cwd'], args), args + (['foo'], ['x', 'y']) + + >>> args = ['x', '--cwd=bar', 'y'] + >>> _earlygetopt(['--cwd'], args), args + (['bar'], ['x', 'y']) + + >>> args = ['x', '-R', 'foo', 'y'] + >>> _earlygetopt(['-R'], args), args + (['foo'], ['x', 'y']) + + >>> args = ['x', '-Rbar', 'y'] + >>> _earlygetopt(['-R'], args), args + (['bar'], ['x', 'y']) """ try: argcount = args.index("--") @@ -494,14 +510,22 @@ values = [] pos = 0 while pos < argcount: - if args[pos] in aliases: - if pos + 1 >= argcount: - # ignore and let getopt report an error if there is no value - break + fullarg = arg = args[pos] + equals = arg.find('=') + if equals > -1: + arg = arg[:equals] + if arg in aliases: del args[pos] - values.append(args.pop(pos)) - argcount -= 2 - elif args[pos][:2] in shortopts: + if equals > -1: + values.append(fullarg[equals + 1:]) + argcount -= 1 + else: + if pos + 1 >= argcount: + # ignore and let getopt report an error if there is no value + break + values.append(args.pop(pos)) + argcount -= 2 + elif arg[:2] in shortopts: # short option can have no following space, e.g. hg log -Rfoo values.append(args.pop(pos)[2:]) argcount -= 1 diff -r 271985b67888 -r da4175159dac mercurial/hgweb/webutil.py --- a/mercurial/hgweb/webutil.py Wed May 01 00:38:43 2013 +0900 +++ b/mercurial/hgweb/webutil.py Wed May 01 11:18:49 2013 -0300 @@ -51,11 +51,14 @@ def __nonzero__(self): """return True if any revision to navigate over""" + return self._first() is not None + + def _first(self): + """return the minimum non-filtered changeset or None""" try: - self._revlog.node(0) - return True - except error.RepoError: - return False + return iter(self._revlog).next() + except StopIteration: + return None def hex(self, rev): return hex(self._revlog.node(rev)) @@ -85,7 +88,8 @@ targets.append(pos - f) targets.sort() - navbefore = [("(0)", self.hex(0))] + first = self._first() + navbefore = [("(%i)" % first, self.hex(first))] navafter = [] for rev in targets: if rev not in self._revlog: diff -r 271985b67888 -r da4175159dac mercurial/localrepo.py --- a/mercurial/localrepo.py Wed May 01 00:38:43 2013 +0900 +++ b/mercurial/localrepo.py Wed May 01 11:18:49 2013 -0300 @@ -1762,8 +1762,31 @@ if not remote.canpush(): raise util.Abort(_("destination does not support push")) unfi = self.unfiltered() + def localphasemove(nodes, phase=phases.public): + """move to in the local source repo""" + if locallock is not None: + phases.advanceboundary(self, phase, nodes) + else: + # repo is not locked, do not change any phases! + # Informs the user that phases should have been moved when + # applicable. + actualmoves = [n for n in nodes if phase < self[n].phase()] + phasestr = phases.phasenames[phase] + if actualmoves: + self.ui.status(_('cannot lock source repo, skipping local' + ' %s phase update\n') % phasestr) # get local lock as we might write phase data - locallock = self.lock() + locallock = None + try: + locallock = self.lock() + except IOError, err: + if err.errno != errno.EACCES: + raise + # source repo cannot be locked. + # We do not abort the push, but just disable the local phase + # synchronisation. + msg = 'cannot lock source repository: %s\n' % err + self.ui.debug(msg) try: self.checkpush(force, revs) lock = None @@ -1883,17 +1906,17 @@ # on the remote. remotephases = {'publishing': 'True'} if not remotephases: # old server or public only repo - phases.advanceboundary(self, phases.public, cheads) + localphasemove(cheads) # don't push any phase data as there is nothing to push else: ana = phases.analyzeremotephases(self, cheads, remotephases) pheads, droots = ana ### Apply remote phase on local if remotephases.get('publishing', False): - phases.advanceboundary(self, phases.public, cheads) + localphasemove(cheads) else: # publish = False - phases.advanceboundary(self, phases.public, pheads) - phases.advanceboundary(self, phases.draft, cheads) + localphasemove(pheads) + localphasemove(cheads, phases.draft) ### Apply local phase on remote # Get the list of all revs draft on remote by public here. @@ -1915,7 +1938,8 @@ if lock is not None: lock.release() finally: - locallock.release() + if locallock is not None: + locallock.release() self.ui.debug("checking for updated bookmarks\n") rb = remote.listkeys('bookmarks') diff -r 271985b67888 -r da4175159dac mercurial/merge.py --- a/mercurial/merge.py Wed May 01 00:38:43 2013 +0900 +++ b/mercurial/merge.py Wed May 01 11:18:49 2013 -0300 @@ -455,8 +455,10 @@ numupdates = len(actions) workeractions = [a for a in actions if a[1] in 'gr'] - updated = len([a for a in workeractions if a[1] == 'g']) - removed = len([a for a in workeractions if a[1] == 'r']) + updateactions = [a for a in workeractions if a[1] == 'g'] + updated = len(updateactions) + removeactions = [a for a in workeractions if a[1] == 'r'] + removed = len(removeactions) actions = [a for a in actions if a[1] not in 'gr'] hgsub = [a[1] for a in workeractions if a[0] == '.hgsubstate'] @@ -465,7 +467,13 @@ z = 0 prog = worker.worker(repo.ui, 0.001, getremove, (repo, mctx, overwrite), - workeractions) + removeactions) + for i, item in prog: + z += i + repo.ui.progress(_('updating'), z, item=item, total=numupdates, + unit=_('files')) + prog = worker.worker(repo.ui, 0.001, getremove, (repo, mctx, overwrite), + updateactions) for i, item in prog: z += i repo.ui.progress(_('updating'), z, item=item, total=numupdates, diff -r 271985b67888 -r da4175159dac tests/hghave.py --- a/tests/hghave.py Wed May 01 00:38:43 2013 +0900 +++ b/tests/hghave.py Wed May 01 11:18:49 2013 -0300 @@ -274,6 +274,9 @@ def has_msys(): return os.getenv('MSYSTEM') +def has_aix(): + return sys.platform.startswith("aix") + checks = { "true": (lambda: True, "yak shaving"), "false": (lambda: False, "nail clipper"), @@ -314,4 +317,5 @@ "unix-permissions": (has_unix_permissions, "unix-style permissions"), "windows": (has_windows, "Windows"), "msys": (has_msys, "Windows with MSYS"), + "aix": (has_aix, "AIX"), } diff -r 271985b67888 -r da4175159dac tests/test-dirstate.t --- a/tests/test-dirstate.t Wed May 01 00:38:43 2013 +0900 +++ b/tests/test-dirstate.t Wed May 01 11:18:49 2013 -0300 @@ -55,8 +55,9 @@ Test modulo storage/comparison of absurd dates: +#if no-aix $ touch -t 195001011200 a $ hg st $ hg debugstate n 644 2 2018-01-19 15:14:08 a - +#endif diff -r 271985b67888 -r da4175159dac tests/test-doctest.py --- a/tests/test-doctest.py Wed May 01 00:38:43 2013 +0900 +++ b/tests/test-doctest.py Wed May 01 11:18:49 2013 -0300 @@ -27,6 +27,9 @@ import mercurial.url doctest.testmod(mercurial.url) +import mercurial.dispatch +doctest.testmod(mercurial.dispatch) + import mercurial.encoding doctest.testmod(mercurial.encoding) diff -r 271985b67888 -r da4175159dac tests/test-hgweb-commands.t --- a/tests/test-hgweb-commands.t Wed May 01 00:38:43 2013 +0900 +++ b/tests/test-hgweb-commands.t Wed May 01 11:18:49 2013 -0300 @@ -1436,4 +1436,99 @@ error: unknown revision '4' +filtered '0' changeset + +(create new root) + $ hg up null + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo 'babar' > jungle + $ hg add jungle + $ hg ci -m 'Babar is in the jungle!' + created new head + $ hg graft 0:: + grafting revision 0 + grafting revision 1 + grafting revision 2 + grafting revision 3 + grafting revision 4 + grafting revision 5 +(turning the initial root secret (filtered)) + $ hg phase --force --secret 0 + $ PATH_INFO=/graph/; export PATH_INFO + $ QUERY_STRING='' + $ python hgweb.cgi | grep Status + Status: 200 Script output follows\r (esc) +(check rendered revision) + $ QUERY_STRING='style=raw' + $ python hgweb.cgi | grep -v ETag + Status: 200 Script output follows\r (esc) + Content-Type: text/plain; charset=ascii\r (esc) + \r (esc) + + # HG graph + # Node ID 1d9b947fef1fbb382a95c11a8f5a67e9a10b5026 + # Rows shown 7 + + changeset: 1d9b947fef1f + user: test + date: 1970-01-01 + summary: 5 + branch: default + tag: tip + + node: (0, 0) (color 1) + edge: (0, 0) -> (0, 1) (color 1) + + changeset: 0cfd435fd222 + user: test + date: 1970-01-01 + summary: 4 + + node: (0, 1) (color 1) + edge: (0, 1) -> (0, 2) (color 1) + + changeset: 6768b9939e82 + user: test + date: 1970-01-01 + summary: 3 + + node: (0, 2) (color 1) + edge: (0, 2) -> (0, 3) (color 1) + + changeset: 05b0497fd125 + user: test + date: 1970-01-01 + summary: 2 + + node: (0, 3) (color 1) + edge: (0, 3) -> (0, 4) (color 1) + + changeset: 9c102df67cfb + user: test + date: 1970-01-01 + summary: 1 + + node: (0, 4) (color 1) + edge: (0, 4) -> (0, 5) (color 1) + + changeset: 3ebcd7db11bf + user: test + date: 1970-01-01 + summary: 0 + + node: (0, 5) (color 1) + edge: (0, 5) -> (0, 6) (color 1) + + changeset: c5e9bd96ae01 + user: test + date: 1970-01-01 + summary: Babar is in the jungle! + + node: (0, 6) (color 1) + + + + + $ cd .. + diff -r 271985b67888 -r da4175159dac tests/test-hgweb-empty.t --- a/tests/test-hgweb-empty.t Wed May 01 00:38:43 2013 +0900 +++ b/tests/test-hgweb-empty.t Wed May 01 11:18:49 2013 -0300 @@ -70,7 +70,7 @@ @@ -85,7 +85,7 @@ @@ -97,6 +97,8 @@ + $ echo babar + babar $ ("$TESTDIR/get-with-headers.py" localhost:$HGPORT 'log') 200 Script output follows @@ -161,7 +163,7 @@
@@ -176,7 +178,7 @@ @@ -250,7 +252,7 @@ @@ -320,7 +322,7 @@ diff -r 271985b67888 -r da4175159dac tests/test-issue672.t --- a/tests/test-issue672.t Wed May 01 00:38:43 2013 +0900 +++ b/tests/test-issue672.t Wed May 01 11:18:49 2013 -0300 @@ -37,6 +37,7 @@ 1: other deleted -> r 1a: remote created -> g removing 1 + updating: 1 1/2 files (50.00%) getting 1a updating: 1a 2/2 files (100.00%) 1 files updated, 0 files merged, 1 files removed, 0 files unresolved diff -r 271985b67888 -r da4175159dac tests/test-phases-exchange.t --- a/tests/test-phases-exchange.t Wed May 01 00:38:43 2013 +0900 +++ b/tests/test-phases-exchange.t Wed May 01 11:18:49 2013 -0300 @@ -1062,5 +1062,43 @@ | o 0 public a-A - 054250a37db4 + +Pushing From an unlockable repo +-------------------------------- +(issue3684) + +Unability to lock the source repo should not prevent the push. It will prevent +the retrieval of remote phase during push. For example, pushing to a publishing +server won't turn changeset public. + +1. Test that push is not prevented + + $ hg init Phi + $ cd Upsilon + $ chmod -R -w .hg + $ hg push ../Phi + pushing to ../Phi + searching for changes + adding changesets + adding manifests + adding file changes + added 14 changesets with 14 changes to 14 files (+3 heads) + $ chmod -R +w .hg + +2. Test that failed phases movement are reported + + $ hg phase --force --draft 3 + $ chmod -R -w .hg + $ hg push ../Phi + pushing to ../Phi + searching for changes + no changes found + cannot lock source repo, skipping local public phase update + [1] + $ chmod -R +w .hg + $ hgph Upsilon + + $ cd .. + $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS diff -r 271985b67888 -r da4175159dac tests/test-rename-dir-merge.t --- a/tests/test-rename-dir-merge.t Wed May 01 00:38:43 2013 +0900 +++ b/tests/test-rename-dir-merge.t Wed May 01 11:18:49 2013 -0300 @@ -46,6 +46,7 @@ b/b: remote created -> g removing a/a removing a/b + updating: a/b 2/5 files (40.00%) getting b/a getting b/b updating: b/b 4/5 files (80.00%) diff -r 271985b67888 -r da4175159dac tests/test-rename-merge2.t --- a/tests/test-rename-merge2.t Wed May 01 00:38:43 2013 +0900 +++ b/tests/test-rename-merge2.t Wed May 01 11:18:49 2013 -0300 @@ -290,6 +290,7 @@ rev: versions differ -> m preserving rev for resolve of rev removing a + updating: a 1/3 files (33.33%) getting b updating: b 2/3 files (66.67%) updating: rev 3/3 files (100.00%) diff -r 271985b67888 -r da4175159dac tests/test-update-reverse.t --- a/tests/test-update-reverse.t Wed May 01 00:38:43 2013 +0900 +++ b/tests/test-update-reverse.t Wed May 01 11:18:49 2013 -0300 @@ -73,6 +73,7 @@ main: remote created -> g removing side1 removing side2 + updating: side2 2/3 files (66.67%) getting main updating: main 3/3 files (100.00%) 1 files updated, 0 files merged, 2 files removed, 0 files unresolved