##// END OF EJS Templates
merge with stable
Matt Mackall -
r21585:652e07de merge default
parent child Browse files
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 return
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 [1]
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 [1]
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 [1]
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 [1]
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 [1]
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 [1]
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 [1]
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 [1]
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 [1]
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 tags
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 MIDDLE_ 3:b06c5b6def9e
134 \xe7\x9f\xad\xe5\x90\x8d 2:64a70663cee8 (esc)
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