27 fancyopts, |
27 fancyopts, |
28 pycompat, |
28 pycompat, |
29 registrar, |
29 registrar, |
30 scmutil, |
30 scmutil, |
31 ) |
31 ) |
32 from mercurial.utils import ( |
32 from mercurial.utils import procutil |
33 procutil, |
|
34 ) |
|
35 |
33 |
36 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
34 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
37 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
35 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
38 # be specifying the version(s) of Mercurial they are tested with, or |
36 # be specifying the version(s) of Mercurial they are tested with, or |
39 # leave the attribute unspecified. |
37 # leave the attribute unspecified. |
40 testedwith = 'ships-with-hg-core' |
38 testedwith = 'ships-with-hg-core' |
41 |
39 |
42 cmdtable = {} |
40 cmdtable = {} |
43 command = registrar.command(cmdtable) |
41 command = registrar.command(cmdtable) |
|
42 |
44 |
43 |
45 def convert(s): |
44 def convert(s): |
46 if s.startswith("origin/"): |
45 if s.startswith("origin/"): |
47 return s[7:] |
46 return s[7:] |
48 if 'HEAD' in s: |
47 if 'HEAD' in s: |
49 s = s.replace('HEAD', '.') |
48 s = s.replace('HEAD', '.') |
50 # HEAD~ in git is .~1 in mercurial |
49 # HEAD~ in git is .~1 in mercurial |
51 s = re.sub('~$', '~1', s) |
50 s = re.sub('~$', '~1', s) |
52 return s |
51 return s |
53 |
52 |
54 @command('githelp|git', [ |
53 |
55 ], _('hg githelp'), |
54 @command( |
56 helpcategory=command.CATEGORY_HELP, helpbasic=True) |
55 'githelp|git', |
|
56 [], |
|
57 _('hg githelp'), |
|
58 helpcategory=command.CATEGORY_HELP, |
|
59 helpbasic=True, |
|
60 ) |
57 def githelp(ui, repo, *args, **kwargs): |
61 def githelp(ui, repo, *args, **kwargs): |
58 '''suggests the Mercurial equivalent of the given git command |
62 '''suggests the Mercurial equivalent of the given git command |
59 |
63 |
60 Usage: hg githelp -- <git command> |
64 Usage: hg githelp -- <git command> |
61 ''' |
65 ''' |
62 |
66 |
63 if len(args) == 0 or (len(args) == 1 and args[0] =='git'): |
67 if len(args) == 0 or (len(args) == 1 and args[0] == 'git'): |
64 raise error.Abort(_('missing git command - ' |
68 raise error.Abort( |
65 'usage: hg githelp -- <git command>')) |
69 _('missing git command - ' 'usage: hg githelp -- <git command>') |
|
70 ) |
66 |
71 |
67 if args[0] == 'git': |
72 if args[0] == 'git': |
68 args = args[1:] |
73 args = args[1:] |
69 |
74 |
70 cmd = args[0] |
75 cmd = args[0] |
71 if not cmd in gitcommands: |
76 if not cmd in gitcommands: |
72 raise error.Abort(_("error: unknown git command %s") % (cmd)) |
77 raise error.Abort(_("error: unknown git command %s") % cmd) |
73 |
78 |
74 ui.pager('githelp') |
79 ui.pager('githelp') |
75 args = args[1:] |
80 args = args[1:] |
76 return gitcommands[cmd](ui, repo, *args, **kwargs) |
81 return gitcommands[cmd](ui, repo, *args, **kwargs) |
|
82 |
77 |
83 |
78 def parseoptions(ui, cmdoptions, args): |
84 def parseoptions(ui, cmdoptions, args): |
79 cmdoptions = list(cmdoptions) |
85 cmdoptions = list(cmdoptions) |
80 opts = {} |
86 opts = {} |
81 args = list(args) |
87 args = list(args) |
89 if (r'--' + ex.opt) in ex.msg: |
95 if (r'--' + ex.opt) in ex.msg: |
90 flag = '--' + pycompat.bytestr(ex.opt) |
96 flag = '--' + pycompat.bytestr(ex.opt) |
91 elif (r'-' + ex.opt) in ex.msg: |
97 elif (r'-' + ex.opt) in ex.msg: |
92 flag = '-' + pycompat.bytestr(ex.opt) |
98 flag = '-' + pycompat.bytestr(ex.opt) |
93 else: |
99 else: |
94 raise error.Abort(_("unknown option %s") % |
100 raise error.Abort( |
95 pycompat.bytestr(ex.opt)) |
101 _("unknown option %s") % pycompat.bytestr(ex.opt) |
|
102 ) |
96 try: |
103 try: |
97 args.remove(flag) |
104 args.remove(flag) |
98 except Exception: |
105 except Exception: |
99 msg = _("unknown option '%s' packed with other options") |
106 msg = _("unknown option '%s' packed with other options") |
100 hint = _("please try passing the option as its own flag: -%s") |
107 hint = _("please try passing the option as its own flag: -%s") |
101 raise error.Abort(msg % pycompat.bytestr(ex.opt), |
108 raise error.Abort( |
102 hint=hint % pycompat.bytestr(ex.opt)) |
109 msg % pycompat.bytestr(ex.opt), |
|
110 hint=hint % pycompat.bytestr(ex.opt), |
|
111 ) |
103 |
112 |
104 ui.warn(_("ignoring unknown option %s\n") % flag) |
113 ui.warn(_("ignoring unknown option %s\n") % flag) |
105 |
114 |
106 args = list([convert(x) for x in args]) |
115 args = list([convert(x) for x in args]) |
107 opts = dict([(k, convert(v)) if isinstance(v, str) else (k, v) |
116 opts = dict( |
108 for k, v in opts.iteritems()]) |
117 [ |
|
118 (k, convert(v)) if isinstance(v, str) else (k, v) |
|
119 for k, v in opts.iteritems() |
|
120 ] |
|
121 ) |
109 |
122 |
110 return args, opts |
123 return args, opts |
|
124 |
111 |
125 |
112 class Command(object): |
126 class Command(object): |
113 def __init__(self, name): |
127 def __init__(self, name): |
114 self.name = name |
128 self.name = name |
115 self.args = [] |
129 self.args = [] |
158 return "%s && %s" % (self.left, self.right) |
173 return "%s && %s" % (self.left, self.right) |
159 |
174 |
160 def __and__(self, other): |
175 def __and__(self, other): |
161 return AndCommand(self, other) |
176 return AndCommand(self, other) |
162 |
177 |
|
178 |
163 def add(ui, repo, *args, **kwargs): |
179 def add(ui, repo, *args, **kwargs): |
164 cmdoptions = [ |
180 cmdoptions = [ |
165 ('A', 'all', None, ''), |
181 ('A', 'all', None, ''), |
166 ('p', 'patch', None, ''), |
182 ('p', 'patch', None, ''), |
167 ] |
183 ] |
168 args, opts = parseoptions(ui, cmdoptions, args) |
184 args, opts = parseoptions(ui, cmdoptions, args) |
169 |
185 |
170 if (opts.get('patch')): |
186 if opts.get('patch'): |
171 ui.status(_("note: Mercurial will commit when complete, " |
187 ui.status( |
172 "as there is no staging area in Mercurial\n\n")) |
188 _( |
|
189 "note: Mercurial will commit when complete, " |
|
190 "as there is no staging area in Mercurial\n\n" |
|
191 ) |
|
192 ) |
173 cmd = Command('commit --interactive') |
193 cmd = Command('commit --interactive') |
174 else: |
194 else: |
175 cmd = Command("add") |
195 cmd = Command("add") |
176 |
196 |
177 if not opts.get('all'): |
197 if not opts.get('all'): |
178 cmd.extend(args) |
198 cmd.extend(args) |
179 else: |
199 else: |
180 ui.status(_("note: use hg addremove to remove files that have " |
200 ui.status( |
181 "been deleted\n\n")) |
201 _( |
182 |
202 "note: use hg addremove to remove files that have " |
183 ui.status((bytes(cmd)), "\n") |
203 "been deleted\n\n" |
|
204 ) |
|
205 ) |
|
206 |
|
207 ui.status((bytes(cmd)), "\n") |
|
208 |
184 |
209 |
185 def am(ui, repo, *args, **kwargs): |
210 def am(ui, repo, *args, **kwargs): |
186 cmdoptions=[ |
211 cmdoptions = [] |
187 ] |
|
188 args, opts = parseoptions(ui, cmdoptions, args) |
212 args, opts = parseoptions(ui, cmdoptions, args) |
189 cmd = Command('import') |
213 cmd = Command('import') |
190 ui.status(bytes(cmd), "\n") |
214 ui.status(bytes(cmd), "\n") |
191 |
215 |
|
216 |
192 def apply(ui, repo, *args, **kwargs): |
217 def apply(ui, repo, *args, **kwargs): |
193 cmdoptions = [ |
218 cmdoptions = [ |
194 ('p', 'p', int, ''), |
219 ('p', 'p', int, ''), |
195 ('', 'directory', '', ''), |
220 ('', 'directory', '', ''), |
196 ] |
221 ] |
197 args, opts = parseoptions(ui, cmdoptions, args) |
222 args, opts = parseoptions(ui, cmdoptions, args) |
198 |
223 |
199 cmd = Command('import --no-commit') |
224 cmd = Command('import --no-commit') |
200 if (opts.get('p')): |
225 if opts.get('p'): |
201 cmd['-p'] = opts.get('p') |
226 cmd['-p'] = opts.get('p') |
202 if opts.get('directory'): |
227 if opts.get('directory'): |
203 cmd['--prefix'] = opts.get('directory') |
228 cmd['--prefix'] = opts.get('directory') |
204 cmd.extend(args) |
229 cmd.extend(args) |
205 |
230 |
206 ui.status((bytes(cmd)), "\n") |
231 ui.status((bytes(cmd)), "\n") |
207 |
232 |
|
233 |
208 def bisect(ui, repo, *args, **kwargs): |
234 def bisect(ui, repo, *args, **kwargs): |
209 ui.status(_("see 'hg help bisect' for how to use bisect\n\n")) |
235 ui.status(_("see 'hg help bisect' for how to use bisect\n\n")) |
210 |
236 |
|
237 |
211 def blame(ui, repo, *args, **kwargs): |
238 def blame(ui, repo, *args, **kwargs): |
212 cmdoptions = [ |
239 cmdoptions = [] |
213 ] |
|
214 args, opts = parseoptions(ui, cmdoptions, args) |
240 args, opts = parseoptions(ui, cmdoptions, args) |
215 cmd = Command('annotate -udl') |
241 cmd = Command('annotate -udl') |
216 cmd.extend([convert(v) for v in args]) |
242 cmd.extend([convert(v) for v in args]) |
217 ui.status((bytes(cmd)), "\n") |
243 ui.status((bytes(cmd)), "\n") |
|
244 |
218 |
245 |
219 def branch(ui, repo, *args, **kwargs): |
246 def branch(ui, repo, *args, **kwargs): |
220 cmdoptions = [ |
247 cmdoptions = [ |
221 ('', 'set-upstream', None, ''), |
248 ('', 'set-upstream', None, ''), |
222 ('', 'set-upstream-to', '', ''), |
249 ('', 'set-upstream-to', '', ''), |
285 |
313 |
286 didexist = (repopath in manifest) or manifest.hasdir(repopath) |
314 didexist = (repopath in manifest) or manifest.hasdir(repopath) |
287 |
315 |
288 return didexist |
316 return didexist |
289 |
317 |
|
318 |
290 def checkout(ui, repo, *args, **kwargs): |
319 def checkout(ui, repo, *args, **kwargs): |
291 cmdoptions = [ |
320 cmdoptions = [ |
292 ('b', 'branch', '', ''), |
321 ('b', 'branch', '', ''), |
293 ('B', 'branch', '', ''), |
322 ('B', 'branch', '', ''), |
294 ('f', 'force', None, ''), |
323 ('f', 'force', None, ''), |
295 ('p', 'patch', None, ''), |
324 ('p', 'patch', None, ''), |
296 ] |
325 ] |
297 paths = [] |
326 paths = [] |
298 if '--' in args: |
327 if '--' in args: |
299 sepindex = args.index('--') |
328 sepindex = args.index('--') |
300 paths.extend(args[sepindex + 1:]) |
329 paths.extend(args[sepindex + 1 :]) |
301 args = args[:sepindex] |
330 args = args[:sepindex] |
302 |
331 |
303 args, opts = parseoptions(ui, cmdoptions, args) |
332 args, opts = parseoptions(ui, cmdoptions, args) |
304 |
333 |
305 rev = None |
334 rev = None |
348 else: |
377 else: |
349 raise error.Abort(_("a commit must be specified")) |
378 raise error.Abort(_("a commit must be specified")) |
350 |
379 |
351 ui.status((bytes(cmd)), "\n") |
380 ui.status((bytes(cmd)), "\n") |
352 |
381 |
|
382 |
353 def cherrypick(ui, repo, *args, **kwargs): |
383 def cherrypick(ui, repo, *args, **kwargs): |
354 cmdoptions = [ |
384 cmdoptions = [ |
355 ('', 'continue', None, ''), |
385 ('', 'continue', None, ''), |
356 ('', 'abort', None, ''), |
386 ('', 'abort', None, ''), |
357 ('e', 'edit', None, ''), |
387 ('e', 'edit', None, ''), |
403 if len(args) > 1: |
435 if len(args) > 1: |
404 cmd.append(args[1]) |
436 cmd.append(args[1]) |
405 |
437 |
406 if opts.get('bare'): |
438 if opts.get('bare'): |
407 cmd['-U'] = None |
439 cmd['-U'] = None |
408 ui.status(_("note: Mercurial does not have bare clones. " |
440 ui.status( |
409 "-U will clone the repo without checking out a commit\n\n")) |
441 _( |
|
442 "note: Mercurial does not have bare clones. " |
|
443 "-U will clone the repo without checking out a commit\n\n" |
|
444 ) |
|
445 ) |
410 elif opts.get('no_checkout'): |
446 elif opts.get('no_checkout'): |
411 cmd['-U'] = None |
447 cmd['-U'] = None |
412 |
448 |
413 if opts.get('branch'): |
449 if opts.get('branch'): |
414 cocmd = Command("update") |
450 cocmd = Command("update") |
415 cocmd.append(opts.get('branch')) |
451 cocmd.append(opts.get('branch')) |
416 cmd = cmd & cocmd |
452 cmd = cmd & cocmd |
417 |
453 |
418 ui.status((bytes(cmd)), "\n") |
454 ui.status((bytes(cmd)), "\n") |
|
455 |
419 |
456 |
420 def commit(ui, repo, *args, **kwargs): |
457 def commit(ui, repo, *args, **kwargs): |
421 cmdoptions = [ |
458 cmdoptions = [ |
422 ('a', 'all', None, ''), |
459 ('a', 'all', None, ''), |
423 ('m', 'message', '', ''), |
460 ('m', 'message', '', ''), |
463 |
504 |
464 cmd.extend(args) |
505 cmd.extend(args) |
465 |
506 |
466 ui.status((bytes(cmd)), "\n") |
507 ui.status((bytes(cmd)), "\n") |
467 |
508 |
|
509 |
468 def deprecated(ui, repo, *args, **kwargs): |
510 def deprecated(ui, repo, *args, **kwargs): |
469 ui.warn(_('this command has been deprecated in the git project, ' |
511 ui.warn( |
470 'thus isn\'t supported by this tool\n\n')) |
512 _( |
|
513 'this command has been deprecated in the git project, ' |
|
514 'thus isn\'t supported by this tool\n\n' |
|
515 ) |
|
516 ) |
|
517 |
471 |
518 |
472 def diff(ui, repo, *args, **kwargs): |
519 def diff(ui, repo, *args, **kwargs): |
473 cmdoptions = [ |
520 cmdoptions = [ |
474 ('a', 'all', None, ''), |
521 ('a', 'all', None, ''), |
475 ('', 'cached', None, ''), |
522 ('', 'cached', None, ''), |
494 except Exception: |
545 except Exception: |
495 cmd.append(a) |
546 cmd.append(a) |
496 |
547 |
497 ui.status((bytes(cmd)), "\n") |
548 ui.status((bytes(cmd)), "\n") |
498 |
549 |
|
550 |
499 def difftool(ui, repo, *args, **kwargs): |
551 def difftool(ui, repo, *args, **kwargs): |
500 ui.status(_('Mercurial does not enable external difftool by default. You ' |
552 ui.status( |
501 'need to enable the extdiff extension in your .hgrc file by adding\n' |
553 _( |
502 'extdiff =\n' |
554 'Mercurial does not enable external difftool by default. You ' |
503 'to the [extensions] section and then running\n\n' |
555 'need to enable the extdiff extension in your .hgrc file by adding\n' |
504 'hg extdiff -p <program>\n\n' |
556 'extdiff =\n' |
505 'See \'hg help extdiff\' and \'hg help -e extdiff\' for more ' |
557 'to the [extensions] section and then running\n\n' |
506 'information.\n')) |
558 'hg extdiff -p <program>\n\n' |
|
559 'See \'hg help extdiff\' and \'hg help -e extdiff\' for more ' |
|
560 'information.\n' |
|
561 ) |
|
562 ) |
|
563 |
507 |
564 |
508 def fetch(ui, repo, *args, **kwargs): |
565 def fetch(ui, repo, *args, **kwargs): |
509 cmdoptions = [ |
566 cmdoptions = [ |
510 ('', 'all', None, ''), |
567 ('', 'all', None, ''), |
511 ('f', 'force', None, ''), |
568 ('f', 'force', None, ''), |
515 cmd = Command('pull') |
572 cmd = Command('pull') |
516 |
573 |
517 if len(args) > 0: |
574 if len(args) > 0: |
518 cmd.append(args[0]) |
575 cmd.append(args[0]) |
519 if len(args) > 1: |
576 if len(args) > 1: |
520 ui.status(_("note: Mercurial doesn't have refspecs. " |
577 ui.status( |
521 "-r can be used to specify which commits you want to " |
578 _( |
522 "pull. -B can be used to specify which bookmark you " |
579 "note: Mercurial doesn't have refspecs. " |
523 "want to pull.\n\n")) |
580 "-r can be used to specify which commits you want to " |
|
581 "pull. -B can be used to specify which bookmark you " |
|
582 "want to pull.\n\n" |
|
583 ) |
|
584 ) |
524 for v in args[1:]: |
585 for v in args[1:]: |
525 if v in repo._bookmarks: |
586 if v in repo._bookmarks: |
526 cmd['-B'] = v |
587 cmd['-B'] = v |
527 else: |
588 else: |
528 cmd['-r'] = v |
589 cmd['-r'] = v |
529 |
590 |
530 ui.status((bytes(cmd)), "\n") |
591 ui.status((bytes(cmd)), "\n") |
531 |
592 |
|
593 |
532 def grep(ui, repo, *args, **kwargs): |
594 def grep(ui, repo, *args, **kwargs): |
533 cmdoptions = [ |
595 cmdoptions = [] |
534 ] |
|
535 args, opts = parseoptions(ui, cmdoptions, args) |
596 args, opts = parseoptions(ui, cmdoptions, args) |
536 |
597 |
537 cmd = Command('grep') |
598 cmd = Command('grep') |
538 |
599 |
539 # For basic usage, git grep and hg grep are the same. They both have the |
600 # For basic usage, git grep and hg grep are the same. They both have the |
540 # pattern first, followed by paths. |
601 # pattern first, followed by paths. |
541 cmd.extend(args) |
602 cmd.extend(args) |
542 |
603 |
543 ui.status((bytes(cmd)), "\n") |
604 ui.status((bytes(cmd)), "\n") |
544 |
605 |
|
606 |
545 def init(ui, repo, *args, **kwargs): |
607 def init(ui, repo, *args, **kwargs): |
546 cmdoptions = [ |
608 cmdoptions = [] |
547 ] |
|
548 args, opts = parseoptions(ui, cmdoptions, args) |
609 args, opts = parseoptions(ui, cmdoptions, args) |
549 |
610 |
550 cmd = Command('init') |
611 cmd = Command('init') |
551 |
612 |
552 if len(args) > 0: |
613 if len(args) > 0: |
553 cmd.append(args[0]) |
614 cmd.append(args[0]) |
554 |
615 |
555 ui.status((bytes(cmd)), "\n") |
616 ui.status((bytes(cmd)), "\n") |
|
617 |
556 |
618 |
557 def log(ui, repo, *args, **kwargs): |
619 def log(ui, repo, *args, **kwargs): |
558 cmdoptions = [ |
620 cmdoptions = [ |
559 ('', 'follow', None, ''), |
621 ('', 'follow', None, ''), |
560 ('', 'decorate', None, ''), |
622 ('', 'decorate', None, ''), |
566 ('', 'stat', None, ''), |
628 ('', 'stat', None, ''), |
567 ('', 'graph', None, ''), |
629 ('', 'graph', None, ''), |
568 ('p', 'patch', None, ''), |
630 ('p', 'patch', None, ''), |
569 ] |
631 ] |
570 args, opts = parseoptions(ui, cmdoptions, args) |
632 args, opts = parseoptions(ui, cmdoptions, args) |
571 ui.status(_('note: -v prints the entire commit message like Git does. To ' |
633 ui.status( |
572 'print just the first line, drop the -v.\n\n')) |
634 _( |
573 ui.status(_("note: see hg help revset for information on how to filter " |
635 'note: -v prints the entire commit message like Git does. To ' |
574 "log output\n\n")) |
636 'print just the first line, drop the -v.\n\n' |
|
637 ) |
|
638 ) |
|
639 ui.status( |
|
640 _( |
|
641 "note: see hg help revset for information on how to filter " |
|
642 "log output\n\n" |
|
643 ) |
|
644 ) |
575 |
645 |
576 cmd = Command('log') |
646 cmd = Command('log') |
577 cmd['-v'] = None |
647 cmd['-v'] = None |
578 |
648 |
579 if opts.get('number'): |
649 if opts.get('number'): |
588 cmd['-p'] = None |
658 cmd['-p'] = None |
589 |
659 |
590 if opts.get('pretty') or opts.get('format') or opts.get('oneline'): |
660 if opts.get('pretty') or opts.get('format') or opts.get('oneline'): |
591 format = opts.get('format', '') |
661 format = opts.get('format', '') |
592 if 'format:' in format: |
662 if 'format:' in format: |
593 ui.status(_("note: --format format:??? equates to Mercurial's " |
663 ui.status( |
594 "--template. See hg help templates for more info.\n\n")) |
664 _( |
|
665 "note: --format format:??? equates to Mercurial's " |
|
666 "--template. See hg help templates for more info.\n\n" |
|
667 ) |
|
668 ) |
595 cmd['--template'] = '???' |
669 cmd['--template'] = '???' |
596 else: |
670 else: |
597 ui.status(_("note: --pretty/format/oneline equate to Mercurial's " |
671 ui.status( |
598 "--style or --template. See hg help templates for " |
672 _( |
599 "more info.\n\n")) |
673 "note: --pretty/format/oneline equate to Mercurial's " |
|
674 "--style or --template. See hg help templates for " |
|
675 "more info.\n\n" |
|
676 ) |
|
677 ) |
600 cmd['--style'] = '???' |
678 cmd['--style'] = '???' |
601 |
679 |
602 if len(args) > 0: |
680 if len(args) > 0: |
603 if '..' in args[0]: |
681 if '..' in args[0]: |
604 since, until = args[0].split('..') |
682 since, until = args[0].split('..') |
605 cmd['-r'] = "'%s::%s'" % (since, until) |
683 cmd['-r'] = "'%s::%s'" % (since, until) |
606 del args[0] |
684 del args[0] |
607 cmd.extend(args) |
685 cmd.extend(args) |
608 |
686 |
609 ui.status((bytes(cmd)), "\n") |
687 ui.status((bytes(cmd)), "\n") |
|
688 |
610 |
689 |
611 def lsfiles(ui, repo, *args, **kwargs): |
690 def lsfiles(ui, repo, *args, **kwargs): |
612 cmdoptions = [ |
691 cmdoptions = [ |
613 ('c', 'cached', None, ''), |
692 ('c', 'cached', None, ''), |
614 ('d', 'deleted', None, ''), |
693 ('d', 'deleted', None, ''), |
618 ('s', 'stage', None, ''), |
697 ('s', 'stage', None, ''), |
619 ('z', '_zero', None, ''), |
698 ('z', '_zero', None, ''), |
620 ] |
699 ] |
621 args, opts = parseoptions(ui, cmdoptions, args) |
700 args, opts = parseoptions(ui, cmdoptions, args) |
622 |
701 |
623 if (opts.get('modified') or opts.get('deleted') |
702 if ( |
624 or opts.get('others') or opts.get('ignored')): |
703 opts.get('modified') |
|
704 or opts.get('deleted') |
|
705 or opts.get('others') |
|
706 or opts.get('ignored') |
|
707 ): |
625 cmd = Command('status') |
708 cmd = Command('status') |
626 if opts.get('deleted'): |
709 if opts.get('deleted'): |
627 cmd['-d'] = None |
710 cmd['-d'] = None |
628 if opts.get('modified'): |
711 if opts.get('modified'): |
629 cmd['-m'] = None |
712 cmd['-m'] = None |
632 if opts.get('ignored'): |
715 if opts.get('ignored'): |
633 cmd['-i'] = None |
716 cmd['-i'] = None |
634 else: |
717 else: |
635 cmd = Command('files') |
718 cmd = Command('files') |
636 if opts.get('stage'): |
719 if opts.get('stage'): |
637 ui.status(_("note: Mercurial doesn't have a staging area, ignoring " |
720 ui.status( |
638 "--stage\n")) |
721 _( |
|
722 "note: Mercurial doesn't have a staging area, ignoring " |
|
723 "--stage\n" |
|
724 ) |
|
725 ) |
639 if opts.get('_zero'): |
726 if opts.get('_zero'): |
640 cmd['-0'] = None |
727 cmd['-0'] = None |
641 cmd.append('.') |
728 cmd.append('.') |
642 for include in args: |
729 for include in args: |
643 cmd['-I'] = procutil.shellquote(include) |
730 cmd['-I'] = procutil.shellquote(include) |
644 |
731 |
645 ui.status((bytes(cmd)), "\n") |
732 ui.status((bytes(cmd)), "\n") |
646 |
733 |
|
734 |
647 def merge(ui, repo, *args, **kwargs): |
735 def merge(ui, repo, *args, **kwargs): |
648 cmdoptions = [ |
736 cmdoptions = [] |
649 ] |
|
650 args, opts = parseoptions(ui, cmdoptions, args) |
737 args, opts = parseoptions(ui, cmdoptions, args) |
651 |
738 |
652 cmd = Command('merge') |
739 cmd = Command('merge') |
653 |
740 |
654 if len(args) > 0: |
741 if len(args) > 0: |
655 cmd.append(args[len(args) - 1]) |
742 cmd.append(args[len(args) - 1]) |
656 |
743 |
657 ui.status((bytes(cmd)), "\n") |
744 ui.status((bytes(cmd)), "\n") |
658 |
745 |
|
746 |
659 def mergebase(ui, repo, *args, **kwargs): |
747 def mergebase(ui, repo, *args, **kwargs): |
660 cmdoptions = [] |
748 cmdoptions = [] |
661 args, opts = parseoptions(ui, cmdoptions, args) |
749 args, opts = parseoptions(ui, cmdoptions, args) |
662 |
750 |
663 if len(args) != 2: |
751 if len(args) != 2: |
664 args = ['A', 'B'] |
752 args = ['A', 'B'] |
665 |
753 |
666 cmd = Command("log -T '{node}\\n' -r 'ancestor(%s,%s)'" |
754 cmd = Command( |
667 % (args[0], args[1])) |
755 "log -T '{node}\\n' -r 'ancestor(%s,%s)'" % (args[0], args[1]) |
668 |
756 ) |
669 ui.status(_('note: ancestors() is part of the revset language\n'), |
757 |
670 _("(learn more about revsets with 'hg help revsets')\n\n")) |
758 ui.status( |
671 ui.status((bytes(cmd)), "\n") |
759 _('note: ancestors() is part of the revset language\n'), |
|
760 _("(learn more about revsets with 'hg help revsets')\n\n"), |
|
761 ) |
|
762 ui.status((bytes(cmd)), "\n") |
|
763 |
672 |
764 |
673 def mergetool(ui, repo, *args, **kwargs): |
765 def mergetool(ui, repo, *args, **kwargs): |
674 cmdoptions = [] |
766 cmdoptions = [] |
675 args, opts = parseoptions(ui, cmdoptions, args) |
767 args, opts = parseoptions(ui, cmdoptions, args) |
676 |
768 |
696 if opts.get('dry_run'): |
789 if opts.get('dry_run'): |
697 cmd['-n'] = None |
790 cmd['-n'] = None |
698 |
791 |
699 ui.status((bytes(cmd)), "\n") |
792 ui.status((bytes(cmd)), "\n") |
700 |
793 |
|
794 |
701 def pull(ui, repo, *args, **kwargs): |
795 def pull(ui, repo, *args, **kwargs): |
702 cmdoptions = [ |
796 cmdoptions = [ |
703 ('', 'all', None, ''), |
797 ('', 'all', None, ''), |
704 ('f', 'force', None, ''), |
798 ('f', 'force', None, ''), |
705 ('r', 'rebase', None, ''), |
799 ('r', 'rebase', None, ''), |
710 cmd['--rebase'] = None |
804 cmd['--rebase'] = None |
711 |
805 |
712 if len(args) > 0: |
806 if len(args) > 0: |
713 cmd.append(args[0]) |
807 cmd.append(args[0]) |
714 if len(args) > 1: |
808 if len(args) > 1: |
715 ui.status(_("note: Mercurial doesn't have refspecs. " |
809 ui.status( |
716 "-r can be used to specify which commits you want to " |
810 _( |
717 "pull. -B can be used to specify which bookmark you " |
811 "note: Mercurial doesn't have refspecs. " |
718 "want to pull.\n\n")) |
812 "-r can be used to specify which commits you want to " |
|
813 "pull. -B can be used to specify which bookmark you " |
|
814 "want to pull.\n\n" |
|
815 ) |
|
816 ) |
719 for v in args[1:]: |
817 for v in args[1:]: |
720 if v in repo._bookmarks: |
818 if v in repo._bookmarks: |
721 cmd['-B'] = v |
819 cmd['-B'] = v |
722 else: |
820 else: |
723 cmd['-r'] = v |
821 cmd['-r'] = v |
724 |
822 |
725 ui.status((bytes(cmd)), "\n") |
823 ui.status((bytes(cmd)), "\n") |
726 |
824 |
|
825 |
727 def push(ui, repo, *args, **kwargs): |
826 def push(ui, repo, *args, **kwargs): |
728 cmdoptions = [ |
827 cmdoptions = [ |
729 ('', 'all', None, ''), |
828 ('', 'all', None, ''), |
730 ('f', 'force', None, ''), |
829 ('f', 'force', None, ''), |
731 ] |
830 ] |
734 cmd = Command('push') |
833 cmd = Command('push') |
735 |
834 |
736 if len(args) > 0: |
835 if len(args) > 0: |
737 cmd.append(args[0]) |
836 cmd.append(args[0]) |
738 if len(args) > 1: |
837 if len(args) > 1: |
739 ui.status(_("note: Mercurial doesn't have refspecs. " |
838 ui.status( |
740 "-r can be used to specify which commits you want " |
839 _( |
741 "to push. -B can be used to specify which bookmark " |
840 "note: Mercurial doesn't have refspecs. " |
742 "you want to push.\n\n")) |
841 "-r can be used to specify which commits you want " |
|
842 "to push. -B can be used to specify which bookmark " |
|
843 "you want to push.\n\n" |
|
844 ) |
|
845 ) |
743 for v in args[1:]: |
846 for v in args[1:]: |
744 if v in repo._bookmarks: |
847 if v in repo._bookmarks: |
745 cmd['-B'] = v |
848 cmd['-B'] = v |
746 else: |
849 else: |
747 cmd['-r'] = v |
850 cmd['-r'] = v |
748 |
851 |
749 if opts.get('force'): |
852 if opts.get('force'): |
750 cmd['-f'] = None |
853 cmd['-f'] = None |
751 |
854 |
752 ui.status((bytes(cmd)), "\n") |
855 ui.status((bytes(cmd)), "\n") |
|
856 |
753 |
857 |
754 def rebase(ui, repo, *args, **kwargs): |
858 def rebase(ui, repo, *args, **kwargs): |
755 cmdoptions = [ |
859 cmdoptions = [ |
756 ('', 'all', None, ''), |
860 ('', 'all', None, ''), |
757 ('i', 'interactive', None, ''), |
861 ('i', 'interactive', None, ''), |
761 ('', 'skip', None, ''), |
865 ('', 'skip', None, ''), |
762 ] |
866 ] |
763 args, opts = parseoptions(ui, cmdoptions, args) |
867 args, opts = parseoptions(ui, cmdoptions, args) |
764 |
868 |
765 if opts.get('interactive'): |
869 if opts.get('interactive'): |
766 ui.status(_("note: hg histedit does not perform a rebase. " |
870 ui.status( |
767 "It just edits history.\n\n")) |
871 _( |
|
872 "note: hg histedit does not perform a rebase. " |
|
873 "It just edits history.\n\n" |
|
874 ) |
|
875 ) |
768 cmd = Command('histedit') |
876 cmd = Command('histedit') |
769 if len(args) > 0: |
877 if len(args) > 0: |
770 ui.status(_("also note: 'hg histedit' will automatically detect" |
878 ui.status( |
771 " your stack, so no second argument is necessary\n\n")) |
879 _( |
|
880 "also note: 'hg histedit' will automatically detect" |
|
881 " your stack, so no second argument is necessary\n\n" |
|
882 ) |
|
883 ) |
772 ui.status((bytes(cmd)), "\n") |
884 ui.status((bytes(cmd)), "\n") |
773 return |
885 return |
774 |
886 |
775 if opts.get('skip'): |
887 if opts.get('skip'): |
776 cmd = Command('revert --all -r .') |
888 cmd = Command('revert --all -r .') |
826 |
948 |
827 commit = convert(args[0] if len(args) > 0 else '.') |
949 commit = convert(args[0] if len(args) > 0 else '.') |
828 hard = opts.get('hard') |
950 hard = opts.get('hard') |
829 |
951 |
830 if opts.get('mixed'): |
952 if opts.get('mixed'): |
831 ui.status(_('note: --mixed has no meaning since Mercurial has no ' |
953 ui.status( |
832 'staging area\n\n')) |
954 _( |
|
955 'note: --mixed has no meaning since Mercurial has no ' |
|
956 'staging area\n\n' |
|
957 ) |
|
958 ) |
833 if opts.get('soft'): |
959 if opts.get('soft'): |
834 ui.status(_('note: --soft has no meaning since Mercurial has no ' |
960 ui.status( |
835 'staging area\n\n')) |
961 _( |
|
962 'note: --soft has no meaning since Mercurial has no ' |
|
963 'staging area\n\n' |
|
964 ) |
|
965 ) |
836 |
966 |
837 cmd = Command('update') |
967 cmd = Command('update') |
838 if hard: |
968 if hard: |
839 cmd.append('--clean') |
969 cmd.append('--clean') |
840 |
970 |
841 cmd.append(commit) |
971 cmd.append(commit) |
842 |
972 |
843 ui.status((bytes(cmd)), "\n") |
973 ui.status((bytes(cmd)), "\n") |
844 |
974 |
|
975 |
845 def revert(ui, repo, *args, **kwargs): |
976 def revert(ui, repo, *args, **kwargs): |
846 cmdoptions = [ |
977 cmdoptions = [] |
847 ] |
|
848 args, opts = parseoptions(ui, cmdoptions, args) |
978 args, opts = parseoptions(ui, cmdoptions, args) |
849 |
979 |
850 if len(args) > 1: |
980 if len(args) > 1: |
851 ui.status(_("note: hg backout doesn't support multiple commits at " |
981 ui.status( |
852 "once\n\n")) |
982 _( |
|
983 "note: hg backout doesn't support multiple commits at " |
|
984 "once\n\n" |
|
985 ) |
|
986 ) |
853 |
987 |
854 cmd = Command('backout') |
988 cmd = Command('backout') |
855 if args: |
989 if args: |
856 cmd.append(args[0]) |
990 cmd.append(args[0]) |
857 |
991 |
858 ui.status((bytes(cmd)), "\n") |
992 ui.status((bytes(cmd)), "\n") |
|
993 |
859 |
994 |
860 def revparse(ui, repo, *args, **kwargs): |
995 def revparse(ui, repo, *args, **kwargs): |
861 cmdoptions = [ |
996 cmdoptions = [ |
862 ('', 'show-cdup', None, ''), |
997 ('', 'show-cdup', None, ''), |
863 ('', 'show-toplevel', None, ''), |
998 ('', 'show-toplevel', None, ''), |
954 if len(args) > 1: |
1092 if len(args) > 1: |
955 cmd.append(args[1]) |
1093 cmd.append(args[1]) |
956 if action == 'apply': |
1094 if action == 'apply': |
957 cmd['--keep'] = None |
1095 cmd['--keep'] = None |
958 elif action == 'branch' or action == 'create': |
1096 elif action == 'branch' or action == 'create': |
959 ui.status(_("note: Mercurial doesn't have equivalents to the " |
1097 ui.status( |
960 "git stash branch or create actions\n\n")) |
1098 _( |
|
1099 "note: Mercurial doesn't have equivalents to the " |
|
1100 "git stash branch or create actions\n\n" |
|
1101 ) |
|
1102 ) |
961 return |
1103 return |
962 else: |
1104 else: |
963 if len(args) > 0: |
1105 if len(args) > 0: |
964 if args[0] != 'save': |
1106 if args[0] != 'save': |
965 cmd['--name'] = args[0] |
1107 cmd['--name'] = args[0] |
966 elif len(args) > 1: |
1108 elif len(args) > 1: |
967 cmd['--name'] = args[1] |
1109 cmd['--name'] = args[1] |
968 |
1110 |
969 ui.status((bytes(cmd)), "\n") |
1111 ui.status((bytes(cmd)), "\n") |
970 |
1112 |
|
1113 |
971 def status(ui, repo, *args, **kwargs): |
1114 def status(ui, repo, *args, **kwargs): |
972 cmdoptions = [ |
1115 cmdoptions = [ |
973 ('', 'ignored', None, ''), |
1116 ('', 'ignored', None, ''), |
974 ] |
1117 ] |
975 args, opts = parseoptions(ui, cmdoptions, args) |
1118 args, opts = parseoptions(ui, cmdoptions, args) |
979 |
1122 |
980 if opts.get('ignored'): |
1123 if opts.get('ignored'): |
981 cmd['-i'] = None |
1124 cmd['-i'] = None |
982 |
1125 |
983 ui.status((bytes(cmd)), "\n") |
1126 ui.status((bytes(cmd)), "\n") |
|
1127 |
984 |
1128 |
985 def svn(ui, repo, *args, **kwargs): |
1129 def svn(ui, repo, *args, **kwargs): |
986 if not args: |
1130 if not args: |
987 raise error.Abort(_('missing svn command')) |
1131 raise error.Abort(_('missing svn command')) |
988 svncmd = args[0] |
1132 svncmd = args[0] |
989 if svncmd not in gitsvncommands: |
1133 if svncmd not in gitsvncommands: |
990 raise error.Abort(_('unknown git svn command "%s"') % (svncmd)) |
1134 raise error.Abort(_('unknown git svn command "%s"') % svncmd) |
991 |
1135 |
992 args = args[1:] |
1136 args = args[1:] |
993 return gitsvncommands[svncmd](ui, repo, *args, **kwargs) |
1137 return gitsvncommands[svncmd](ui, repo, *args, **kwargs) |
994 |
1138 |
|
1139 |
995 def svndcommit(ui, repo, *args, **kwargs): |
1140 def svndcommit(ui, repo, *args, **kwargs): |
996 cmdoptions = [ |
1141 cmdoptions = [] |
997 ] |
|
998 args, opts = parseoptions(ui, cmdoptions, args) |
1142 args, opts = parseoptions(ui, cmdoptions, args) |
999 |
1143 |
1000 cmd = Command('push') |
1144 cmd = Command('push') |
1001 |
1145 |
1002 ui.status((bytes(cmd)), "\n") |
1146 ui.status((bytes(cmd)), "\n") |
1003 |
1147 |
|
1148 |
1004 def svnfetch(ui, repo, *args, **kwargs): |
1149 def svnfetch(ui, repo, *args, **kwargs): |
1005 cmdoptions = [ |
1150 cmdoptions = [] |
1006 ] |
|
1007 args, opts = parseoptions(ui, cmdoptions, args) |
1151 args, opts = parseoptions(ui, cmdoptions, args) |
1008 |
1152 |
1009 cmd = Command('pull') |
1153 cmd = Command('pull') |
1010 cmd.append('default-push') |
1154 cmd.append('default-push') |
1011 |
1155 |
1012 ui.status((bytes(cmd)), "\n") |
1156 ui.status((bytes(cmd)), "\n") |
1013 |
1157 |
|
1158 |
1014 def svnfindrev(ui, repo, *args, **kwargs): |
1159 def svnfindrev(ui, repo, *args, **kwargs): |
1015 cmdoptions = [ |
1160 cmdoptions = [] |
1016 ] |
|
1017 args, opts = parseoptions(ui, cmdoptions, args) |
1161 args, opts = parseoptions(ui, cmdoptions, args) |
1018 |
1162 |
1019 if not args: |
1163 if not args: |
1020 raise error.Abort(_('missing find-rev argument')) |
1164 raise error.Abort(_('missing find-rev argument')) |
1021 |
1165 |
1022 cmd = Command('log') |
1166 cmd = Command('log') |
1023 cmd['-r'] = args[0] |
1167 cmd['-r'] = args[0] |
1024 |
1168 |
1025 ui.status((bytes(cmd)), "\n") |
1169 ui.status((bytes(cmd)), "\n") |
|
1170 |
1026 |
1171 |
1027 def svnrebase(ui, repo, *args, **kwargs): |
1172 def svnrebase(ui, repo, *args, **kwargs): |
1028 cmdoptions = [ |
1173 cmdoptions = [ |
1029 ('l', 'local', None, ''), |
1174 ('l', 'local', None, ''), |
1030 ] |
1175 ] |