mercurial/commands.py
changeset 11177 6a64813276ed
parent 11173 5b48d819d5f9
child 11179 aad0c319b96e
equal deleted inserted replaced
11176:ed5d2a7c4b73 11177:6a64813276ed
    73     parameter greater than 0, this compares every removed file with
    73     parameter greater than 0, this compares every removed file with
    74     every added file and records those similar enough as renames. This
    74     every added file and records those similar enough as renames. This
    75     option takes a percentage between 0 (disabled) and 100 (files must
    75     option takes a percentage between 0 (disabled) and 100 (files must
    76     be identical) as its parameter. Detecting renamed files this way
    76     be identical) as its parameter. Detecting renamed files this way
    77     can be expensive.
    77     can be expensive.
       
    78 
       
    79     Returns 0 if all files are successfully added.
    78     """
    80     """
    79     try:
    81     try:
    80         sim = float(opts.get('similarity') or 0)
    82         sim = float(opts.get('similarity') or 0)
    81     except ValueError:
    83     except ValueError:
    82         raise util.Abort(_('similarity must be a number'))
    84         raise util.Abort(_('similarity must be a number'))
    95 
    97 
    96     Without the -a/--text option, annotate will avoid processing files
    98     Without the -a/--text option, annotate will avoid processing files
    97     it detects as binary. With -a, annotate will annotate the file
    99     it detects as binary. With -a, annotate will annotate the file
    98     anyway, although the results will probably be neither useful
   100     anyway, although the results will probably be neither useful
    99     nor desirable.
   101     nor desirable.
       
   102 
       
   103     Returns 0 on success.
   100     """
   104     """
   101     if opts.get('follow'):
   105     if opts.get('follow'):
   102         # --follow is deprecated and now just an alias for -f/--file
   106         # --follow is deprecated and now just an alias for -f/--file
   103         # to mimic the behavior of Mercurial before version 1.5
   107         # to mimic the behavior of Mercurial before version 1.5
   104         opts['file'] = 1
   108         opts['file'] = 1
   174 
   178 
   175     Each member added to an archive file has a directory prefix
   179     Each member added to an archive file has a directory prefix
   176     prepended. Use -p/--prefix to specify a format string for the
   180     prepended. Use -p/--prefix to specify a format string for the
   177     prefix. The default is the basename of the archive, with suffixes
   181     prefix. The default is the basename of the archive, with suffixes
   178     removed.
   182     removed.
       
   183 
       
   184     Returns 0 on success.
   179     '''
   185     '''
   180 
   186 
   181     ctx = repo[opts.get('rev')]
   187     ctx = repo[opts.get('rev')]
   182     if not ctx:
   188     if not ctx:
   183         raise util.Abort(_('no working directory: please specify a revision'))
   189         raise util.Abort(_('no working directory: please specify a revision'))
   228     before starting the backout, then merges the new head with that
   234     before starting the backout, then merges the new head with that
   229     changeset afterwards. This saves you from doing the merge by hand.
   235     changeset afterwards. This saves you from doing the merge by hand.
   230     The result of this merge is not committed, as with a normal merge.
   236     The result of this merge is not committed, as with a normal merge.
   231 
   237 
   232     See :hg:`help dates` for a list of formats valid for -d/--date.
   238     See :hg:`help dates` for a list of formats valid for -d/--date.
       
   239 
       
   240     Returns 0 on success.
   233     '''
   241     '''
   234     if rev and node:
   242     if rev and node:
   235         raise util.Abort(_("please specify just one revision"))
   243         raise util.Abort(_("please specify just one revision"))
   236 
   244 
   237     if not rev:
   245     if not rev:
   321     If you supply a command, it will be used for automatic bisection.
   329     If you supply a command, it will be used for automatic bisection.
   322     Its exit status will be used to mark revisions as good or bad:
   330     Its exit status will be used to mark revisions as good or bad:
   323     status 0 means good, 125 means to skip the revision, 127
   331     status 0 means good, 125 means to skip the revision, 127
   324     (command not found) will abort the bisection, and any other
   332     (command not found) will abort the bisection, and any other
   325     non-zero exit status means the revision is bad.
   333     non-zero exit status means the revision is bad.
       
   334 
       
   335     Returns 0 on success.
   326     """
   336     """
   327     def print_result(nodes, good):
   337     def print_result(nodes, good):
   328         displayer = cmdutil.show_changeset(ui, repo, {})
   338         displayer = cmdutil.show_changeset(ui, repo, {})
   329         if len(nodes) == 1:
   339         if len(nodes) == 1:
   330             # narrowed it down to a single revision
   340             # narrowed it down to a single revision
   402                 # update to next check
   412                 # update to next check
   403                 cmdutil.bail_if_changed(repo)
   413                 cmdutil.bail_if_changed(repo)
   404                 hg.clean(repo, nodes[0], show_stats=False)
   414                 hg.clean(repo, nodes[0], show_stats=False)
   405         finally:
   415         finally:
   406             hbisect.save_state(repo, state)
   416             hbisect.save_state(repo, state)
   407         return print_result(nodes, good)
   417         print_result(nodes, good)
       
   418         return
   408 
   419 
   409     # update state
   420     # update state
   410     node = repo.lookup(rev or '.')
   421     node = repo.lookup(rev or '.')
   411     if good or bad or skip:
   422     if good or bad or skip:
   412         if good:
   423         if good:
   455     the parent of the working directory, negating a previous branch
   466     the parent of the working directory, negating a previous branch
   456     change.
   467     change.
   457 
   468 
   458     Use the command :hg:`update` to switch to an existing branch. Use
   469     Use the command :hg:`update` to switch to an existing branch. Use
   459     :hg:`commit --close-branch` to mark this branch as closed.
   470     :hg:`commit --close-branch` to mark this branch as closed.
       
   471 
       
   472     Returns 0 on success.
   460     """
   473     """
   461 
   474 
   462     if opts.get('clean'):
   475     if opts.get('clean'):
   463         label = repo[None].parents()[0].branch()
   476         label = repo[None].parents()[0].branch()
   464         repo.dirstate.setbranch(label)
   477         repo.dirstate.setbranch(label)
   483 
   496 
   484     If -a/--active is specified, only show active branches. A branch
   497     If -a/--active is specified, only show active branches. A branch
   485     is considered active if it contains repository heads.
   498     is considered active if it contains repository heads.
   486 
   499 
   487     Use the command :hg:`update` to switch to an existing branch.
   500     Use the command :hg:`update` to switch to an existing branch.
       
   501 
       
   502     Returns 0.
   488     """
   503     """
   489 
   504 
   490     hexfunc = ui.debugflag and hex or short
   505     hexfunc = ui.debugflag and hex or short
   491     activebranches = [repo[n].branch() for n in repo.heads()]
   506     activebranches = [repo[n].branch() for n in repo.heads()]
   492     def testactive(tag, node):
   507     def testactive(tag, node):
   536     command. This is useful when direct push and pull are not
   551     command. This is useful when direct push and pull are not
   537     available or when exporting an entire repository is undesirable.
   552     available or when exporting an entire repository is undesirable.
   538 
   553 
   539     Applying bundles preserves all changeset contents including
   554     Applying bundles preserves all changeset contents including
   540     permissions, copy/rename information, and revision history.
   555     permissions, copy/rename information, and revision history.
       
   556 
       
   557     Returns 0 on success, 1 if no changes found.
   541     """
   558     """
   542     revs = opts.get('rev') or None
   559     revs = opts.get('rev') or None
   543     if revs:
   560     if revs:
   544         revs = [repo.lookup(rev) for rev in revs]
   561         revs = [repo.lookup(rev) for rev in revs]
   545     if opts.get('all'):
   562     if opts.get('all'):
   581         revs, checkout = hg.addbranchrevs(repo, other, branches, revs)
   598         revs, checkout = hg.addbranchrevs(repo, other, branches, revs)
   582         o = repo.findoutgoing(other, force=opts.get('force'))
   599         o = repo.findoutgoing(other, force=opts.get('force'))
   583 
   600 
   584     if not o:
   601     if not o:
   585         ui.status(_("no changes found\n"))
   602         ui.status(_("no changes found\n"))
   586         return
   603         return 1
   587 
   604 
   588     if revs:
   605     if revs:
   589         cg = repo.changegroupsubset(o, revs, 'bundle')
   606         cg = repo.changegroupsubset(o, revs, 'bundle')
   590     else:
   607     else:
   591         cg = repo.changegroup(o, 'bundle')
   608         cg = repo.changegroup(o, 'bundle')
   610     for the export command, with the following additions:
   627     for the export command, with the following additions:
   611 
   628 
   612     :``%s``: basename of file being printed
   629     :``%s``: basename of file being printed
   613     :``%d``: dirname of file being printed, or '.' if in repository root
   630     :``%d``: dirname of file being printed, or '.' if in repository root
   614     :``%p``: root-relative path name of file being printed
   631     :``%p``: root-relative path name of file being printed
       
   632 
       
   633     Returns 0 on success.
   615     """
   634     """
   616     ctx = repo[opts.get('rev')]
   635     ctx = repo[opts.get('rev')]
   617     err = 1
   636     err = 1
   618     m = cmdutil.match(repo, (file1,) + pats, opts)
   637     m = cmdutil.match(repo, (file1,) + pats, opts)
   619     for abs in ctx.walk(m):
   638     for abs in ctx.walk(m):
   684     d) the changeset specified with -r
   703     d) the changeset specified with -r
   685     e) the tipmost head specified with -b
   704     e) the tipmost head specified with -b
   686     f) the tipmost head specified with the url#branch source syntax
   705     f) the tipmost head specified with the url#branch source syntax
   687     g) the tipmost head of the default branch
   706     g) the tipmost head of the default branch
   688     h) tip
   707     h) tip
       
   708 
       
   709     Returns 0 on success.
   689     """
   710     """
   690     if opts.get('noupdate') and opts.get('updaterev'):
   711     if opts.get('noupdate') and opts.get('updaterev'):
   691         raise util.Abort(_("cannot specify both --noupdate and --updaterev"))
   712         raise util.Abort(_("cannot specify both --noupdate and --updaterev"))
   692 
   713 
   693     hg.clone(cmdutil.remoteui(ui, opts), source, dest,
   714     r = hg.clone(cmdutil.remoteui(ui, opts), source, dest,
   694              pull=opts.get('pull'),
   715                  pull=opts.get('pull'),
   695              stream=opts.get('uncompressed'),
   716                  stream=opts.get('uncompressed'),
   696              rev=opts.get('rev'),
   717                  rev=opts.get('rev'),
   697              update=opts.get('updaterev') or not opts.get('noupdate'),
   718                  update=opts.get('updaterev') or not opts.get('noupdate'),
   698              branch=opts.get('branch'))
   719                  branch=opts.get('branch'))
       
   720 
       
   721     return r is None
   699 
   722 
   700 def commit(ui, repo, *pats, **opts):
   723 def commit(ui, repo, *pats, **opts):
   701     """commit the specified files or all outstanding changes
   724     """commit the specified files or all outstanding changes
   702 
   725 
   703     Commit changes to the given files into the repository. Unlike a
   726     Commit changes to the given files into the repository. Unlike a
   712 
   735 
   713     If no commit message is specified, the configured editor is
   736     If no commit message is specified, the configured editor is
   714     started to prompt you for a message.
   737     started to prompt you for a message.
   715 
   738 
   716     See :hg:`help dates` for a list of formats valid for -d/--date.
   739     See :hg:`help dates` for a list of formats valid for -d/--date.
       
   740 
       
   741     Returns 0 on success, 1 if nothing changed.
   717     """
   742     """
   718     extra = {}
   743     extra = {}
   719     if opts.get('close_branch'):
   744     if opts.get('close_branch'):
   720         if repo['.'].node() not in repo.branchheads():
   745         if repo['.'].node() not in repo.branchheads():
   721             # The topo heads set is included in the branch heads set of the
   746             # The topo heads set is included in the branch heads set of the
   734     bheads = repo.branchheads(branch)
   759     bheads = repo.branchheads(branch)
   735 
   760 
   736     node = cmdutil.commit(ui, repo, commitfunc, pats, opts)
   761     node = cmdutil.commit(ui, repo, commitfunc, pats, opts)
   737     if not node:
   762     if not node:
   738         ui.status(_("nothing changed\n"))
   763         ui.status(_("nothing changed\n"))
   739         return
   764         return 1
   740 
   765 
   741     ctx = repo[node]
   766     ctx = repo[node]
   742     parents = ctx.parents()
   767     parents = ctx.parents()
   743 
   768 
   744     if bheads and [x for x in parents if x.node() not in bheads]:
   769     if bheads and [x for x in parents if x.node() not in bheads]:
   765     exist in the working directory. If invoked with -A/--after, the
   790     exist in the working directory. If invoked with -A/--after, the
   766     operation is recorded, but no copying is performed.
   791     operation is recorded, but no copying is performed.
   767 
   792 
   768     This command takes effect with the next commit. To undo a copy
   793     This command takes effect with the next commit. To undo a copy
   769     before that, see hg revert.
   794     before that, see hg revert.
       
   795 
       
   796     Returns 0 on success, 1 if errors are encountered.
   770     """
   797     """
   771     wlock = repo.wlock(False)
   798     wlock = repo.wlock(False)
   772     try:
   799     try:
   773         return cmdutil.copy(ui, repo, pats, opts)
   800         return cmdutil.copy(ui, repo, pats, opts)
   774     finally:
   801     finally:
   791         raise util.Abort(_('either two or three arguments required'))
   818         raise util.Abort(_('either two or three arguments required'))
   792     a = r.ancestor(lookup(rev1), lookup(rev2))
   819     a = r.ancestor(lookup(rev1), lookup(rev2))
   793     ui.write("%d:%s\n" % (r.rev(a), hex(a)))
   820     ui.write("%d:%s\n" % (r.rev(a), hex(a)))
   794 
   821 
   795 def debugcommands(ui, cmd='', *args):
   822 def debugcommands(ui, cmd='', *args):
       
   823     """list all available commands and options"""
   796     for cmd, vals in sorted(table.iteritems()):
   824     for cmd, vals in sorted(table.iteritems()):
   797         cmd = cmd.split('|')[0].strip('^')
   825         cmd = cmd.split('|')[0].strip('^')
   798         opts = ', '.join([i[1] for i in vals[1]])
   826         opts = ', '.join([i[1] for i in vals[1]])
   799         ui.write('%s: %s\n' % (cmd, opts))
   827         ui.write('%s: %s\n' % (cmd, opts))
   800 
   828 
   821     if ui.verbose:
   849     if ui.verbose:
   822         cmdlist = [' '.join(c[0]) for c in cmdlist.values()]
   850         cmdlist = [' '.join(c[0]) for c in cmdlist.values()]
   823     ui.write("%s\n" % "\n".join(sorted(cmdlist)))
   851     ui.write("%s\n" % "\n".join(sorted(cmdlist)))
   824 
   852 
   825 def debugfsinfo(ui, path = "."):
   853 def debugfsinfo(ui, path = "."):
       
   854     """show information detected about current filesystem"""
   826     open('.debugfsinfo', 'w').write('')
   855     open('.debugfsinfo', 'w').write('')
   827     ui.write('exec: %s\n' % (util.checkexec(path) and 'yes' or 'no'))
   856     ui.write('exec: %s\n' % (util.checkexec(path) and 'yes' or 'no'))
   828     ui.write('symlink: %s\n' % (util.checklink(path) and 'yes' or 'no'))
   857     ui.write('symlink: %s\n' % (util.checklink(path) and 'yes' or 'no'))
   829     ui.write('case-sensitive: %s\n' % (util.checkcase('.debugfsinfo')
   858     ui.write('case-sensitive: %s\n' % (util.checkcase('.debugfsinfo')
   830                                 and 'yes' or 'no'))
   859                                 and 'yes' or 'no'))
   877     With multiple arguments, print names and values of all config
   906     With multiple arguments, print names and values of all config
   878     items with matching section names.
   907     items with matching section names.
   879 
   908 
   880     With --debug, the source (filename and line number) is printed
   909     With --debug, the source (filename and line number) is printed
   881     for each config item.
   910     for each config item.
       
   911 
       
   912     Returns 0 on success.
   882     """
   913     """
   883 
   914 
   884     for f in util.rcpath():
   915     for f in util.rcpath():
   885         ui.debug(_('read config from: %s\n') % f)
   916         ui.debug(_('read config from: %s\n') % f)
   886     untrusted = bool(opts.get('untrusted'))
   917     untrusted = bool(opts.get('untrusted'))
   907 def debugsetparents(ui, repo, rev1, rev2=None):
   938 def debugsetparents(ui, repo, rev1, rev2=None):
   908     """manually set the parents of the current working directory
   939     """manually set the parents of the current working directory
   909 
   940 
   910     This is useful for writing repository conversion tools, but should
   941     This is useful for writing repository conversion tools, but should
   911     be used with care.
   942     be used with care.
       
   943 
       
   944     Returns 0 on success.
   912     """
   945     """
   913 
   946 
   914     if not rev2:
   947     if not rev2:
   915         rev2 = hex(nullid)
   948         rev2 = hex(nullid)
   916 
   949 
   998         if pp[1] != nullid:
  1031         if pp[1] != nullid:
   999             ui.write("\t%d -> %d\n" % (r.rev(pp[1]), i))
  1032             ui.write("\t%d -> %d\n" % (r.rev(pp[1]), i))
  1000     ui.write("}\n")
  1033     ui.write("}\n")
  1001 
  1034 
  1002 def debuginstall(ui):
  1035 def debuginstall(ui):
  1003     '''test Mercurial installation'''
  1036     '''test Mercurial installation
       
  1037 
       
  1038     Returns 0 on success.
       
  1039     '''
  1004 
  1040 
  1005     def writetemp(contents):
  1041     def writetemp(contents):
  1006         (fd, name) = tempfile.mkstemp(prefix="hg-debuginstall-")
  1042         (fd, name) = tempfile.mkstemp(prefix="hg-debuginstall-")
  1007         f = os.fdopen(fd, "wb")
  1043         f = os.fdopen(fd, "wb")
  1008         f.write(contents)
  1044         f.write(contents)
  1159     files it detects as binary. With -a, diff will generate a diff
  1195     files it detects as binary. With -a, diff will generate a diff
  1160     anyway, probably with undesirable results.
  1196     anyway, probably with undesirable results.
  1161 
  1197 
  1162     Use the -g/--git option to generate diffs in the git extended diff
  1198     Use the -g/--git option to generate diffs in the git extended diff
  1163     format. For more information, read :hg:`help diffs`.
  1199     format. For more information, read :hg:`help diffs`.
       
  1200 
       
  1201     Returns 0 on success.
  1164     """
  1202     """
  1165 
  1203 
  1166     revs = opts.get('rev')
  1204     revs = opts.get('rev')
  1167     change = opts.get('change')
  1205     change = opts.get('change')
  1168     stat = opts.get('stat')
  1206     stat = opts.get('stat')
  1216     Use the -g/--git option to generate diffs in the git extended diff
  1254     Use the -g/--git option to generate diffs in the git extended diff
  1217     format. See :hg:`help diffs` for more information.
  1255     format. See :hg:`help diffs` for more information.
  1218 
  1256 
  1219     With the --switch-parent option, the diff will be against the
  1257     With the --switch-parent option, the diff will be against the
  1220     second parent. It can be useful to review a merge.
  1258     second parent. It can be useful to review a merge.
       
  1259 
       
  1260     Returns 0 on success.
  1221     """
  1261     """
  1222     changesets += tuple(opts.get('rev', []))
  1262     changesets += tuple(opts.get('rev', []))
  1223     if not changesets:
  1263     if not changesets:
  1224         raise util.Abort(_("export requires at least one changeset"))
  1264         raise util.Abort(_("export requires at least one changeset"))
  1225     revs = cmdutil.revrange(repo, changesets)
  1265     revs = cmdutil.revrange(repo, changesets)
  1240     This only removes files from the current branch, not from the
  1280     This only removes files from the current branch, not from the
  1241     entire project history, and it does not delete them from the
  1281     entire project history, and it does not delete them from the
  1242     working directory.
  1282     working directory.
  1243 
  1283 
  1244     To undo a forget before the next commit, see hg add.
  1284     To undo a forget before the next commit, see hg add.
       
  1285 
       
  1286     Returns 0 on success.
  1245     """
  1287     """
  1246 
  1288 
  1247     if not pats:
  1289     if not pats:
  1248         raise util.Abort(_('no files specified'))
  1290         raise util.Abort(_('no files specified'))
  1249 
  1291 
  1250     m = cmdutil.match(repo, pats, opts)
  1292     m = cmdutil.match(repo, pats, opts)
  1251     s = repo.status(match=m, clean=True)
  1293     s = repo.status(match=m, clean=True)
  1252     forget = sorted(s[0] + s[1] + s[3] + s[6])
  1294     forget = sorted(s[0] + s[1] + s[3] + s[6])
       
  1295     errs = 0
  1253 
  1296 
  1254     for f in m.files():
  1297     for f in m.files():
  1255         if f not in repo.dirstate and not os.path.isdir(m.rel(f)):
  1298         if f not in repo.dirstate and not os.path.isdir(m.rel(f)):
  1256             ui.warn(_('not removing %s: file is already untracked\n')
  1299             ui.warn(_('not removing %s: file is already untracked\n')
  1257                     % m.rel(f))
  1300                     % m.rel(f))
       
  1301             errs = 1
  1258 
  1302 
  1259     for f in forget:
  1303     for f in forget:
  1260         if ui.verbose or not m.exact(f):
  1304         if ui.verbose or not m.exact(f):
  1261             ui.status(_('removing %s\n') % m.rel(f))
  1305             ui.status(_('removing %s\n') % m.rel(f))
  1262 
  1306 
  1263     repo.remove(forget, unlink=False)
  1307     repo.remove(forget, unlink=False)
       
  1308     return errs
  1264 
  1309 
  1265 def grep(ui, repo, pattern, *pats, **opts):
  1310 def grep(ui, repo, pattern, *pats, **opts):
  1266     """search for a pattern in specified files and revisions
  1311     """search for a pattern in specified files and revisions
  1267 
  1312 
  1268     Search revisions of files for a regular expression.
  1313     Search revisions of files for a regular expression.
  1275     By default, grep only prints output for the first revision of a
  1320     By default, grep only prints output for the first revision of a
  1276     file in which it finds a match. To get it to print every revision
  1321     file in which it finds a match. To get it to print every revision
  1277     that contains a change in match status ("-" for a match that
  1322     that contains a change in match status ("-" for a match that
  1278     becomes a non-match, or "+" for a non-match that becomes a match),
  1323     becomes a non-match, or "+" for a non-match that becomes a match),
  1279     use the --all flag.
  1324     use the --all flag.
       
  1325 
       
  1326     Returns 0 if a match is found, 1 otherwise.
  1280     """
  1327     """
  1281     reflags = 0
  1328     reflags = 0
  1282     if opts.get('ignore_case'):
  1329     if opts.get('ignore_case'):
  1283         reflags |= re.I
  1330         reflags |= re.I
  1284     try:
  1331     try:
  1285         regexp = re.compile(pattern, reflags)
  1332         regexp = re.compile(pattern, reflags)
  1286     except Exception, inst:
  1333     except Exception, inst:
  1287         ui.warn(_("grep: invalid match pattern: %s\n") % inst)
  1334         ui.warn(_("grep: invalid match pattern: %s\n") % inst)
  1288         return None
  1335         return 1
  1289     sep, eol = ':', '\n'
  1336     sep, eol = ':', '\n'
  1290     if opts.get('print0'):
  1337     if opts.get('print0'):
  1291         sep = eol = '\0'
  1338         sep = eol = '\0'
  1292 
  1339 
  1293     getfile = util.lrucachefunc(repo.file)
  1340     getfile = util.lrucachefunc(repo.file)
  1441                     if copy:
  1488                     if copy:
  1442                         skip[copy] = True
  1489                         skip[copy] = True
  1443         del matches[rev]
  1490         del matches[rev]
  1444         del revfiles[rev]
  1491         del revfiles[rev]
  1445 
  1492 
       
  1493     return not found
       
  1494 
  1446 def heads(ui, repo, *branchrevs, **opts):
  1495 def heads(ui, repo, *branchrevs, **opts):
  1447     """show current repository heads or show branch heads
  1496     """show current repository heads or show branch heads
  1448 
  1497 
  1449     With no arguments, show all repository branch heads.
  1498     With no arguments, show all repository branch heads.
  1450 
  1499 
  1462     If STARTREV is specified, only those heads that are descendants of
  1511     If STARTREV is specified, only those heads that are descendants of
  1463     STARTREV will be displayed.
  1512     STARTREV will be displayed.
  1464 
  1513 
  1465     If -t/--topo is specified, named branch mechanics will be ignored and only
  1514     If -t/--topo is specified, named branch mechanics will be ignored and only
  1466     changesets without children will be shown.
  1515     changesets without children will be shown.
       
  1516 
       
  1517     Returns 0 if matching heads are found, 1 if not.
  1467     """
  1518     """
  1468 
  1519 
  1469     if opts.get('rev'):
  1520     if opts.get('rev'):
  1470         start = repo.lookup(opts['rev'])
  1521         start = repo.lookup(opts['rev'])
  1471     else:
  1522     else:
  1519     """show help for a given topic or a help overview
  1570     """show help for a given topic or a help overview
  1520 
  1571 
  1521     With no arguments, print a list of commands with short help messages.
  1572     With no arguments, print a list of commands with short help messages.
  1522 
  1573 
  1523     Given a topic, extension, or command name, print help for that
  1574     Given a topic, extension, or command name, print help for that
  1524     topic."""
  1575     topic.
       
  1576 
       
  1577     Returns 0 if successful.
       
  1578     """
  1525     option_lists = []
  1579     option_lists = []
  1526     textwidth = util.termwidth() - 2
  1580     textwidth = util.termwidth() - 2
  1527 
  1581 
  1528     def addglobalopts(aliases):
  1582     def addglobalopts(aliases):
  1529         if ui.verbose:
  1583         if ui.verbose:
  1777 
  1831 
  1778     This summary identifies the repository state using one or two
  1832     This summary identifies the repository state using one or two
  1779     parent hash identifiers, followed by a "+" if there are
  1833     parent hash identifiers, followed by a "+" if there are
  1780     uncommitted changes in the working directory, a list of tags for
  1834     uncommitted changes in the working directory, a list of tags for
  1781     this revision and a branch name for non-default branches.
  1835     this revision and a branch name for non-default branches.
       
  1836 
       
  1837     Returns 0 if successful.
  1782     """
  1838     """
  1783 
  1839 
  1784     if not repo and not source:
  1840     if not repo and not source:
  1785         raise util.Abort(_("There is no Mercurial repository here "
  1841         raise util.Abort(_("There is no Mercurial repository here "
  1786                            "(.hg not found)"))
  1842                            "(.hg not found)"))
  1872     copies in the patch in the same way as 'addremove'.
  1928     copies in the patch in the same way as 'addremove'.
  1873 
  1929 
  1874     To read a patch from standard input, use "-" as the patch name. If
  1930     To read a patch from standard input, use "-" as the patch name. If
  1875     a URL is specified, the patch will be downloaded from it.
  1931     a URL is specified, the patch will be downloaded from it.
  1876     See :hg:`help dates` for a list of formats valid for -d/--date.
  1932     See :hg:`help dates` for a list of formats valid for -d/--date.
       
  1933 
       
  1934     Returns 0 on success.
  1877     """
  1935     """
  1878     patches = (patch1,) + patches
  1936     patches = (patch1,) + patches
  1879 
  1937 
  1880     date = opts.get('date')
  1938     date = opts.get('date')
  1881     if date:
  1939     if date:
  2005 
  2063 
  2006     For remote repository, using --bundle avoids downloading the
  2064     For remote repository, using --bundle avoids downloading the
  2007     changesets twice if the incoming is followed by a pull.
  2065     changesets twice if the incoming is followed by a pull.
  2008 
  2066 
  2009     See pull for valid source format details.
  2067     See pull for valid source format details.
       
  2068 
       
  2069     Returns 0 if there are incoming changes, 1 otherwise.
  2010     """
  2070     """
  2011     limit = cmdutil.loglimit(opts)
  2071     limit = cmdutil.loglimit(opts)
  2012     source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch'))
  2072     source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch'))
  2013     other = hg.repository(cmdutil.remoteui(repo, opts), source)
  2073     other = hg.repository(cmdutil.remoteui(repo, opts), source)
  2014     ui.status(_('comparing with %s\n') % url.hidepassword(source))
  2074     ui.status(_('comparing with %s\n') % url.hidepassword(source))
  2075 
  2135 
  2076     If no directory is given, the current directory is used.
  2136     If no directory is given, the current directory is used.
  2077 
  2137 
  2078     It is possible to specify an ``ssh://`` URL as the destination.
  2138     It is possible to specify an ``ssh://`` URL as the destination.
  2079     See :hg:`help urls` for more information.
  2139     See :hg:`help urls` for more information.
       
  2140 
       
  2141     Returns 0 on success.
  2080     """
  2142     """
  2081     hg.repository(cmdutil.remoteui(ui, opts), dest, create=1)
  2143     hg.repository(cmdutil.remoteui(ui, opts), dest, create=1)
  2082 
  2144 
  2083 def locate(ui, repo, *pats, **opts):
  2145 def locate(ui, repo, *pats, **opts):
  2084     """locate files matching specific patterns
  2146     """locate files matching specific patterns
  2095 
  2157 
  2096     If you want to feed the output of this command into the "xargs"
  2158     If you want to feed the output of this command into the "xargs"
  2097     command, use the -0 option to both this command and "xargs". This
  2159     command, use the -0 option to both this command and "xargs". This
  2098     will avoid the problem of "xargs" treating single filenames that
  2160     will avoid the problem of "xargs" treating single filenames that
  2099     contain whitespace as multiple filenames.
  2161     contain whitespace as multiple filenames.
       
  2162 
       
  2163     Returns 0 if a match is found, 1 otherwise.
  2100     """
  2164     """
  2101     end = opts.get('print0') and '\0' or '\n'
  2165     end = opts.get('print0') and '\0' or '\n'
  2102     rev = opts.get('rev') or None
  2166     rev = opts.get('rev') or None
  2103 
  2167 
  2104     ret = 1
  2168     ret = 1
  2140 
  2204 
  2141     NOTE: log -p/--patch may generate unexpected diff output for merge
  2205     NOTE: log -p/--patch may generate unexpected diff output for merge
  2142     changesets, as it will only compare the merge changeset against
  2206     changesets, as it will only compare the merge changeset against
  2143     its first parent. Also, only files different from BOTH parents
  2207     its first parent. Also, only files different from BOTH parents
  2144     will appear in files:.
  2208     will appear in files:.
       
  2209 
       
  2210     Returns 0 on success.
  2145     """
  2211     """
  2146 
  2212 
  2147     matchfn = cmdutil.match(repo, pats, opts)
  2213     matchfn = cmdutil.match(repo, pats, opts)
  2148     limit = cmdutil.loglimit(opts)
  2214     limit = cmdutil.loglimit(opts)
  2149     count = 0
  2215     count = 0
  2208     If no revision is given, the first parent of the working directory
  2274     If no revision is given, the first parent of the working directory
  2209     is used, or the null revision if no revision is checked out.
  2275     is used, or the null revision if no revision is checked out.
  2210 
  2276 
  2211     With -v, print file permissions, symlink and executable bits.
  2277     With -v, print file permissions, symlink and executable bits.
  2212     With --debug, print file revision hashes.
  2278     With --debug, print file revision hashes.
       
  2279 
       
  2280     Returns 0 on success.
  2213     """
  2281     """
  2214 
  2282 
  2215     if rev and node:
  2283     if rev and node:
  2216         raise util.Abort(_("please specify just one revision"))
  2284         raise util.Abort(_("please specify just one revision"))
  2217 
  2285 
  2240 
  2308 
  2241     If no revision is specified, the working directory's parent is a
  2309     If no revision is specified, the working directory's parent is a
  2242     head revision, and the current branch contains exactly one other
  2310     head revision, and the current branch contains exactly one other
  2243     head, the other head is merged with by default. Otherwise, an
  2311     head, the other head is merged with by default. Otherwise, an
  2244     explicit revision with which to merge with must be provided.
  2312     explicit revision with which to merge with must be provided.
       
  2313 
       
  2314     Returns 0 on success, 1 if there are unresolved files.
  2245     """
  2315     """
  2246 
  2316 
  2247     if opts.get('rev') and node:
  2317     if opts.get('rev') and node:
  2248         raise util.Abort(_("please specify just one revision"))
  2318         raise util.Abort(_("please specify just one revision"))
  2249     if not node:
  2319     if not node:
  2296     Show changesets not found in the specified destination repository
  2366     Show changesets not found in the specified destination repository
  2297     or the default push location. These are the changesets that would
  2367     or the default push location. These are the changesets that would
  2298     be pushed if a push was requested.
  2368     be pushed if a push was requested.
  2299 
  2369 
  2300     See pull for details of valid destination formats.
  2370     See pull for details of valid destination formats.
       
  2371 
       
  2372     Returns 0 if there are outgoing changes, 1 otherwise.
  2301     """
  2373     """
  2302     limit = cmdutil.loglimit(opts)
  2374     limit = cmdutil.loglimit(opts)
  2303     dest = ui.expandpath(dest or 'default-push', dest or 'default')
  2375     dest = ui.expandpath(dest or 'default-push', dest or 'default')
  2304     dest, branches = hg.parseurl(dest, opts.get('branch'))
  2376     dest, branches = hg.parseurl(dest, opts.get('branch'))
  2305     revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev'))
  2377     revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev'))
  2333     Print the working directory's parent revisions. If a revision is
  2405     Print the working directory's parent revisions. If a revision is
  2334     given via -r/--rev, the parent of that revision will be printed.
  2406     given via -r/--rev, the parent of that revision will be printed.
  2335     If a file argument is given, the revision in which the file was
  2407     If a file argument is given, the revision in which the file was
  2336     last changed (before the working directory revision or the
  2408     last changed (before the working directory revision or the
  2337     argument to --rev if given) is printed.
  2409     argument to --rev if given) is printed.
       
  2410 
       
  2411     Returns 0 on success.
  2338     """
  2412     """
  2339     rev = opts.get('rev')
  2413     rev = opts.get('rev')
  2340     if rev:
  2414     if rev:
  2341         ctx = repo[rev]
  2415         ctx = repo[rev]
  2342     else:
  2416     else:
  2430     added those changes to the repository, you should use pull -r X
  2504     added those changes to the repository, you should use pull -r X
  2431     where X is the last changeset listed by hg incoming.
  2505     where X is the last changeset listed by hg incoming.
  2432 
  2506 
  2433     If SOURCE is omitted, the 'default' path will be used.
  2507     If SOURCE is omitted, the 'default' path will be used.
  2434     See :hg:`help urls` for more information.
  2508     See :hg:`help urls` for more information.
       
  2509 
       
  2510     Returns 0 on success, 1 if an update had unresolved files.
  2435     """
  2511     """
  2436     source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch'))
  2512     source, branches = hg.parseurl(ui.expandpath(source), opts.get('branch'))
  2437     other = hg.repository(cmdutil.remoteui(repo, opts), source)
  2513     other = hg.repository(cmdutil.remoteui(repo, opts), source)
  2438     ui.status(_('pulling from %s\n') % url.hidepassword(source))
  2514     ui.status(_('pulling from %s\n') % url.hidepassword(source))
  2439     revs, checkout = hg.addbranchrevs(repo, other, branches, opts.get('rev'))
  2515     revs, checkout = hg.addbranchrevs(repo, other, branches, opts.get('rev'))
  2467     If -r/--rev is used, the named revision and all its ancestors will
  2543     If -r/--rev is used, the named revision and all its ancestors will
  2468     be pushed to the remote repository.
  2544     be pushed to the remote repository.
  2469 
  2545 
  2470     Please see :hg:`help urls` for important details about ``ssh://``
  2546     Please see :hg:`help urls` for important details about ``ssh://``
  2471     URLs. If DESTINATION is omitted, a default path will be used.
  2547     URLs. If DESTINATION is omitted, a default path will be used.
       
  2548 
       
  2549     Returns 0 if push was successful, 1 if nothing to push.
  2472     """
  2550     """
  2473     dest = ui.expandpath(dest or 'default-push', dest or 'default')
  2551     dest = ui.expandpath(dest or 'default-push', dest or 'default')
  2474     dest, branches = hg.parseurl(dest, opts.get('branch'))
  2552     dest, branches = hg.parseurl(dest, opts.get('branch'))
  2475     revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev'))
  2553     revs, checkout = hg.addbranchrevs(repo, repo, branches, opts.get('rev'))
  2476     other = hg.repository(cmdutil.remoteui(repo, opts), dest)
  2554     other = hg.repository(cmdutil.remoteui(repo, opts), dest)
  2494     Recover from an interrupted commit or pull.
  2572     Recover from an interrupted commit or pull.
  2495 
  2573 
  2496     This command tries to fix the repository status after an
  2574     This command tries to fix the repository status after an
  2497     interrupted operation. It should only be necessary when Mercurial
  2575     interrupted operation. It should only be necessary when Mercurial
  2498     suggests it.
  2576     suggests it.
       
  2577 
       
  2578     Returns 0 if successful, 1 if nothing to recover or verify fails.
  2499     """
  2579     """
  2500     if repo.recover():
  2580     if repo.recover():
  2501         return hg.verify(repo)
  2581         return hg.verify(repo)
  2502     return 1
  2582     return 1
  2503 
  2583 
  2524       -A     W  W  W  R
  2604       -A     W  W  W  R
  2525       -Af    R  R  R  R
  2605       -Af    R  R  R  R
  2526 
  2606 
  2527     This command schedules the files to be removed at the next commit.
  2607     This command schedules the files to be removed at the next commit.
  2528     To undo a remove before that, see hg revert.
  2608     To undo a remove before that, see hg revert.
  2529     """
  2609 
  2530 
  2610     Returns 0 on success, 1 if any warnings encountered.
       
  2611     """
       
  2612 
       
  2613     ret = 0
  2531     after, force = opts.get('after'), opts.get('force')
  2614     after, force = opts.get('after'), opts.get('force')
  2532     if not pats and not after:
  2615     if not pats and not after:
  2533         raise util.Abort(_('no files specified'))
  2616         raise util.Abort(_('no files specified'))
  2534 
  2617 
  2535     m = cmdutil.match(repo, pats, opts)
  2618     m = cmdutil.match(repo, pats, opts)
  2537     modified, added, deleted, clean = s[0], s[1], s[3], s[6]
  2620     modified, added, deleted, clean = s[0], s[1], s[3], s[6]
  2538 
  2621 
  2539     for f in m.files():
  2622     for f in m.files():
  2540         if f not in repo.dirstate and not os.path.isdir(m.rel(f)):
  2623         if f not in repo.dirstate and not os.path.isdir(m.rel(f)):
  2541             ui.warn(_('not removing %s: file is untracked\n') % m.rel(f))
  2624             ui.warn(_('not removing %s: file is untracked\n') % m.rel(f))
       
  2625             ret = 1
  2542 
  2626 
  2543     def warn(files, reason):
  2627     def warn(files, reason):
  2544         for f in files:
  2628         for f in files:
  2545             ui.warn(_('not removing %s: file %s (use -f to force removal)\n')
  2629             ui.warn(_('not removing %s: file %s (use -f to force removal)\n')
  2546                     % (m.rel(f), reason))
  2630                     % (m.rel(f), reason))
       
  2631             ret = 1
  2547 
  2632 
  2548     if force:
  2633     if force:
  2549         remove, forget = modified + deleted + clean, added
  2634         remove, forget = modified + deleted + clean, added
  2550     elif after:
  2635     elif after:
  2551         remove, forget = deleted, []
  2636         remove, forget = deleted, []
  2559         if ui.verbose or not m.exact(f):
  2644         if ui.verbose or not m.exact(f):
  2560             ui.status(_('removing %s\n') % m.rel(f))
  2645             ui.status(_('removing %s\n') % m.rel(f))
  2561 
  2646 
  2562     repo.forget(forget)
  2647     repo.forget(forget)
  2563     repo.remove(remove, unlink=not after)
  2648     repo.remove(remove, unlink=not after)
       
  2649     return ret
  2564 
  2650 
  2565 def rename(ui, repo, *pats, **opts):
  2651 def rename(ui, repo, *pats, **opts):
  2566     """rename files; equivalent of copy + remove
  2652     """rename files; equivalent of copy + remove
  2567 
  2653 
  2568     Mark dest as copies of sources; mark sources for deletion. If dest
  2654     Mark dest as copies of sources; mark sources for deletion. If dest
  2573     exist in the working directory. If invoked with -A/--after, the
  2659     exist in the working directory. If invoked with -A/--after, the
  2574     operation is recorded, but no copying is performed.
  2660     operation is recorded, but no copying is performed.
  2575 
  2661 
  2576     This command takes effect at the next commit. To undo a rename
  2662     This command takes effect at the next commit. To undo a rename
  2577     before that, see hg revert.
  2663     before that, see hg revert.
       
  2664 
       
  2665     Returns 0 on success, 1 if errors are encountered.
  2578     """
  2666     """
  2579     wlock = repo.wlock(False)
  2667     wlock = repo.wlock(False)
  2580     try:
  2668     try:
  2581         return cmdutil.copy(ui, repo, pats, opts, rename=True)
  2669         return cmdutil.copy(ui, repo, pats, opts, rename=True)
  2582     finally:
  2670     finally:
  2606          (or ``-a`` for all unresolved files)
  2694          (or ``-a`` for all unresolved files)
  2607 
  2695 
  2608     Note that Mercurial will not let you commit files with unresolved merge
  2696     Note that Mercurial will not let you commit files with unresolved merge
  2609     conflicts.  You must use ``hg resolve -m ...`` before you can commit
  2697     conflicts.  You must use ``hg resolve -m ...`` before you can commit
  2610     after a conflicting merge.
  2698     after a conflicting merge.
       
  2699 
       
  2700     Returns 0 on success, 1 if any files fail a resolve attempt.
  2611     """
  2701     """
  2612 
  2702 
  2613     all, mark, unmark, show, nostatus = \
  2703     all, mark, unmark, show, nostatus = \
  2614         [opts.get(o) for o in 'all mark unmark list no_status'.split()]
  2704         [opts.get(o) for o in 'all mark unmark list no_status'.split()]
  2615 
  2705 
  2621         raise util.Abort(_('no files or directories specified; '
  2711         raise util.Abort(_('no files or directories specified; '
  2622                            'use --all to remerge all files'))
  2712                            'use --all to remerge all files'))
  2623 
  2713 
  2624     ms = mergemod.mergestate(repo)
  2714     ms = mergemod.mergestate(repo)
  2625     m = cmdutil.match(repo, pats, opts)
  2715     m = cmdutil.match(repo, pats, opts)
       
  2716     ret = 0
  2626 
  2717 
  2627     for f in ms:
  2718     for f in ms:
  2628         if m(f):
  2719         if m(f):
  2629             if show:
  2720             if show:
  2630                 if nostatus:
  2721                 if nostatus:
  2644                 # backup pre-resolve (merge uses .orig for its own purposes)
  2735                 # backup pre-resolve (merge uses .orig for its own purposes)
  2645                 a = repo.wjoin(f)
  2736                 a = repo.wjoin(f)
  2646                 util.copyfile(a, a + ".resolve")
  2737                 util.copyfile(a, a + ".resolve")
  2647 
  2738 
  2648                 # resolve file
  2739                 # resolve file
  2649                 ms.resolve(f, wctx, mctx)
  2740                 if ms.resolve(f, wctx, mctx):
       
  2741                     ret = 1
  2650 
  2742 
  2651                 # replace filemerge's .orig file with our resolve file
  2743                 # replace filemerge's .orig file with our resolve file
  2652                 util.rename(a + ".resolve", a + ".orig")
  2744                 util.rename(a + ".resolve", a + ".orig")
       
  2745     return ret
  2653 
  2746 
  2654 def revert(ui, repo, *pats, **opts):
  2747 def revert(ui, repo, *pats, **opts):
  2655     """restore individual files or directories to an earlier state
  2748     """restore individual files or directories to an earlier state
  2656 
  2749 
  2657     (Use update -r to check out earlier revisions, revert does not
  2750     (Use update -r to check out earlier revisions, revert does not
  2681     If names are given, all files matching the names are reverted.
  2774     If names are given, all files matching the names are reverted.
  2682     If no arguments are given, no files are reverted.
  2775     If no arguments are given, no files are reverted.
  2683 
  2776 
  2684     Modified files are saved with a .orig suffix before reverting.
  2777     Modified files are saved with a .orig suffix before reverting.
  2685     To disable these backups, use --no-backup.
  2778     To disable these backups, use --no-backup.
       
  2779 
       
  2780     Returns 0 on success.
  2686     """
  2781     """
  2687 
  2782 
  2688     if opts["date"]:
  2783     if opts["date"]:
  2689         if opts["rev"]:
  2784         if opts["rev"]:
  2690             raise util.Abort(_("you can't specify a revision and a date"))
  2785             raise util.Abort(_("you can't specify a revision and a date"))
  2893     changes are visible for pull by other users, rolling a transaction
  2988     changes are visible for pull by other users, rolling a transaction
  2894     back locally is ineffective (someone else may already have pulled
  2989     back locally is ineffective (someone else may already have pulled
  2895     the changes). Furthermore, a race is possible with readers of the
  2990     the changes). Furthermore, a race is possible with readers of the
  2896     repository; for example an in-progress pull from the repository
  2991     repository; for example an in-progress pull from the repository
  2897     may fail if a rollback is performed.
  2992     may fail if a rollback is performed.
  2898     """
  2993 
  2899     repo.rollback(opts.get('dry_run'))
  2994     Returns 0 on success, 1 if no rollback data is available.
       
  2995     """
       
  2996     return repo.rollback(opts.get('dry_run'))
  2900 
  2997 
  2901 def root(ui, repo):
  2998 def root(ui, repo):
  2902     """print the root (top) of the current working directory
  2999     """print the root (top) of the current working directory
  2903 
  3000 
  2904     Print the root directory of the current repository.
  3001     Print the root directory of the current repository.
       
  3002 
       
  3003     Returns 0 on success.
  2905     """
  3004     """
  2906     ui.write(repo.root + "\n")
  3005     ui.write(repo.root + "\n")
  2907 
  3006 
  2908 def serve(ui, repo, **opts):
  3007 def serve(ui, repo, **opts):
  2909     """start stand-alone webserver
  3008     """start stand-alone webserver
  2924     files.
  3023     files.
  2925 
  3024 
  2926     To have the server choose a free port number to listen on, specify
  3025     To have the server choose a free port number to listen on, specify
  2927     a port number of 0; in this case, the server will print the port
  3026     a port number of 0; in this case, the server will print the port
  2928     number it uses.
  3027     number it uses.
       
  3028 
       
  3029     Returns 0 on success.
  2929     """
  3030     """
  2930 
  3031 
  2931     if opts["stdio"]:
  3032     if opts["stdio"]:
  2932         if repo is None:
  3033         if repo is None:
  2933             raise error.RepoError(_("There is no Mercurial repository here"
  3034             raise error.RepoError(_("There is no Mercurial repository here"
  3030       C = clean
  3131       C = clean
  3031       ! = missing (deleted by non-hg command, but still tracked)
  3132       ! = missing (deleted by non-hg command, but still tracked)
  3032       ? = not tracked
  3133       ? = not tracked
  3033       I = ignored
  3134       I = ignored
  3034         = origin of the previous file listed as A (added)
  3135         = origin of the previous file listed as A (added)
       
  3136 
       
  3137     Returns 0 on success.
  3035     """
  3138     """
  3036 
  3139 
  3037     revs = opts.get('rev')
  3140     revs = opts.get('rev')
  3038     change = opts.get('change')
  3141     change = opts.get('change')
  3039 
  3142 
  3093     This generates a brief summary of the working directory state,
  3196     This generates a brief summary of the working directory state,
  3094     including parents, branch, commit status, and available updates.
  3197     including parents, branch, commit status, and available updates.
  3095 
  3198 
  3096     With the --remote option, this will check the default paths for
  3199     With the --remote option, this will check the default paths for
  3097     incoming and outgoing changes. This can be time-consuming.
  3200     incoming and outgoing changes. This can be time-consuming.
       
  3201 
       
  3202     Returns 0 on success.
  3098     """
  3203     """
  3099 
  3204 
  3100     ctx = repo[None]
  3205     ctx = repo[None]
  3101     parents = ctx.parents()
  3206     parents = ctx.parents()
  3102     pnode = parents[0].node()
  3207     pnode = parents[0].node()
  3237 
  3342 
  3238     See :hg:`help dates` for a list of formats valid for -d/--date.
  3343     See :hg:`help dates` for a list of formats valid for -d/--date.
  3239 
  3344 
  3240     Since tag names have priority over branch names during revision
  3345     Since tag names have priority over branch names during revision
  3241     lookup, using an existing branch name as a tag name is discouraged.
  3346     lookup, using an existing branch name as a tag name is discouraged.
       
  3347 
       
  3348     Returns 0 on success.
  3242     """
  3349     """
  3243 
  3350 
  3244     rev_ = "."
  3351     rev_ = "."
  3245     names = [t.strip() for t in (name1,) + names]
  3352     names = [t.strip() for t in (name1,) + names]
  3246     if len(names) != len(set(names)):
  3353     if len(names) != len(set(names)):
  3291 def tags(ui, repo):
  3398 def tags(ui, repo):
  3292     """list repository tags
  3399     """list repository tags
  3293 
  3400 
  3294     This lists both regular and local tags. When the -v/--verbose
  3401     This lists both regular and local tags. When the -v/--verbose
  3295     switch is used, a third column "local" is printed for local tags.
  3402     switch is used, a third column "local" is printed for local tags.
       
  3403 
       
  3404     Returns 0 on success.
  3296     """
  3405     """
  3297 
  3406 
  3298     hexfunc = ui.debugflag and hex or short
  3407     hexfunc = ui.debugflag and hex or short
  3299     tagtype = ""
  3408     tagtype = ""
  3300 
  3409 
  3326 
  3435 
  3327     If you have just made a commit, that commit will be the tip. If
  3436     If you have just made a commit, that commit will be the tip. If
  3328     you have just pulled changes from another repository, the tip of
  3437     you have just pulled changes from another repository, the tip of
  3329     that repository becomes the current tip. The "tip" tag is special
  3438     that repository becomes the current tip. The "tip" tag is special
  3330     and cannot be renamed or assigned to a different changeset.
  3439     and cannot be renamed or assigned to a different changeset.
       
  3440 
       
  3441     Returns 0 on success.
  3331     """
  3442     """
  3332     displayer = cmdutil.show_changeset(ui, repo, opts)
  3443     displayer = cmdutil.show_changeset(ui, repo, opts)
  3333     displayer.show(repo[len(repo) - 1])
  3444     displayer.show(repo[len(repo) - 1])
  3334     displayer.close()
  3445     displayer.close()
  3335 
  3446 
  3336 def unbundle(ui, repo, fname1, *fnames, **opts):
  3447 def unbundle(ui, repo, fname1, *fnames, **opts):
  3337     """apply one or more changegroup files
  3448     """apply one or more changegroup files
  3338 
  3449 
  3339     Apply one or more compressed changegroup files generated by the
  3450     Apply one or more compressed changegroup files generated by the
  3340     bundle command.
  3451     bundle command.
       
  3452 
       
  3453     Returns 0 on success, 1 if an update has unresolved files.
  3341     """
  3454     """
  3342     fnames = (fname1,) + fnames
  3455     fnames = (fname1,) + fnames
  3343 
  3456 
  3344     lock = repo.lock()
  3457     lock = repo.lock()
  3345     try:
  3458     try:
  3384     :hg:`clone -U`).
  3497     :hg:`clone -U`).
  3385 
  3498 
  3386     If you want to update just one file to an older changeset, use :hg:`revert`.
  3499     If you want to update just one file to an older changeset, use :hg:`revert`.
  3387 
  3500 
  3388     See :hg:`help dates` for a list of formats valid for -d/--date.
  3501     See :hg:`help dates` for a list of formats valid for -d/--date.
       
  3502 
       
  3503     Returns 0 on success, 1 if there are unresolved files.
  3389     """
  3504     """
  3390     if rev and node:
  3505     if rev and node:
  3391         raise util.Abort(_("please specify just one revision"))
  3506         raise util.Abort(_("please specify just one revision"))
  3392 
  3507 
  3393     if not rev:
  3508     if not rev:
  3419 
  3534 
  3420     This will perform an extensive check of the repository's
  3535     This will perform an extensive check of the repository's
  3421     integrity, validating the hashes and checksums of each entry in
  3536     integrity, validating the hashes and checksums of each entry in
  3422     the changelog, manifest, and tracked files, as well as the
  3537     the changelog, manifest, and tracked files, as well as the
  3423     integrity of their crosslinks and indices.
  3538     integrity of their crosslinks and indices.
       
  3539 
       
  3540     Returns 0 on success, 1 if errors are encountered.
  3424     """
  3541     """
  3425     return hg.verify(repo)
  3542     return hg.verify(repo)
  3426 
  3543 
  3427 def version_(ui):
  3544 def version_(ui):
  3428     """output version and copyright information"""
  3545     """output version and copyright information"""