Show More
@@ -950,8 +950,9 b' def bookmark(ui, repo, *names, **opts):' | |||
|
950 | 950 | if ui.quiet: |
|
951 | 951 | ui.write("%s\n" % bmark, label=label) |
|
952 | 952 | else: |
|
953 | ui.write(" %s %-25s %d:%s\n" % ( | |
|
954 | prefix, bmark, repo.changelog.rev(n), hexfn(n)), | |
|
953 | pad = " " * (25 - encoding.colwidth(bmark)) | |
|
954 | ui.write(" %s %s%s %d:%s\n" % ( | |
|
955 | prefix, bmark, pad, repo.changelog.rev(n), hexfn(n)), | |
|
955 | 956 | label=label) |
|
956 | 957 | |
|
957 | 958 | @command('branch', |
@@ -355,7 +355,7 b' class cmdalias(object):' | |||
|
355 | 355 | if not self.definition: |
|
356 | 356 | def fn(ui, *args): |
|
357 | 357 | ui.warn(_("no definition for alias '%s'\n") % self.name) |
|
358 | return 1 | |
|
358 | return -1 | |
|
359 | 359 | self.fn = fn |
|
360 | 360 | self.badalias = True |
|
361 | 361 | return |
@@ -383,7 +383,16 b' class cmdalias(object):' | |||
|
383 | 383 | self.fn = fn |
|
384 | 384 | return |
|
385 | 385 | |
|
386 | try: | |
|
386 | 387 | args = shlex.split(self.definition) |
|
388 | except ValueError, inst: | |
|
389 | def fn(ui, *args): | |
|
390 | ui.warn(_("error in definition for alias '%s': %s\n") | |
|
391 | % (self.name, inst)) | |
|
392 | return -1 | |
|
393 | self.fn = fn | |
|
394 | self.badalias = True | |
|
395 | return | |
|
387 | 396 | self.cmdname = cmd = args.pop(0) |
|
388 | 397 | args = map(util.expandpath, args) |
|
389 | 398 | |
@@ -393,7 +402,7 b' class cmdalias(object):' | |||
|
393 | 402 | ui.warn(_("error in definition for alias '%s': %s may only " |
|
394 | 403 | "be given on the command line\n") |
|
395 | 404 | % (self.name, invalidarg)) |
|
396 | return 1 | |
|
405 | return -1 | |
|
397 | 406 | |
|
398 | 407 | self.fn = fn |
|
399 | 408 | self.badalias = True |
@@ -425,14 +434,14 b' class cmdalias(object):' | |||
|
425 | 434 | commands.help_(ui, cmd, unknowncmd=True) |
|
426 | 435 | except error.UnknownCommand: |
|
427 | 436 | pass |
|
428 | return 1 | |
|
437 | return -1 | |
|
429 | 438 | self.fn = fn |
|
430 | 439 | self.badalias = True |
|
431 | 440 | except error.AmbiguousCommand: |
|
432 | 441 | def fn(ui, *args): |
|
433 | 442 | ui.warn(_("alias '%s' resolves to ambiguous command '%s'\n") \ |
|
434 | 443 | % (self.name, cmd)) |
|
435 | return 1 | |
|
444 | return -1 | |
|
436 | 445 | self.fn = fn |
|
437 | 446 | self.badalias = True |
|
438 | 447 |
@@ -142,3 +142,25 b' def canonpath(root, cwd, myname, auditor' | |||
|
142 | 142 | name = dirname |
|
143 | 143 | |
|
144 | 144 | raise util.Abort(_("%s not under root '%s'") % (myname, root)) |
|
145 | ||
|
146 | def normasprefix(path): | |
|
147 | '''normalize the specified path as path prefix | |
|
148 | ||
|
149 | Returned vaule can be used safely for "p.startswith(prefix)", | |
|
150 | "p[len(prefix):]", and so on. | |
|
151 | ||
|
152 | For efficiency, this expects "path" argument to be already | |
|
153 | normalized by "os.path.normpath", "os.path.realpath", and so on. | |
|
154 | ||
|
155 | See also issue3033 for detail about need of this function. | |
|
156 | ||
|
157 | >>> normasprefix('/foo/bar').replace(os.sep, '/') | |
|
158 | '/foo/bar/' | |
|
159 | >>> normasprefix('/').replace(os.sep, '/') | |
|
160 | '/' | |
|
161 | ''' | |
|
162 | d, p = os.path.splitdrive(path) | |
|
163 | if len(p) != len(os.sep): | |
|
164 | return path + os.sep | |
|
165 | else: | |
|
166 | return path |
@@ -277,8 +277,7 b' def reporelpath(repo):' | |||
|
277 | 277 | parent = repo |
|
278 | 278 | while util.safehasattr(parent, '_subparent'): |
|
279 | 279 | parent = parent._subparent |
|
280 | p = parent.root.rstrip(os.sep) | |
|
281 | return repo.root[len(p) + 1:] | |
|
280 | return repo.root[len(pathutil.normasprefix(parent.root)):] | |
|
282 | 281 | |
|
283 | 282 | def subrelpath(sub): |
|
284 | 283 | """return path to this subrepo as seen from outermost repo""" |
@@ -315,17 +314,19 b' def _abssource(repo, push=False, abort=T' | |||
|
315 | 314 | if abort: |
|
316 | 315 | raise util.Abort(_("default path for subrepository not found")) |
|
317 | 316 | |
|
318 | def _sanitize(ui, path): | |
|
319 | def v(arg, dirname, names): | |
|
317 | def _sanitize(ui, path, ignore): | |
|
318 | for dirname, dirs, names in os.walk(path): | |
|
319 | for i, d in enumerate(dirs): | |
|
320 | if d.lower() == ignore: | |
|
321 | del dirs[i] | |
|
322 | break | |
|
320 | 323 | if os.path.basename(dirname).lower() != '.hg': |
|
321 |
|
|
|
324 | continue | |
|
322 | 325 | for f in names: |
|
323 | 326 | if f.lower() == 'hgrc': |
|
324 | ui.warn( | |
|
325 | _("warning: removing potentially hostile .hg/hgrc in '%s'") | |
|
326 | % path) | |
|
327 | ui.warn(_("warning: removing potentially hostile 'hgrc' " | |
|
328 | "in '%s'\n") % dirname) | |
|
327 | 329 | os.unlink(os.path.join(dirname, f)) |
|
328 | os.walk(path, v, None) | |
|
329 | 330 | |
|
330 | 331 | def subrepo(ctx, path): |
|
331 | 332 | """return instance of the right subrepo class for subrepo in path""" |
@@ -1059,7 +1060,7 b' class svnsubrepo(abstractsubrepo):' | |||
|
1059 | 1060 | # update to a directory which has since been deleted and recreated. |
|
1060 | 1061 | args.append('%s@%s' % (state[0], state[1])) |
|
1061 | 1062 | status, err = self._svncommand(args, failok=True) |
|
1062 | _sanitize(self._ui, self._path) | |
|
1063 | _sanitize(self._ui, self._ctx._repo.wjoin(self._path), '.svn') | |
|
1063 | 1064 | if not re.search('Checked out revision [0-9]+.', status): |
|
1064 | 1065 | if ('is already a working copy for a different URL' in err |
|
1065 | 1066 | and (self._wcchanged()[:2] == (False, False))): |
@@ -1352,7 +1353,7 b' class gitsubrepo(abstractsubrepo):' | |||
|
1352 | 1353 | self._gitcommand(['reset', 'HEAD']) |
|
1353 | 1354 | cmd.append('-f') |
|
1354 | 1355 | self._gitcommand(cmd + args) |
|
1355 | _sanitize(self._ui, self._path) | |
|
1356 | _sanitize(self._ui, self._abspath, '.git') | |
|
1356 | 1357 | |
|
1357 | 1358 | def rawcheckout(): |
|
1358 | 1359 | # no branch to checkout, check it out with no branch |
@@ -1401,6 +1402,7 b' class gitsubrepo(abstractsubrepo):' | |||
|
1401 | 1402 | if tracking[remote] != self._gitcurrentbranch(): |
|
1402 | 1403 | checkout([tracking[remote]]) |
|
1403 | 1404 | self._gitcommand(['merge', '--ff', remote]) |
|
1405 | _sanitize(self._ui, self._abspath, '.git') | |
|
1404 | 1406 | else: |
|
1405 | 1407 | # a real merge would be required, just checkout the revision |
|
1406 | 1408 | rawcheckout() |
@@ -1436,7 +1438,7 b' class gitsubrepo(abstractsubrepo):' | |||
|
1436 | 1438 | self.get(state) # fast forward merge |
|
1437 | 1439 | elif base != self._state[1]: |
|
1438 | 1440 | self._gitcommand(['merge', '--no-commit', revision]) |
|
1439 | _sanitize(self._ui, self._path) | |
|
1441 | _sanitize(self._ui, self._abspath, '.git') | |
|
1440 | 1442 | |
|
1441 | 1443 | if self.dirty(): |
|
1442 | 1444 | if self._gitstate() != revision: |
@@ -11,6 +11,7 b'' | |||
|
11 | 11 | > ambiguous = s |
|
12 | 12 | > recursive = recursive |
|
13 | 13 | > nodefinition = |
|
14 | > noclosingquotation = ' | |
|
14 | 15 | > no--cwd = status --cwd elsewhere |
|
15 | 16 | > no-R = status -R elsewhere |
|
16 | 17 | > no--repo = status --repo elsewhere |
@@ -60,7 +61,7 b' unknown' | |||
|
60 | 61 | |
|
61 | 62 | $ hg unknown |
|
62 | 63 | alias 'unknown' resolves to unknown command 'bargle' |
|
63 |
[ |
|
|
64 | [255] | |
|
64 | 65 | $ hg help unknown |
|
65 | 66 | alias 'unknown' resolves to unknown command 'bargle' |
|
66 | 67 | |
@@ -69,7 +70,7 b' ambiguous' | |||
|
69 | 70 | |
|
70 | 71 | $ hg ambiguous |
|
71 | 72 | alias 'ambiguous' resolves to ambiguous command 's' |
|
72 |
[ |
|
|
73 | [255] | |
|
73 | 74 | $ hg help ambiguous |
|
74 | 75 | alias 'ambiguous' resolves to ambiguous command 's' |
|
75 | 76 | |
@@ -78,7 +79,7 b' recursive' | |||
|
78 | 79 | |
|
79 | 80 | $ hg recursive |
|
80 | 81 | alias 'recursive' resolves to unknown command 'recursive' |
|
81 |
[ |
|
|
82 | [255] | |
|
82 | 83 | $ hg help recursive |
|
83 | 84 | alias 'recursive' resolves to unknown command 'recursive' |
|
84 | 85 | |
@@ -87,36 +88,45 b' no definition' | |||
|
87 | 88 | |
|
88 | 89 | $ hg nodef |
|
89 | 90 | no definition for alias 'nodefinition' |
|
90 |
[ |
|
|
91 | [255] | |
|
91 | 92 | $ hg help nodef |
|
92 | 93 | no definition for alias 'nodefinition' |
|
93 | 94 | |
|
94 | 95 | |
|
96 | no closing quotation | |
|
97 | ||
|
98 | $ hg noclosing | |
|
99 | error in definition for alias 'noclosingquotation': No closing quotation | |
|
100 | [255] | |
|
101 | $ hg help noclosing | |
|
102 | error in definition for alias 'noclosingquotation': No closing quotation | |
|
103 | ||
|
104 | ||
|
95 | 105 | invalid options |
|
96 | 106 | |
|
97 | 107 | $ hg no--cwd |
|
98 | 108 | error in definition for alias 'no--cwd': --cwd may only be given on the command line |
|
99 |
[ |
|
|
109 | [255] | |
|
100 | 110 | $ hg help no--cwd |
|
101 | 111 | error in definition for alias 'no--cwd': --cwd may only be given on the command line |
|
102 | 112 | $ hg no-R |
|
103 | 113 | error in definition for alias 'no-R': -R may only be given on the command line |
|
104 |
[ |
|
|
114 | [255] | |
|
105 | 115 | $ hg help no-R |
|
106 | 116 | error in definition for alias 'no-R': -R may only be given on the command line |
|
107 | 117 | $ hg no--repo |
|
108 | 118 | error in definition for alias 'no--repo': --repo may only be given on the command line |
|
109 |
[ |
|
|
119 | [255] | |
|
110 | 120 | $ hg help no--repo |
|
111 | 121 | error in definition for alias 'no--repo': --repo may only be given on the command line |
|
112 | 122 | $ hg no--repository |
|
113 | 123 | error in definition for alias 'no--repository': --repository may only be given on the command line |
|
114 |
[ |
|
|
124 | [255] | |
|
115 | 125 | $ hg help no--repository |
|
116 | 126 | error in definition for alias 'no--repository': --repository may only be given on the command line |
|
117 | 127 | $ hg no--config |
|
118 | 128 | error in definition for alias 'no--config': --config may only be given on the command line |
|
119 |
[ |
|
|
129 | [255] | |
|
120 | 130 | |
|
121 | 131 | optional repository |
|
122 | 132 |
@@ -19,6 +19,7 b" testmod('mercurial.hg')" | |||
|
19 | 19 | testmod('mercurial.hgweb.hgwebdir_mod') |
|
20 | 20 | testmod('mercurial.match') |
|
21 | 21 | testmod('mercurial.minirst') |
|
22 | testmod('mercurial.pathutil') | |
|
22 | 23 | testmod('mercurial.revset') |
|
23 | 24 | testmod('mercurial.store') |
|
24 | 25 | testmod('mercurial.subrepo') |
@@ -116,22 +116,25 b' add branches/tags' | |||
|
116 | 116 | marked working directory as branch \xe7\x9f\xad\xe5\x90\x8d (esc) |
|
117 | 117 | (branches are permanent and global, did you want a bookmark?) |
|
118 | 118 | $ hg tag $S |
|
119 | $ hg book -f $S | |
|
119 | 120 | $ hg branch $M |
|
120 | 121 | marked working directory as branch MIDDLE_ |
|
121 | 122 | (branches are permanent and global, did you want a bookmark?) |
|
122 | 123 | $ hg tag $M |
|
124 | $ hg book -f $M | |
|
123 | 125 | $ hg branch $L |
|
124 | 126 | marked working directory as branch \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d (esc) |
|
125 | 127 | (branches are permanent and global, did you want a bookmark?) |
|
126 | 128 | $ hg tag $L |
|
129 | $ hg book -f $L | |
|
127 | 130 | |
|
128 | 131 | check alignment of branches |
|
129 | 132 | |
|
130 |
$ hg |
|
|
131 | tip 5:d745ff46155b | |
|
132 | \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d 4:9259be597f19 (esc) | |
|
133 |
|
|
|
134 |
|
|
|
133 | $ hg branches | |
|
134 | \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d 5:d745ff46155b (esc) | |
|
135 | MIDDLE_ 4:9259be597f19 (inactive) | |
|
136 | \xe7\x9f\xad\xe5\x90\x8d 3:b06c5b6def9e (inactive) (esc) | |
|
137 | default 2:64a70663cee8 (inactive) | |
|
135 | 138 | |
|
136 | 139 | check alignment of tags |
|
137 | 140 | |
@@ -141,4 +144,9 b' check alignment of tags' | |||
|
141 | 144 | MIDDLE_ 3:b06c5b6def9e |
|
142 | 145 | \xe7\x9f\xad\xe5\x90\x8d 2:64a70663cee8 (esc) |
|
143 | 146 | |
|
144 | $ cd .. | |
|
147 | check alignment of bookmarks | |
|
148 | ||
|
149 | $ hg book | |
|
150 | MIDDLE_ 5:d745ff46155b | |
|
151 | \xe7\x9f\xad\xe5\x90\x8d 4:9259be597f19 (esc) | |
|
152 | * \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d 5:d745ff46155b (esc) |
@@ -566,3 +566,105 b' traceback' | |||
|
566 | 566 | #endif |
|
567 | 567 | |
|
568 | 568 | $ cd .. |
|
569 | ||
|
570 | Test sanitizing ".hg/hgrc" in subrepo | |
|
571 | ||
|
572 | $ cd t | |
|
573 | $ hg tip -q | |
|
574 | 7:af6d2edbb0d3 | |
|
575 | $ hg update -q -C af6d2edbb0d3 | |
|
576 | $ cd s | |
|
577 | $ git checkout -q -b sanitize-test | |
|
578 | $ mkdir .hg | |
|
579 | $ echo '.hg/hgrc in git repo' > .hg/hgrc | |
|
580 | $ mkdir -p sub/.hg | |
|
581 | $ echo 'sub/.hg/hgrc in git repo' > sub/.hg/hgrc | |
|
582 | $ git add .hg sub | |
|
583 | $ git commit -qm 'add .hg/hgrc to be sanitized at hg update' | |
|
584 | $ git push -q origin sanitize-test | |
|
585 | $ cd .. | |
|
586 | $ grep ' s$' .hgsubstate | |
|
587 | 32a343883b74769118bb1d3b4b1fbf9156f4dddc s | |
|
588 | $ hg commit -qm 'commit with git revision including .hg/hgrc' | |
|
589 | $ hg parents -q | |
|
590 | 8:3473d20bddcf | |
|
591 | $ grep ' s$' .hgsubstate | |
|
592 | c4069473b459cf27fd4d7c2f50c4346b4e936599 s | |
|
593 | $ cd .. | |
|
594 | ||
|
595 | $ hg -R tc pull -q | |
|
596 | $ hg -R tc update -q -C 3473d20bddcf 2>&1 | sort | |
|
597 | warning: removing potentially hostile 'hgrc' in '$TESTTMP/tc/s/.hg' (glob) | |
|
598 | warning: removing potentially hostile 'hgrc' in '$TESTTMP/tc/s/sub/.hg' (glob) | |
|
599 | $ cd tc | |
|
600 | $ hg parents -q | |
|
601 | 8:3473d20bddcf | |
|
602 | $ grep ' s$' .hgsubstate | |
|
603 | c4069473b459cf27fd4d7c2f50c4346b4e936599 s | |
|
604 | $ cat s/.hg/hgrc | |
|
605 | cat: s/.hg/hgrc: No such file or directory | |
|
606 | [1] | |
|
607 | $ cat s/sub/.hg/hgrc | |
|
608 | cat: s/sub/.hg/hgrc: No such file or directory | |
|
609 | [1] | |
|
610 | $ cd .. | |
|
611 | ||
|
612 | additional test for "git merge --ff" route: | |
|
613 | ||
|
614 | $ cd t | |
|
615 | $ hg tip -q | |
|
616 | 8:3473d20bddcf | |
|
617 | $ hg update -q -C af6d2edbb0d3 | |
|
618 | $ cd s | |
|
619 | $ git checkout -q testing | |
|
620 | $ mkdir .hg | |
|
621 | $ echo '.hg/hgrc in git repo' > .hg/hgrc | |
|
622 | $ mkdir -p sub/.hg | |
|
623 | $ echo 'sub/.hg/hgrc in git repo' > sub/.hg/hgrc | |
|
624 | $ git add .hg sub | |
|
625 | $ git commit -qm 'add .hg/hgrc to be sanitized at hg update (git merge --ff)' | |
|
626 | $ git push -q origin testing | |
|
627 | $ cd .. | |
|
628 | $ grep ' s$' .hgsubstate | |
|
629 | 32a343883b74769118bb1d3b4b1fbf9156f4dddc s | |
|
630 | $ hg commit -qm 'commit with git revision including .hg/hgrc' | |
|
631 | $ hg parents -q | |
|
632 | 9:ed23f7fe024e | |
|
633 | $ grep ' s$' .hgsubstate | |
|
634 | f262643c1077219fbd3858d54e78ef050ef84fbf s | |
|
635 | $ cd .. | |
|
636 | ||
|
637 | $ cd tc | |
|
638 | $ hg update -q -C af6d2edbb0d3 | |
|
639 | $ cat s/.hg/hgrc | |
|
640 | cat: s/.hg/hgrc: No such file or directory | |
|
641 | [1] | |
|
642 | $ cat s/sub/.hg/hgrc | |
|
643 | cat: s/sub/.hg/hgrc: No such file or directory | |
|
644 | [1] | |
|
645 | $ cd .. | |
|
646 | $ hg -R tc pull -q | |
|
647 | $ hg -R tc update -q -C ed23f7fe024e 2>&1 | sort | |
|
648 | warning: removing potentially hostile 'hgrc' in '$TESTTMP/tc/s/.hg' (glob) | |
|
649 | warning: removing potentially hostile 'hgrc' in '$TESTTMP/tc/s/sub/.hg' (glob) | |
|
650 | $ cd tc | |
|
651 | $ hg parents -q | |
|
652 | 9:ed23f7fe024e | |
|
653 | $ grep ' s$' .hgsubstate | |
|
654 | f262643c1077219fbd3858d54e78ef050ef84fbf s | |
|
655 | $ cat s/.hg/hgrc | |
|
656 | cat: s/.hg/hgrc: No such file or directory | |
|
657 | [1] | |
|
658 | $ cat s/sub/.hg/hgrc | |
|
659 | cat: s/sub/.hg/hgrc: No such file or directory | |
|
660 | [1] | |
|
661 | ||
|
662 | Test that sanitizing is omitted in meta data area: | |
|
663 | ||
|
664 | $ mkdir s/.git/.hg | |
|
665 | $ echo '.hg/hgrc in git metadata area' > s/.git/.hg/hgrc | |
|
666 | $ hg update -q -C af6d2edbb0d3 | |
|
667 | checking out detached HEAD in subrepo s | |
|
668 | check out a git branch if you intend to make changes | |
|
669 | ||
|
670 | $ cd .. |
@@ -635,3 +635,54 b' well.' | |||
|
635 | 635 | Checked out revision 15. |
|
636 | 636 | 2 files updated, 0 files merged, 0 files removed, 0 files unresolved |
|
637 | 637 | $ cd .. |
|
638 | ||
|
639 | Test sanitizing ".hg/hgrc" in subrepo | |
|
640 | ||
|
641 | $ cd sub/t | |
|
642 | $ hg update -q -C tip | |
|
643 | $ cd s | |
|
644 | $ mkdir .hg | |
|
645 | $ echo '.hg/hgrc in svn repo' > .hg/hgrc | |
|
646 | $ mkdir -p sub/.hg | |
|
647 | $ echo 'sub/.hg/hgrc in svn repo' > sub/.hg/hgrc | |
|
648 | $ svn add .hg sub | |
|
649 | A .hg | |
|
650 | A .hg/hgrc (glob) | |
|
651 | A sub | |
|
652 | A sub/.hg (glob) | |
|
653 | A sub/.hg/hgrc (glob) | |
|
654 | $ svn ci -m 'add .hg/hgrc to be sanitized at hg update' | |
|
655 | Adding .hg | |
|
656 | Adding .hg/hgrc (glob) | |
|
657 | Adding sub | |
|
658 | Adding sub/.hg (glob) | |
|
659 | Adding sub/.hg/hgrc (glob) | |
|
660 | Transmitting file data .. | |
|
661 | Committed revision 16. | |
|
662 | $ svn up -q | |
|
663 | $ cd .. | |
|
664 | $ hg commit -S -m 'commit with svn revision including .hg/hgrc' | |
|
665 | $ grep ' s$' .hgsubstate | |
|
666 | 16 s | |
|
667 | $ cd .. | |
|
668 | ||
|
669 | $ hg -R tc pull -u -q 2>&1 | sort | |
|
670 | warning: removing potentially hostile 'hgrc' in '$TESTTMP/sub/tc/s/.hg' (glob) | |
|
671 | warning: removing potentially hostile 'hgrc' in '$TESTTMP/sub/tc/s/sub/.hg' (glob) | |
|
672 | $ cd tc | |
|
673 | $ grep ' s$' .hgsubstate | |
|
674 | 16 s | |
|
675 | $ cat s/.hg/hgrc | |
|
676 | cat: s/.hg/hgrc: No such file or directory | |
|
677 | [1] | |
|
678 | $ cat s/sub/.hg/hgrc | |
|
679 | cat: s/sub/.hg/hgrc: No such file or directory | |
|
680 | [1] | |
|
681 | ||
|
682 | Test that sanitizing is omitted in meta data area: | |
|
683 | ||
|
684 | $ mkdir s/.svn/.hg | |
|
685 | $ echo '.hg/hgrc in svn metadata area' > s/.svn/.hg/hgrc | |
|
686 | $ hg update -q -C '.^1' | |
|
687 | ||
|
688 | $ cd ../.. |
General Comments 0
You need to be logged in to leave comments.
Login now