mercurial/commands.py
changeset 1437 ea51d296085f
parent 1436 db6d7b4005ba
child 1439 65cbe22b03fa
equal deleted inserted replaced
1436:db6d7b4005ba 1437:ea51d296085f
   474                 ui.write("%s\n" % first)
   474                 ui.write("%s\n" % first)
   475 
   475 
   476 # Commands start here, listed alphabetically
   476 # Commands start here, listed alphabetically
   477 
   477 
   478 def add(ui, repo, *pats, **opts):
   478 def add(ui, repo, *pats, **opts):
   479     '''add the specified files on the next commit'''
   479     """add the specified files on the next commit
       
   480 
       
   481     Schedule files to be version controlled and added to the repository.
       
   482 
       
   483     The files will be added to the repository at the next commit.
       
   484 
       
   485     If no names are given, add all files in the current directory and
       
   486     its subdirectories.
       
   487     """
       
   488 
   480     names = []
   489     names = []
   481     for src, abs, rel, exact in walk(repo, pats, opts):
   490     for src, abs, rel, exact in walk(repo, pats, opts):
   482         if exact:
   491         if exact:
   483             if ui.verbose: ui.status(_('adding %s\n') % rel)
   492             if ui.verbose: ui.status(_('adding %s\n') % rel)
   484             names.append(abs)
   493             names.append(abs)
   486             ui.status(_('adding %s\n') % rel)
   495             ui.status(_('adding %s\n') % rel)
   487             names.append(abs)
   496             names.append(abs)
   488     repo.add(names)
   497     repo.add(names)
   489 
   498 
   490 def addremove(ui, repo, *pats, **opts):
   499 def addremove(ui, repo, *pats, **opts):
   491     """add all new files, delete all missing files"""
   500     """add all new files, delete all missing files
       
   501 
       
   502     Add all new files and remove all missing files from the repository.
       
   503 
       
   504     New files are ignored if they match any of the patterns in .hgignore. As
       
   505     with add, these changes take effect at the next commit.
       
   506     """
   492     add, remove = [], []
   507     add, remove = [], []
   493     for src, abs, rel, exact in walk(repo, pats, opts):
   508     for src, abs, rel, exact in walk(repo, pats, opts):
   494         if src == 'f' and repo.dirstate.state(abs) == '?':
   509         if src == 'f' and repo.dirstate.state(abs) == '?':
   495             add.append(abs)
   510             add.append(abs)
   496             if ui.verbose or not exact:
   511             if ui.verbose or not exact:
   501                 ui.status(_('removing %s\n') % rel)
   516                 ui.status(_('removing %s\n') % rel)
   502     repo.add(add)
   517     repo.add(add)
   503     repo.remove(remove)
   518     repo.remove(remove)
   504 
   519 
   505 def annotate(ui, repo, *pats, **opts):
   520 def annotate(ui, repo, *pats, **opts):
   506     """show changeset information per file line"""
   521     """show changeset information per file line
       
   522 
       
   523     List changes in files, showing the revision id responsible for each line
       
   524 
       
   525     This command is useful to discover who did a change or when a change took
       
   526     place.
       
   527 
       
   528     Without the -a option, annotate will avoid processing files it
       
   529     detects as binary. With -a, annotate will generate an annotation
       
   530     anyway, probably with undesirable results.
       
   531     """
   507     def getnode(rev):
   532     def getnode(rev):
   508         return short(repo.changelog.node(rev))
   533         return short(repo.changelog.node(rev))
   509 
   534 
   510     ucache = {}
   535     ucache = {}
   511     def getname(rev):
   536     def getname(rev):
   549         if pieces:
   574         if pieces:
   550             for p, l in zip(zip(*pieces), lines):
   575             for p, l in zip(zip(*pieces), lines):
   551                 ui.write("%s: %s" % (" ".join(p), l[1]))
   576                 ui.write("%s: %s" % (" ".join(p), l[1]))
   552 
   577 
   553 def bundle(ui, repo, fname, dest="default-push", **opts):
   578 def bundle(ui, repo, fname, dest="default-push", **opts):
   554     """create a changegroup file"""
   579     """create a changegroup file
       
   580 
       
   581     Generate a compressed changegroup file collecting all changesets
       
   582     not found in the other repository.
       
   583 
       
   584     This file can then be transferred using conventional means and
       
   585     applied to another repository with the unbundle command. This is
       
   586     useful when native push and pull are not available or when
       
   587     exporting an entire repository is undesirable. The standard file
       
   588     extension is ".hg".
       
   589 
       
   590     Unlike import/export, this exactly preserves all changeset
       
   591     contents including permissions, rename data, and revision history.
       
   592     """
   555     f = open(fname, "wb")
   593     f = open(fname, "wb")
   556     dest = ui.expandpath(dest)
   594     dest = ui.expandpath(dest)
   557     other = hg.repository(ui, dest)
   595     other = hg.repository(ui, dest)
   558     o = repo.findoutgoing(other)
   596     o = repo.findoutgoing(other)
   559     cg = repo.changegroup(o)
   597     cg = repo.changegroup(o)
   570     except:
   608     except:
   571         os.unlink(fname)
   609         os.unlink(fname)
   572         raise
   610         raise
   573 
   611 
   574 def cat(ui, repo, file1, *pats, **opts):
   612 def cat(ui, repo, file1, *pats, **opts):
   575     """output the latest or given revisions of files"""
   613     """output the latest or given revisions of files
       
   614 
       
   615     Print the specified files as they were at the given revision.
       
   616     If no revision is given then the tip is used.
       
   617 
       
   618     Output may be to a file, in which case the name of the file is
       
   619     given using a format string.  The formatting rules are the same as
       
   620     for the export command, with the following additions:
       
   621 
       
   622     %s   basename of file being printed
       
   623     %d   dirname of file being printed, or '.' if in repo root
       
   624     %p   root-relative path name of file being printed
       
   625     """
   576     mf = {}
   626     mf = {}
   577     if opts['rev']:
   627     if opts['rev']:
   578         change = repo.changelog.read(repo.lookup(opts['rev']))
   628         change = repo.changelog.read(repo.lookup(opts['rev']))
   579         mf = repo.manifest.read(change[0])
   629         mf = repo.manifest.read(change[0])
   580     for src, abs, rel, exact in walk(repo, (file1,) + pats, opts):
   630     for src, abs, rel, exact in walk(repo, (file1,) + pats, opts):
   591             n = r.tip()
   641             n = r.tip()
   592         fp = make_file(repo, r, opts['output'], node=n, pathname=abs)
   642         fp = make_file(repo, r, opts['output'], node=n, pathname=abs)
   593         fp.write(r.read(n))
   643         fp.write(r.read(n))
   594 
   644 
   595 def clone(ui, source, dest=None, **opts):
   645 def clone(ui, source, dest=None, **opts):
   596     """make a copy of an existing repository"""
   646     """make a copy of an existing repository
       
   647 
       
   648     Create a copy of an existing repository in a new directory.
       
   649 
       
   650     If no destination directory name is specified, it defaults to the
       
   651     basename of the source.
       
   652 
       
   653     The location of the source is added to the new repository's
       
   654     .hg/hgrc file, as the default to be used for future pulls.
       
   655 
       
   656     For efficiency, hardlinks are used for cloning whenever the source
       
   657     and destination are on the same filesystem.  Some filesystems,
       
   658     such as AFS, implement hardlinking incorrectly, but do not report
       
   659     errors.  In these cases, use the --pull option to avoid
       
   660     hardlinking.
       
   661     """
   597     if dest is None:
   662     if dest is None:
   598         dest = os.path.basename(os.path.normpath(source))
   663         dest = os.path.basename(os.path.normpath(source))
   599 
   664 
   600     if os.path.exists(dest):
   665     if os.path.exists(dest):
   601         raise util.Abort(_("destination '%s' already exists"), dest)
   666         raise util.Abort(_("destination '%s' already exists"), dest)
   666         update(ui, repo)
   731         update(ui, repo)
   667 
   732 
   668     d.close()
   733     d.close()
   669 
   734 
   670 def commit(ui, repo, *pats, **opts):
   735 def commit(ui, repo, *pats, **opts):
   671     """commit the specified files or all outstanding changes"""
   736     """commit the specified files or all outstanding changes
       
   737 
       
   738     Commit changes to the given files into the repository.
       
   739 
       
   740     If a list of files is omitted, all changes reported by "hg status"
       
   741     from the root of the repository will be commited.
       
   742 
       
   743     The HGEDITOR or EDITOR environment variables are used to start an
       
   744     editor to add a commit comment.
       
   745     """
   672     if opts['text']:
   746     if opts['text']:
   673         ui.warn(_("Warning: -t and --text is deprecated,"
   747         ui.warn(_("Warning: -t and --text is deprecated,"
   674                   " please use -m or --message instead.\n"))
   748                   " please use -m or --message instead.\n"))
   675     message = opts['message'] or opts['text']
   749     message = opts['message'] or opts['text']
   676     logfile = opts['logfile']
   750     logfile = opts['logfile']
   784     if errs:
   858     if errs:
   785         ui.warn(_('(consider using --after)\n'))
   859         ui.warn(_('(consider using --after)\n'))
   786     return errs, copied
   860     return errs, copied
   787 
   861 
   788 def copy(ui, repo, *pats, **opts):
   862 def copy(ui, repo, *pats, **opts):
   789     """mark files as copied for the next commit"""
   863     """mark files as copied for the next commit
       
   864 
       
   865     Mark dest as having copies of source files.  If dest is a
       
   866     directory, copies are put in that directory.  If dest is a file,
       
   867     there can only be one source.
       
   868 
       
   869     By default, this command copies the contents of files as they
       
   870     stand in the working directory.  If invoked with --after, the
       
   871     operation is recorded, but no copying is performed.
       
   872 
       
   873     This command takes effect in the next commit.
       
   874 
       
   875     NOTE: This command should be treated as experimental. While it
       
   876     should properly record copied files, this information is not yet
       
   877     fully used by merge, nor fully reported by log.
       
   878     """
   790     errs, copied = docopy(ui, repo, pats, opts)
   879     errs, copied = docopy(ui, repo, pats, opts)
   791     return errs
   880     return errs
   792 
   881 
   793 def debugancestor(ui, index, rev1, rev2):
   882 def debugancestor(ui, index, rev1, rev2):
   794     """find the ancestor revision of two revisions in a given index"""
   883     """find the ancestor revision of two revisions in a given index"""
   925     for src, abs, rel, exact in items:
  1014     for src, abs, rel, exact in items:
   926         line = fmt % (src, abs, rel, exact and 'exact' or '')
  1015         line = fmt % (src, abs, rel, exact and 'exact' or '')
   927         ui.write("%s\n" % line.rstrip())
  1016         ui.write("%s\n" % line.rstrip())
   928 
  1017 
   929 def diff(ui, repo, *pats, **opts):
  1018 def diff(ui, repo, *pats, **opts):
   930     """diff working directory (or selected files)"""
  1019     """diff working directory (or selected files)
       
  1020 
       
  1021     Show differences between revisions for the specified files.
       
  1022 
       
  1023     Differences between files are shown using the unified diff format.
       
  1024 
       
  1025     When two revision arguments are given, then changes are shown
       
  1026     between those revisions. If only one revision is specified then
       
  1027     that revision is compared to the working directory, and, when no
       
  1028     revisions are specified, the working directory files are compared
       
  1029     to its parent.
       
  1030 
       
  1031     Without the -a option, diff will avoid generating diffs of files
       
  1032     it detects as binary. With -a, diff will generate a diff anyway,
       
  1033     probably with undesirable results.
       
  1034     """
   931     node1, node2 = None, None
  1035     node1, node2 = None, None
   932     revs = [repo.lookup(x) for x in opts['rev']]
  1036     revs = [repo.lookup(x) for x in opts['rev']]
   933 
  1037 
   934     if len(revs) > 0:
  1038     if len(revs) > 0:
   935         node1 = revs[0]
  1039         node1 = revs[0]
   966     dodiff(fp, ui, repo, prev, node, text=opts['text'])
  1070     dodiff(fp, ui, repo, prev, node, text=opts['text'])
   967     if fp != sys.stdout:
  1071     if fp != sys.stdout:
   968         fp.close()
  1072         fp.close()
   969 
  1073 
   970 def export(ui, repo, *changesets, **opts):
  1074 def export(ui, repo, *changesets, **opts):
   971     """dump the header and diffs for one or more changesets"""
  1075     """dump the header and diffs for one or more changesets
       
  1076 
       
  1077     Print the changeset header and diffs for one or more revisions.
       
  1078 
       
  1079     The information shown in the changeset header is: author,
       
  1080     changeset hash, parent and commit comment.
       
  1081 
       
  1082     Output may be to a file, in which case the name of the file is
       
  1083     given using a format string.  The formatting rules are as follows:
       
  1084 
       
  1085     %%   literal "%" character
       
  1086     %H   changeset hash (40 bytes of hexadecimal)
       
  1087     %N   number of patches being generated
       
  1088     %R   changeset revision number
       
  1089     %b   basename of the exporting repository
       
  1090     %h   short-form changeset hash (12 bytes of hexadecimal)
       
  1091     %n   zero-padded sequence number, starting at 1
       
  1092     %r   zero-padded changeset revision number
       
  1093 
       
  1094     Without the -a option, export will avoid generating diffs of files
       
  1095     it detects as binary. With -a, export will generate a diff anyway,
       
  1096     probably with undesirable results.
       
  1097     """
   972     if not changesets:
  1098     if not changesets:
   973         raise util.Abort(_("export requires at least one changeset"))
  1099         raise util.Abort(_("export requires at least one changeset"))
   974     seqno = 0
  1100     seqno = 0
   975     revs = list(revrange(ui, repo, changesets))
  1101     revs = list(revrange(ui, repo, changesets))
   976     total = len(revs)
  1102     total = len(revs)
   979     for cset in revs:
  1105     for cset in revs:
   980         seqno += 1
  1106         seqno += 1
   981         doexport(ui, repo, cset, seqno, total, revwidth, opts)
  1107         doexport(ui, repo, cset, seqno, total, revwidth, opts)
   982 
  1108 
   983 def forget(ui, repo, *pats, **opts):
  1109 def forget(ui, repo, *pats, **opts):
   984     """don't add the specified files on the next commit"""
  1110     """don't add the specified files on the next commit
       
  1111 
       
  1112     Undo an 'hg add' scheduled for the next commit.
       
  1113     """
   985     forget = []
  1114     forget = []
   986     for src, abs, rel, exact in walk(repo, pats, opts):
  1115     for src, abs, rel, exact in walk(repo, pats, opts):
   987         if repo.dirstate.state(abs) == 'a':
  1116         if repo.dirstate.state(abs) == 'a':
   988             forget.append(abs)
  1117             forget.append(abs)
   989             if ui.verbose or not exact:
  1118             if ui.verbose or not exact:
   990                 ui.status(_('forgetting %s\n') % rel)
  1119                 ui.status(_('forgetting %s\n') % rel)
   991     repo.forget(forget)
  1120     repo.forget(forget)
   992 
  1121 
   993 def grep(ui, repo, pattern, *pats, **opts):
  1122 def grep(ui, repo, pattern, *pats, **opts):
   994     """search for a pattern in specified files and revisions"""
  1123     """search for a pattern in specified files and revisions
       
  1124 
       
  1125     Search revisions of files for a regular expression.
       
  1126 
       
  1127     This command behaves differently than Unix grep.  It only accepts
       
  1128     Python/Perl regexps.  It searches repository history, not the
       
  1129     working directory.  It always prints the revision number in which
       
  1130     a match appears.
       
  1131 
       
  1132     By default, grep only prints output for the first revision of a
       
  1133     file in which it finds a match.  To get it to print every revision
       
  1134     that contains a change in match status ("-" for a match that
       
  1135     becomes a non-match, or "+" for a non-match that becomes a match),
       
  1136     use the --all flag.
       
  1137     """
   995     reflags = 0
  1138     reflags = 0
   996     if opts['ignore_case']:
  1139     if opts['ignore_case']:
   997         reflags |= re.I
  1140         reflags |= re.I
   998     regexp = re.compile(pattern, reflags)
  1141     regexp = re.compile(pattern, reflags)
   999     sep, eol = ':', '\n'
  1142     sep, eol = ':', '\n'
  1108             if fn in skip: continue
  1251             if fn in skip: continue
  1109             display(fn, rev, {}, state)
  1252             display(fn, rev, {}, state)
  1110     return (count == 0 and 1) or 0
  1253     return (count == 0 and 1) or 0
  1111 
  1254 
  1112 def heads(ui, repo, **opts):
  1255 def heads(ui, repo, **opts):
  1113     """show current repository heads"""
  1256     """show current repository heads
       
  1257 
       
  1258     Show all repository head changesets.
       
  1259 
       
  1260     Repository "heads" are changesets that don't have children
       
  1261     changesets. They are where development generally takes place and
       
  1262     are the usual targets for update and merge operations.
       
  1263     """
  1114     heads = repo.changelog.heads()
  1264     heads = repo.changelog.heads()
  1115     br = None
  1265     br = None
  1116     if opts['branches']:
  1266     if opts['branches']:
  1117         br = repo.branchlookup(heads)
  1267         br = repo.branchlookup(heads)
  1118     for n in repo.changelog.heads():
  1268     for n in repo.changelog.heads():
  1119         show_changeset(ui, repo, changenode=n, brinfo=br)
  1269         show_changeset(ui, repo, changenode=n, brinfo=br)
  1120 
  1270 
  1121 def identify(ui, repo):
  1271 def identify(ui, repo):
  1122     """print information about the working copy"""
  1272     """print information about the working copy
       
  1273     Print a short summary of the current state of the repo.
       
  1274 
       
  1275     This summary identifies the repository state using one or two parent
       
  1276     hash identifiers, followed by a "+" if there are uncommitted changes
       
  1277     in the working directory, followed by a list of tags for this revision.
       
  1278     """
  1123     parents = [p for p in repo.dirstate.parents() if p != nullid]
  1279     parents = [p for p in repo.dirstate.parents() if p != nullid]
  1124     if not parents:
  1280     if not parents:
  1125         ui.write(_("unknown\n"))
  1281         ui.write(_("unknown\n"))
  1126         return
  1282         return
  1127 
  1283 
  1139             output.append(' + '.join(parenttags))
  1295             output.append(' + '.join(parenttags))
  1140 
  1296 
  1141     ui.write("%s\n" % ' '.join(output))
  1297     ui.write("%s\n" % ' '.join(output))
  1142 
  1298 
  1143 def import_(ui, repo, patch1, *patches, **opts):
  1299 def import_(ui, repo, patch1, *patches, **opts):
  1144     """import an ordered set of patches"""
  1300     """import an ordered set of patches
       
  1301 
       
  1302     Import a list of patches and commit them individually.
       
  1303 
       
  1304     If there are outstanding changes in the working directory, import
       
  1305     will abort unless given the -f flag.
       
  1306 
       
  1307     If a patch looks like a mail message (its first line starts with
       
  1308     "From " or looks like an RFC822 header), it will not be applied
       
  1309     unless the -f option is used.  The importer neither parses nor
       
  1310     discards mail headers, so use -f only to override the "mailness"
       
  1311     safety check, not to import a real mail message.
       
  1312     """
  1145     patches = (patch1,) + patches
  1313     patches = (patch1,) + patches
  1146 
  1314 
  1147     if not opts['force']:
  1315     if not opts['force']:
  1148         (c, a, d, u) = repo.changes()
  1316         (c, a, d, u) = repo.changes()
  1149         if c or a or d:
  1317         if c or a or d:
  1202         if len(files) > 0:
  1370         if len(files) > 0:
  1203             addremove(ui, repo, *files)
  1371             addremove(ui, repo, *files)
  1204         repo.commit(files, message, user)
  1372         repo.commit(files, message, user)
  1205 
  1373 
  1206 def incoming(ui, repo, source="default", **opts):
  1374 def incoming(ui, repo, source="default", **opts):
  1207     """show new changesets found in source"""
  1375     """show new changesets found in source
       
  1376 
       
  1377     Show new changesets found in the specified repo or the default
       
  1378     pull repo. These are the changesets that would be pulled if a pull
       
  1379     was requested.
       
  1380 
       
  1381     Currently only local repositories are supported.
       
  1382     """
  1208     source = ui.expandpath(source)
  1383     source = ui.expandpath(source)
  1209     other = hg.repository(ui, source)
  1384     other = hg.repository(ui, source)
  1210     if not other.local():
  1385     if not other.local():
  1211         raise util.Abort(_("incoming doesn't work for remote repositories yet"))
  1386         raise util.Abort(_("incoming doesn't work for remote repositories yet"))
  1212     o = repo.findincoming(other)
  1387     o = repo.findincoming(other)
  1222             prev = (parents and parents[0]) or nullid
  1397             prev = (parents and parents[0]) or nullid
  1223             dodiff(ui, ui, other, prev, n)
  1398             dodiff(ui, ui, other, prev, n)
  1224             ui.write("\n")
  1399             ui.write("\n")
  1225 
  1400 
  1226 def init(ui, dest="."):
  1401 def init(ui, dest="."):
  1227     """create a new repository in the given directory"""
  1402     """create a new repository in the given directory
       
  1403 
       
  1404     Initialize a new repository in the given directory.  If the given
       
  1405     directory does not exist, it is created.
       
  1406 
       
  1407     If no directory is given, the current directory is used.
       
  1408     """
  1228     if not os.path.exists(dest):
  1409     if not os.path.exists(dest):
  1229         os.mkdir(dest)
  1410         os.mkdir(dest)
  1230     hg.repository(ui, dest, create=1)
  1411     hg.repository(ui, dest, create=1)
  1231 
  1412 
  1232 def locate(ui, repo, *pats, **opts):
  1413 def locate(ui, repo, *pats, **opts):
  1233     """locate files matching specific patterns"""
  1414     """locate files matching specific patterns
       
  1415 
       
  1416     Print all files under Mercurial control whose names match the
       
  1417     given patterns.
       
  1418 
       
  1419     This command searches the current directory and its
       
  1420     subdirectories.  To search an entire repository, move to the root
       
  1421     of the repository.
       
  1422 
       
  1423     If no patterns are given to match, this command prints all file
       
  1424     names.
       
  1425 
       
  1426     If you want to feed the output of this command into the "xargs"
       
  1427     command, use the "-0" option to both this command and "xargs".
       
  1428     This will avoid the problem of "xargs" treating single filenames
       
  1429     that contain white space as multiple filenames.
       
  1430     """
  1234     end = opts['print0'] and '\0' or '\n'
  1431     end = opts['print0'] and '\0' or '\n'
  1235 
  1432 
  1236     for src, abs, rel, exact in walk(repo, pats, opts, '(?:.*/|)'):
  1433     for src, abs, rel, exact in walk(repo, pats, opts, '(?:.*/|)'):
  1237         if repo.dirstate.state(abs) == '?':
  1434         if repo.dirstate.state(abs) == '?':
  1238             continue
  1435             continue
  1240             ui.write(os.path.join(repo.root, abs), end)
  1437             ui.write(os.path.join(repo.root, abs), end)
  1241         else:
  1438         else:
  1242             ui.write(rel, end)
  1439             ui.write(rel, end)
  1243 
  1440 
  1244 def log(ui, repo, *pats, **opts):
  1441 def log(ui, repo, *pats, **opts):
  1245     """show revision history of entire repository or files"""
  1442     """show revision history of entire repository or files
       
  1443 
       
  1444     Print the revision history of the specified files or the entire project.
       
  1445 
       
  1446     By default this command outputs: changeset id and hash, tags,
       
  1447     parents, user, date and time, and a summary for each commit. The
       
  1448     -v switch adds some more detail, such as changed files, manifest
       
  1449     hashes or message signatures.
       
  1450     """
  1246     class dui:
  1451     class dui:
  1247         # Implement and delegate some ui protocol.  Save hunks of
  1452         # Implement and delegate some ui protocol.  Save hunks of
  1248         # output for later display in the desired order.
  1453         # output for later display in the desired order.
  1249         def __init__(self, ui):
  1454         def __init__(self, ui):
  1250             self.ui = ui
  1455             self.ui = ui
  1308         elif st == 'iter':
  1513         elif st == 'iter':
  1309             for args in du.hunk[rev]:
  1514             for args in du.hunk[rev]:
  1310                 ui.write(*args)
  1515                 ui.write(*args)
  1311 
  1516 
  1312 def manifest(ui, repo, rev=None):
  1517 def manifest(ui, repo, rev=None):
  1313     """output the latest or given revision of the project manifest"""
  1518     """output the latest or given revision of the project manifest
       
  1519 
       
  1520     Print a list of version controlled files for the given revision.
       
  1521 
       
  1522     The manifest is the list of files being version controlled. If no revision
       
  1523     is given then the tip is used.
       
  1524     """
  1314     if rev:
  1525     if rev:
  1315         try:
  1526         try:
  1316             # assume all revision numbers are for changesets
  1527             # assume all revision numbers are for changesets
  1317             n = repo.lookup(rev)
  1528             n = repo.lookup(rev)
  1318             change = repo.changelog.read(n)
  1529             change = repo.changelog.read(n)
  1328 
  1539 
  1329     for f in files:
  1540     for f in files:
  1330         ui.write("%40s %3s %s\n" % (hex(m[f]), mf[f] and "755" or "644", f))
  1541         ui.write("%40s %3s %s\n" % (hex(m[f]), mf[f] and "755" or "644", f))
  1331 
  1542 
  1332 def outgoing(ui, repo, dest="default-push", **opts):
  1543 def outgoing(ui, repo, dest="default-push", **opts):
  1333     """show changesets not found in destination"""
  1544     """show changesets not found in destination
       
  1545 
       
  1546     Show changesets not found in the specified destination repo or the
       
  1547     default push repo. These are the changesets that would be pushed
       
  1548     if a push was requested.
       
  1549     """
  1334     dest = ui.expandpath(dest)
  1550     dest = ui.expandpath(dest)
  1335     other = hg.repository(ui, dest)
  1551     other = hg.repository(ui, dest)
  1336     o = repo.findoutgoing(other)
  1552     o = repo.findoutgoing(other)
  1337     o = repo.newer(o)
  1553     o = repo.newer(o)
  1338     for n in o:
  1554     for n in o:
  1344             prev = (parents and parents[0]) or nullid
  1560             prev = (parents and parents[0]) or nullid
  1345             dodiff(ui, ui, repo, prev, n)
  1561             dodiff(ui, ui, repo, prev, n)
  1346             ui.write("\n")
  1562             ui.write("\n")
  1347 
  1563 
  1348 def parents(ui, repo, rev=None):
  1564 def parents(ui, repo, rev=None):
  1349     """show the parents of the working dir or revision"""
  1565     """show the parents of the working dir or revision
       
  1566 
       
  1567     Print the working directory's parent revisions.
       
  1568     """
  1350     if rev:
  1569     if rev:
  1351         p = repo.changelog.parents(repo.lookup(rev))
  1570         p = repo.changelog.parents(repo.lookup(rev))
  1352     else:
  1571     else:
  1353         p = repo.dirstate.parents()
  1572         p = repo.dirstate.parents()
  1354 
  1573 
  1355     for n in p:
  1574     for n in p:
  1356         if n != nullid:
  1575         if n != nullid:
  1357             show_changeset(ui, repo, changenode=n)
  1576             show_changeset(ui, repo, changenode=n)
  1358 
  1577 
  1359 def paths(ui, search=None):
  1578 def paths(ui, search=None):
  1360     """show definition of symbolic path names"""
  1579     """show definition of symbolic path names
       
  1580 
       
  1581     Show definition of symbolic path name NAME. If no name is given, show
       
  1582     definition of available names.
       
  1583 
       
  1584     Path names are defined in the [paths] section of /etc/mercurial/hgrc
       
  1585     and $HOME/.hgrc.  If run inside a repository, .hg/hgrc is used, too.
       
  1586     """
  1361     try:
  1587     try:
  1362         repo = hg.repository(ui=ui)
  1588         repo = hg.repository(ui=ui)
  1363     except hg.RepoError:
  1589     except hg.RepoError:
  1364         pass
  1590         pass
  1365 
  1591 
  1373     else:
  1599     else:
  1374         for name, path in ui.configitems("paths"):
  1600         for name, path in ui.configitems("paths"):
  1375             ui.write("%s = %s\n" % (name, path))
  1601             ui.write("%s = %s\n" % (name, path))
  1376 
  1602 
  1377 def pull(ui, repo, source="default", **opts):
  1603 def pull(ui, repo, source="default", **opts):
  1378     """pull changes from the specified source"""
  1604     """pull changes from the specified source
       
  1605 
       
  1606     Pull changes from a remote repository to a local one.
       
  1607 
       
  1608     This finds all changes from the repository at the specified path
       
  1609     or URL and adds them to the local repository. By default, this
       
  1610     does not update the copy of the project in the working directory.
       
  1611 
       
  1612     Valid URLs are of the form:
       
  1613 
       
  1614       local/filesystem/path
       
  1615       http://[user@]host[:port][/path]
       
  1616       https://[user@]host[:port][/path]
       
  1617       ssh://[user@]host[:port][/path]
       
  1618 
       
  1619     SSH requires an accessible shell account on the destination machine
       
  1620     and a copy of hg in the remote path.  With SSH, paths are relative
       
  1621     to the remote user's home directory by default; use two slashes at
       
  1622     the start of a path to specify it as relative to the filesystem root.
       
  1623     """
  1379     source = ui.expandpath(source)
  1624     source = ui.expandpath(source)
  1380     ui.status(_('pulling from %s\n') % (source))
  1625     ui.status(_('pulling from %s\n') % (source))
  1381 
  1626 
  1382     if opts['ssh']:
  1627     if opts['ssh']:
  1383         ui.setconfig("ui", "ssh", opts['ssh'])
  1628         ui.setconfig("ui", "ssh", opts['ssh'])
  1393             ui.status(_("(run 'hg update' to get a working copy)\n"))
  1638             ui.status(_("(run 'hg update' to get a working copy)\n"))
  1394 
  1639 
  1395     return r
  1640     return r
  1396 
  1641 
  1397 def push(ui, repo, dest="default-push", force=False, ssh=None, remotecmd=None):
  1642 def push(ui, repo, dest="default-push", force=False, ssh=None, remotecmd=None):
  1398     """push changes to the specified destination"""
  1643     """push changes to the specified destination
       
  1644 
       
  1645     Push changes from the local repository to the given destination.
       
  1646 
       
  1647     This is the symmetrical operation for pull. It helps to move
       
  1648     changes from the current repository to a different one. If the
       
  1649     destination is local this is identical to a pull in that directory
       
  1650     from the current one.
       
  1651 
       
  1652     By default, push will refuse to run if it detects the result would
       
  1653     increase the number of remote heads. This generally indicates the
       
  1654     the client has forgotten to sync and merge before pushing.
       
  1655 
       
  1656     Valid URLs are of the form:
       
  1657 
       
  1658       local/filesystem/path
       
  1659       ssh://[user@]host[:port][/path]
       
  1660 
       
  1661     SSH requires an accessible shell account on the destination
       
  1662     machine and a copy of hg in the remote path.
       
  1663     """
  1399     dest = ui.expandpath(dest)
  1664     dest = ui.expandpath(dest)
  1400     ui.status('pushing to %s\n' % (dest))
  1665     ui.status('pushing to %s\n' % (dest))
  1401 
  1666 
  1402     if ssh:
  1667     if ssh:
  1403         ui.setconfig("ui", "ssh", ssh)
  1668         ui.setconfig("ui", "ssh", ssh)
  1407     other = hg.repository(ui, dest)
  1672     other = hg.repository(ui, dest)
  1408     r = repo.push(other, force)
  1673     r = repo.push(other, force)
  1409     return r
  1674     return r
  1410 
  1675 
  1411 def rawcommit(ui, repo, *flist, **rc):
  1676 def rawcommit(ui, repo, *flist, **rc):
  1412     "raw commit interface"
  1677     """raw commit interface
       
  1678 
       
  1679     Lowlevel commit, for use in helper scripts.
       
  1680 
       
  1681     This command is not intended to be used by normal users, as it is
       
  1682     primarily useful for importing from other SCMs.
       
  1683     """
  1413     if rc['text']:
  1684     if rc['text']:
  1414         ui.warn(_("Warning: -t and --text is deprecated,"
  1685         ui.warn(_("Warning: -t and --text is deprecated,"
  1415                   " please use -m or --message instead.\n"))
  1686                   " please use -m or --message instead.\n"))
  1416     message = rc['message'] or rc['text']
  1687     message = rc['message'] or rc['text']
  1417     if not message and rc['logfile']:
  1688     if not message and rc['logfile']:
  1432         repo.rawcommit(files, message, rc['user'], rc['date'], *rc['parent'])
  1703         repo.rawcommit(files, message, rc['user'], rc['date'], *rc['parent'])
  1433     except ValueError, inst:
  1704     except ValueError, inst:
  1434         raise util.Abort(str(inst))
  1705         raise util.Abort(str(inst))
  1435 
  1706 
  1436 def recover(ui, repo):
  1707 def recover(ui, repo):
  1437     """roll back an interrupted transaction"""
  1708     """roll back an interrupted transaction
       
  1709 
       
  1710     Recover from an interrupted commit or pull.
       
  1711 
       
  1712     This command tries to fix the repository status after an interrupted
       
  1713     operation. It should only be necessary when Mercurial suggests it.
       
  1714     """
  1438     repo.recover()
  1715     repo.recover()
  1439 
  1716 
  1440 def remove(ui, repo, pat, *pats, **opts):
  1717 def remove(ui, repo, pat, *pats, **opts):
  1441     """remove the specified files on the next commit"""
  1718     """remove the specified files on the next commit
       
  1719 
       
  1720     Schedule the indicated files for removal from the repository.
       
  1721 
       
  1722     This command schedules the files to be removed at the next commit.
       
  1723     This only removes files from the current branch, not from the
       
  1724     entire project history.  If the files still exist in the working
       
  1725     directory, they will be deleted from it.
       
  1726     """
  1442     names = []
  1727     names = []
  1443     def okaytoremove(abs, rel, exact):
  1728     def okaytoremove(abs, rel, exact):
  1444         c, a, d, u = repo.changes(files = [abs])
  1729         c, a, d, u = repo.changes(files = [abs])
  1445         reason = None
  1730         reason = None
  1446         if c: reason = _('is modified')
  1731         if c: reason = _('is modified')
  1455             if ui.verbose or not exact: ui.status(_('removing %s\n') % rel)
  1740             if ui.verbose or not exact: ui.status(_('removing %s\n') % rel)
  1456             names.append(abs)
  1741             names.append(abs)
  1457     repo.remove(names, unlink=True)
  1742     repo.remove(names, unlink=True)
  1458 
  1743 
  1459 def rename(ui, repo, *pats, **opts):
  1744 def rename(ui, repo, *pats, **opts):
  1460     """rename files; equivalent of copy + remove"""
  1745     """rename files; equivalent of copy + remove
       
  1746 
       
  1747     Mark dest as copies of sources; mark sources for deletion.  If
       
  1748     dest is a directory, copies are put in that directory.  If dest is
       
  1749     a file, there can only be one source.
       
  1750 
       
  1751     By default, this command copies the contents of files as they
       
  1752     stand in the working directory.  If invoked with --after, the
       
  1753     operation is recorded, but no copying is performed.
       
  1754 
       
  1755     This command takes effect in the next commit.
       
  1756 
       
  1757     NOTE: This command should be treated as experimental. While it
       
  1758     should properly record rename files, this information is not yet
       
  1759     fully used by merge, nor fully reported by log.
       
  1760     """
  1461     errs, copied = docopy(ui, repo, pats, opts)
  1761     errs, copied = docopy(ui, repo, pats, opts)
  1462     names = []
  1762     names = []
  1463     for abs, rel, exact in copied:
  1763     for abs, rel, exact in copied:
  1464         if ui.verbose or not exact: ui.status(_('removing %s\n') % rel)
  1764         if ui.verbose or not exact: ui.status(_('removing %s\n') % rel)
  1465         names.append(abs)
  1765         names.append(abs)
  1466     repo.remove(names, unlink=True)
  1766     repo.remove(names, unlink=True)
  1467     return errs
  1767     return errs
  1468 
  1768 
  1469 def revert(ui, repo, *names, **opts):
  1769 def revert(ui, repo, *names, **opts):
  1470     """revert modified files or dirs back to their unmodified states"""
  1770     """revert modified files or dirs back to their unmodified states
       
  1771 
       
  1772     Revert any uncommitted modifications made to the named files or
       
  1773     directories.  This restores the contents of the affected files to
       
  1774     an unmodified state.
       
  1775 
       
  1776     If a file has been deleted, it is recreated.  If the executable
       
  1777     mode of a file was changed, it is reset.
       
  1778 
       
  1779     If a directory is given, all files in that directory and its
       
  1780     subdirectories are reverted.
       
  1781 
       
  1782     If no arguments are given, all files in the current directory and
       
  1783     its subdirectories are reverted.
       
  1784     """
  1471     node = opts['rev'] and repo.lookup(opts['rev']) or \
  1785     node = opts['rev'] and repo.lookup(opts['rev']) or \
  1472            repo.dirstate.parents()[0]
  1786            repo.dirstate.parents()[0]
  1473     root = os.path.realpath(repo.root)
  1787     root = os.path.realpath(repo.root)
  1474 
  1788 
  1475     def trimpath(p):
  1789     def trimpath(p):
  1513             r = 1
  1827             r = 1
  1514     sys.stdout.flush()
  1828     sys.stdout.flush()
  1515     return r
  1829     return r
  1516 
  1830 
  1517 def root(ui, repo):
  1831 def root(ui, repo):
  1518     """print the root (top) of the current working dir"""
  1832     """print the root (top) of the current working dir
       
  1833 
       
  1834     Print the root directory of the current repository.
       
  1835     """
  1519     ui.write(repo.root + "\n")
  1836     ui.write(repo.root + "\n")
  1520 
  1837 
  1521 def serve(ui, repo, **opts):
  1838 def serve(ui, repo, **opts):
  1522     """export the repository via HTTP"""
  1839     """export the repository via HTTP
       
  1840 
       
  1841     Start a local HTTP repository browser and pull server.
       
  1842 
       
  1843     By default, the server logs accesses to stdout and errors to
       
  1844     stderr.  Use the "-A" and "-E" options to log to files.
       
  1845     """
  1523 
  1846 
  1524     if opts["stdio"]:
  1847     if opts["stdio"]:
  1525         fin, fout = sys.stdin, sys.stdout
  1848         fin, fout = sys.stdin, sys.stdout
  1526         sys.stdout = sys.stderr
  1849         sys.stdout = sys.stderr
  1527 
  1850 
  1617         else:
  1940         else:
  1618             ui.status(_('listening at http://%s/\n') % addr)
  1941             ui.status(_('listening at http://%s/\n') % addr)
  1619     httpd.serve_forever()
  1942     httpd.serve_forever()
  1620 
  1943 
  1621 def status(ui, repo, *pats, **opts):
  1944 def status(ui, repo, *pats, **opts):
  1622     '''show changed files in the working directory
  1945     """show changed files in the working directory
  1623 
  1946 
       
  1947     Show changed files in the working directory.  If no names are
       
  1948     given, all files are shown.  Otherwise, only files matching the
       
  1949     given names are shown.
       
  1950 
       
  1951     The codes used to show the status of files are:
  1624     M = modified
  1952     M = modified
  1625     A = added
  1953     A = added
  1626     R = removed
  1954     R = removed
  1627     ? = not tracked
  1955     ? = not tracked
  1628     '''
  1956     """
  1629 
  1957 
  1630     cwd = repo.getcwd()
  1958     cwd = repo.getcwd()
  1631     files, matchfn, anypats = matchpats(repo, cwd, pats, opts)
  1959     files, matchfn, anypats = matchpats(repo, cwd, pats, opts)
  1632     (c, a, d, u) = [[util.pathto(cwd, x) for x in n]
  1960     (c, a, d, u) = [[util.pathto(cwd, x) for x in n]
  1633                     for n in repo.changes(files=files, match=matchfn)]
  1961                     for n in repo.changes(files=files, match=matchfn)]
  1648 
  1976 
  1649         for f in changes:
  1977         for f in changes:
  1650             ui.write(format % f)
  1978             ui.write(format % f)
  1651 
  1979 
  1652 def tag(ui, repo, name, rev=None, **opts):
  1980 def tag(ui, repo, name, rev=None, **opts):
  1653     """add a tag for the current tip or a given revision"""
  1981     """add a tag for the current tip or a given revision
       
  1982 
       
  1983     Name a particular revision using <name>.
       
  1984 
       
  1985     Tags are used to name particular revisions of the repository and are
       
  1986     very useful to compare different revision, to go back to significant
       
  1987     earlier versions or to mark branch points as releases, etc.
       
  1988 
       
  1989     If no revision is given, the tip is used.
       
  1990 
       
  1991     To facilitate version control, distribution, and merging of tags,
       
  1992     they are stored as a file named ".hgtags" which is managed
       
  1993     similarly to other project files and can be hand-edited if
       
  1994     necessary.
       
  1995     """
  1654     if opts['text']:
  1996     if opts['text']:
  1655         ui.warn(_("Warning: -t and --text is deprecated,"
  1997         ui.warn(_("Warning: -t and --text is deprecated,"
  1656                   " please use -m or --message instead.\n"))
  1998                   " please use -m or --message instead.\n"))
  1657     if name == "tip":
  1999     if name == "tip":
  1658         raise util.Abort(_("the name 'tip' is reserved"))
  2000         raise util.Abort(_("the name 'tip' is reserved"))
  1684         repo.commit([".hgtags"], message, opts['user'], opts['date'])
  2026         repo.commit([".hgtags"], message, opts['user'], opts['date'])
  1685     except ValueError, inst:
  2027     except ValueError, inst:
  1686         raise util.Abort(str(inst))
  2028         raise util.Abort(str(inst))
  1687 
  2029 
  1688 def tags(ui, repo):
  2030 def tags(ui, repo):
  1689     """list repository tags"""
  2031     """list repository tags
       
  2032 
       
  2033     List the repository tags.
       
  2034 
       
  2035     This lists both regular and local tags.
       
  2036     """
  1690 
  2037 
  1691     l = repo.tagslist()
  2038     l = repo.tagslist()
  1692     l.reverse()
  2039     l.reverse()
  1693     for t, n in l:
  2040     for t, n in l:
  1694         try:
  2041         try:
  1696         except KeyError:
  2043         except KeyError:
  1697             r = "    ?:?"
  2044             r = "    ?:?"
  1698         ui.write("%-30s %s\n" % (t, r))
  2045         ui.write("%-30s %s\n" % (t, r))
  1699 
  2046 
  1700 def tip(ui, repo):
  2047 def tip(ui, repo):
  1701     """show the tip revision"""
  2048     """show the tip revision
       
  2049 
       
  2050     Show the tip revision.
       
  2051     """
  1702     n = repo.changelog.tip()
  2052     n = repo.changelog.tip()
  1703     show_changeset(ui, repo, changenode=n)
  2053     show_changeset(ui, repo, changenode=n)
  1704 
  2054 
  1705 def unbundle(ui, repo, fname):
  2055 def unbundle(ui, repo, fname):
  1706     """apply a changegroup file"""
  2056     """apply a changegroup file
       
  2057 
       
  2058     Apply a compressed changegroup file generated by the bundle
       
  2059     command.
       
  2060     """
  1707     f = urllib.urlopen(fname)
  2061     f = urllib.urlopen(fname)
  1708 
  2062 
  1709     if f.read(4) != "HG10":
  2063     if f.read(4) != "HG10":
  1710         raise util.Abort(_("%s: not a Mercurial bundle file") % fname)
  2064         raise util.Abort(_("%s: not a Mercurial bundle file") % fname)
  1711 
  2065 
  1731     ineffective.
  2085     ineffective.
  1732     """
  2086     """
  1733     repo.undo()
  2087     repo.undo()
  1734 
  2088 
  1735 def update(ui, repo, node=None, merge=False, clean=False, branch=None):
  2089 def update(ui, repo, node=None, merge=False, clean=False, branch=None):
  1736     '''update or merge working directory
  2090     """update or merge working directory
       
  2091 
       
  2092     Update the working directory to the specified revision.
  1737 
  2093 
  1738     If there are no outstanding changes in the working directory and
  2094     If there are no outstanding changes in the working directory and
  1739     there is a linear relationship between the current version and the
  2095     there is a linear relationship between the current version and the
  1740     requested version, the result is the requested version.
  2096     requested version, the result is the requested version.
  1741 
  2097 
  1742     Otherwise the result is a merge between the contents of the
  2098     Otherwise the result is a merge between the contents of the
  1743     current working directory and the requested version. Files that
  2099     current working directory and the requested version. Files that
  1744     changed between either parent are marked as changed for the next
  2100     changed between either parent are marked as changed for the next
  1745     commit and a commit must be performed before any further updates
  2101     commit and a commit must be performed before any further updates
  1746     are allowed.
  2102     are allowed.
  1747     '''
  2103 
       
  2104     By default, update will refuse to run if doing so would require
       
  2105     merging or discarding local changes.
       
  2106     """
  1748     if branch:
  2107     if branch:
  1749         br = repo.branchlookup(branch=branch)
  2108         br = repo.branchlookup(branch=branch)
  1750         found = []
  2109         found = []
  1751         for x in br:
  2110         for x in br:
  1752             if branch in br[x]:
  2111             if branch in br[x]:
  1765     else:
  2124     else:
  1766         node = node and repo.lookup(node) or repo.changelog.tip()
  2125         node = node and repo.lookup(node) or repo.changelog.tip()
  1767     return repo.update(node, allow=merge, force=clean)
  2126     return repo.update(node, allow=merge, force=clean)
  1768 
  2127 
  1769 def verify(ui, repo):
  2128 def verify(ui, repo):
  1770     """verify the integrity of the repository"""
  2129     """verify the integrity of the repository
       
  2130 
       
  2131     Verify the integrity of the current repository.
       
  2132 
       
  2133     This will perform an extensive check of the repository's
       
  2134     integrity, validating the hashes and checksums of each entry in
       
  2135     the changelog, manifest, and tracked files, as well as the
       
  2136     integrity of their crosslinks and indices.
       
  2137     """
  1771     return repo.verify()
  2138     return repo.verify()
  1772 
  2139 
  1773 # Command options and aliases are listed here, alphabetically
  2140 # Command options and aliases are listed here, alphabetically
  1774 
  2141 
  1775 table = {
  2142 table = {
  1776     "^add":
  2143     "^add":
  1777         (add,
  2144         (add,
  1778          [('I', 'include', [], _('include path in search')),
  2145          [('I', 'include', [], _('include names matching the given patterns')),
  1779           ('X', 'exclude', [], _('exclude path from search'))],
  2146           ('X', 'exclude', [], _('exclude names matching the given patterns'))],
  1780          "hg add [OPTION]... [FILE]..."),
  2147          "hg add [OPTION]... [FILE]..."),
  1781     "addremove":
  2148     "addremove":
  1782         (addremove,
  2149         (addremove,
  1783          [('I', 'include', [], _('include path in search')),
  2150          [('I', 'include', [], _('include names matching the given patterns')),
  1784           ('X', 'exclude', [], _('exclude path from search'))],
  2151           ('X', 'exclude', [], _('exclude names matching the given patterns'))],
  1785          _("hg addremove [OPTION]... [FILE]...")),
  2152          "hg addremove [OPTION]... [FILE]..."),
  1786     "^annotate":
  2153     "^annotate":
  1787         (annotate,
  2154         (annotate,
  1788          [('r', 'rev', '', _('revision')),
  2155          [('r', 'rev', '', _('annotate the specified revision')),
  1789           ('a', 'text', None, _('treat all files as text')),
  2156           ('a', 'text', None, _('treat all files as text')),
  1790           ('u', 'user', None, _('show user')),
  2157           ('u', 'user', None, _('list the author')),
  1791           ('n', 'number', None, _('show revision number')),
  2158           ('n', 'number', None, _('list the revision number (default)')),
  1792           ('c', 'changeset', None, _('show changeset')),
  2159           ('c', 'changeset', None, _('list the changeset')),
  1793           ('I', 'include', [], _('include path in search')),
  2160           ('I', 'include', [], _('include names matching the given patterns')),
  1794           ('X', 'exclude', [], _('exclude path from search'))],
  2161           ('X', 'exclude', [], _('exclude names matching the given patterns'))],
  1795          _('hg annotate [OPTION]... FILE...')),
  2162          _('hg annotate [OPTION]... FILE...')),
  1796     "bundle":
  2163     "bundle":
  1797         (bundle,
  2164         (bundle,
  1798          [],
  2165          [],
  1799          _('hg bundle FILE DEST')),
  2166          _('hg bundle FILE DEST')),
  1800     "cat":
  2167     "cat":
  1801         (cat,
  2168         (cat,
  1802          [('I', 'include', [], _('include path in search')),
  2169          [('I', 'include', [], _('include names matching the given patterns')),
  1803           ('X', 'exclude', [], _('exclude path from search')),
  2170           ('X', 'exclude', [], _('exclude names matching the given patterns')),
  1804           ('o', 'output', "", _('output to file')),
  2171           ('o', 'output', "", _('print output to file with formatted name')),
  1805           ('r', 'rev', '', _('revision'))],
  2172           ('r', 'rev', '', _('print the given revision'))],
  1806          _('hg cat [OPTION]... FILE...')),
  2173          _('hg cat [OPTION]... FILE...')),
  1807     "^clone":
  2174     "^clone":
  1808         (clone,
  2175         (clone,
  1809          [('U', 'noupdate', None, _('skip update after cloning')),
  2176          [('U', 'noupdate', None, _('do not update the new working directory')),
  1810           ('e', 'ssh', "", _('ssh command')),
  2177           ('e', 'ssh', "", _('specify ssh command to use')),
  1811           ('', 'pull', None, _('use pull protocol to copy metadata')),
  2178           ('', 'pull', None, _('use pull protocol to copy metadata')),
  1812           ('', 'remotecmd', "", _('remote hg command'))],
  2179           ('', 'remotecmd', "", _('specify hg command to run on the remote side'))],
  1813          _('hg clone [OPTION]... SOURCE [DEST]')),
  2180          _('hg clone [OPTION]... SOURCE [DEST]')),
  1814     "^commit|ci":
  2181     "^commit|ci":
  1815         (commit,
  2182         (commit,
  1816          [('A', 'addremove', None, _('run add/remove during commit')),
  2183          [('A', 'addremove', None, _('run addremove during commit')),
  1817           ('I', 'include', [], _('include path in search')),
  2184           ('I', 'include', [], _('include names matching the given patterns')),
  1818           ('X', 'exclude', [], _('exclude path from search')),
  2185           ('X', 'exclude', [], _('exclude names matching the given patterns')),
  1819           ('m', 'message', "", _('commit message')),
  2186           ('m', 'message', "", _('use <text> as commit message')),
  1820           ('t', 'text', "", _('commit message (deprecated: use -m)')),
  2187           ('t', 'text', "", _('commit message (deprecated: use -m)')),
  1821           ('l', 'logfile', "", _('commit message file')),
  2188           ('l', 'logfile', "", _('read the commit message from <file>')),
  1822           ('d', 'date', "", _('date code')),
  2189           ('d', 'date', "", _('record datecode as commit date')),
  1823           ('u', 'user', "", _('user'))],
  2190           ('u', 'user', "", _('record user as commiter'))],
  1824          _('hg commit [OPTION]... [FILE]...')),
  2191          _('hg commit [OPTION]... [FILE]...')),
  1825     "copy|cp": (copy,
  2192     "copy|cp": (copy,
  1826              [('I', 'include', [], _('include path in search')),
  2193              [('I', 'include', [], _('include names matching the given patterns')),
  1827               ('X', 'exclude', [], _('exclude path from search')),
  2194               ('X', 'exclude', [], _('exclude names matching the given patterns')),
  1828               ('A', 'after', None, _('record a copy after it has happened')),
  2195               ('A', 'after', None, _('record a copy that has already occurred')),
  1829               ('f', 'force', None, _('replace destination if it exists')),
  2196               ('f', 'force', None, _('forcibly copy over an existing managed file')),
  1830               ('p', 'parents', None, _('append source path to dest'))],
  2197               ('p', 'parents', None, _('append source path to dest'))],
  1831              _('hg copy [OPTION]... [SOURCE]... DEST')),
  2198              _('hg copy [OPTION]... [SOURCE]... DEST')),
  1832     "debugancestor": (debugancestor, [], _('debugancestor INDEX REV1 REV2')),
  2199     "debugancestor": (debugancestor, [], _('debugancestor INDEX REV1 REV2')),
  1833     "debugcheckstate": (debugcheckstate, [], _('debugcheckstate')),
  2200     "debugcheckstate": (debugcheckstate, [], _('debugcheckstate')),
  1834     "debugconfig": (debugconfig, [], _('debugconfig')),
  2201     "debugconfig": (debugconfig, [], _('debugconfig')),
  1838     "debugindex": (debugindex, [], _('debugindex FILE')),
  2205     "debugindex": (debugindex, [], _('debugindex FILE')),
  1839     "debugindexdot": (debugindexdot, [], _('debugindexdot FILE')),
  2206     "debugindexdot": (debugindexdot, [], _('debugindexdot FILE')),
  1840     "debugrename": (debugrename, [], _('debugrename FILE [REV]')),
  2207     "debugrename": (debugrename, [], _('debugrename FILE [REV]')),
  1841     "debugwalk":
  2208     "debugwalk":
  1842         (debugwalk,
  2209         (debugwalk,
  1843          [('I', 'include', [], _('include path in search')),
  2210          [('I', 'include', [], _('include names matching the given patterns')),
  1844           ('X', 'exclude', [], _('exclude path from search'))],
  2211           ('X', 'exclude', [], _('exclude names matching the given patterns'))],
  1845          _('debugwalk [OPTION]... [FILE]...')),
  2212          _('debugwalk [OPTION]... [FILE]...')),
  1846     "^diff":
  2213     "^diff":
  1847         (diff,
  2214         (diff,
  1848          [('r', 'rev', [], _('revision')),
  2215          [('r', 'rev', [], _('revision')),
  1849           ('a', 'text', None, _('treat all files as text')),
  2216           ('a', 'text', None, _('treat all files as text')),
  1850           ('I', 'include', [], _('include path in search')),
  2217           ('I', 'include', [], _('include names matching the given patterns')),
  1851           ('X', 'exclude', [], _('exclude path from search'))],
  2218           ('X', 'exclude', [], _('exclude names matching the given patterns'))],
  1852          _('hg diff [-a] [-I] [-X] [-r REV1 [-r REV2]] [FILE]...')),
  2219          _('hg diff [-a] [-I] [-X] [-r REV1 [-r REV2]] [FILE]...')),
  1853     "^export":
  2220     "^export":
  1854         (export,
  2221         (export,
  1855          [('o', 'output', "", _('output to file')),
  2222          [('o', 'output', "", _('print output to file with formatted name')),
  1856           ('a', 'text', None, _('treat all files as text'))],
  2223           ('a', 'text', None, _('treat all files as text'))],
  1857          _("hg export [-a] [-o OUTFILE] REV...")),
  2224          "hg export [-a] [-o OUTFILE] REV..."),
  1858     "forget":
  2225     "forget":
  1859         (forget,
  2226         (forget,
  1860          [('I', 'include', [], _('include path in search')),
  2227          [('I', 'include', [], _('include names matching the given patterns')),
  1861           ('X', 'exclude', [], _('exclude path from search'))],
  2228           ('X', 'exclude', [], _('exclude names matching the given patterns'))],
  1862          _("hg forget [OPTION]... FILE...")),
  2229          "hg forget [OPTION]... FILE..."),
  1863     "grep":
  2230     "grep":
  1864         (grep,
  2231         (grep,
  1865          [('0', 'print0', None, _('end fields with NUL')),
  2232          [('0', 'print0', None, _('end fields with NUL')),
  1866           ('I', 'include', [], _('include path in search')),
  2233           ('I', 'include', [], _('include names matching the given patterns')),
  1867           ('X', 'exclude', [], _('include path in search')),
  2234           ('X', 'exclude', [], _('include names matching the given patterns')),
  1868           ('', 'all', None, _('print all revisions with matches')),
  2235           ('', 'all', None, _('print all revisions that match')),
  1869           ('i', 'ignore-case', None, _('ignore case when matching')),
  2236           ('i', 'ignore-case', None, _('ignore case when matching')),
  1870           ('l', 'files-with-matches', None, _('print names of files and revs with matches')),
  2237           ('l', 'files-with-matches', None, _('print only filenames and revs that match')),
  1871           ('n', 'line-number', None, _('print line numbers')),
  2238           ('n', 'line-number', None, _('print matching line numbers')),
  1872           ('r', 'rev', [], _('search in revision rev')),
  2239           ('r', 'rev', [], _('search in given revision range')),
  1873           ('u', 'user', None, _('print user who made change'))],
  2240           ('u', 'user', None, _('print user who committed change'))],
  1874          _("hg grep [OPTION]... PATTERN [FILE]...")),
  2241          "hg grep [OPTION]... PATTERN [FILE]..."),
  1875     "heads":
  2242     "heads":
  1876         (heads,
  2243         (heads,
  1877          [('b', 'branches', None, _('find branch info'))],
  2244          [('b', 'branches', None, _('find branch info'))],
  1878          _('hg heads [-b]')),
  2245          _('hg heads [-b]')),
  1879     "help": (help_, [], _('hg help [COMMAND]')),
  2246     "help": (help_, [], _('hg help [COMMAND]')),
  1880     "identify|id": (identify, [], _('hg identify')),
  2247     "identify|id": (identify, [], _('hg identify')),
  1881     "import|patch":
  2248     "import|patch":
  1882         (import_,
  2249         (import_,
  1883          [('p', 'strip', 1, _('path strip')),
  2250          [('p', 'strip', 1, _('directory strip option for patch. This has the same\n') +
  1884           ('f', 'force', None, _('skip check for outstanding changes')),
  2251                             _('meaning as the corresponding patch option')),
       
  2252           ('f', 'force', None, _('skip check for outstanding uncommitted changes')),
  1885           ('b', 'base', "", _('base path'))],
  2253           ('b', 'base', "", _('base path'))],
  1886          _("hg import [-f] [-p NUM] [-b BASE] PATCH...")),
  2254          "hg import [-f] [-p NUM] [-b BASE] PATCH..."),
  1887     "incoming|in": (incoming,
  2255     "incoming|in": (incoming,
  1888          [('M', 'no-merges', None, _("do not show merges")),
  2256          [('M', 'no-merges', None, _("do not show merges")),
  1889           ('p', 'patch', None, _('show patch'))],
  2257           ('p', 'patch', None, _('show patch'))],
  1890          _('hg incoming [-p] [SOURCE]')),
  2258          _('hg incoming [-p] [SOURCE]')),
  1891     "^init": (init, [], _('hg init [DEST]')),
  2259     "^init": (init, [], _('hg init [DEST]')),
  1892     "locate":
  2260     "locate":
  1893         (locate,
  2261         (locate,
  1894          [('r', 'rev', '', _('revision')),
  2262          [('r', 'rev', '', _('search the repository as it stood at rev')),
  1895           ('0', 'print0', None, _('end filenames with NUL')),
  2263           ('0', 'print0', None, _('end filenames with NUL, for use with xargs')),
  1896           ('f', 'fullpath', None, _('print complete paths')),
  2264           ('f', 'fullpath', None, _('print complete paths from the filesystem root')),
  1897           ('I', 'include', [], _('include path in search')),
  2265           ('I', 'include', [], _('include names matching the given patterns')),
  1898           ('X', 'exclude', [], _('exclude path from search'))],
  2266           ('X', 'exclude', [], _('exclude names matching the given patterns'))],
  1899          _('hg locate [OPTION]... [PATTERN]...')),
  2267          _('hg locate [OPTION]... [PATTERN]...')),
  1900     "^log|history":
  2268     "^log|history":
  1901         (log,
  2269         (log,
  1902          [('I', 'include', [], _('include path in search')),
  2270          [('I', 'include', [], _('include names matching the given patterns')),
  1903           ('X', 'exclude', [], _('exclude path from search')),
  2271           ('X', 'exclude', [], _('exclude names matching the given patterns')),
  1904           ('b', 'branch', None, _('show branches')),
  2272           ('b', 'branch', None, _('show branches')),
  1905           ('k', 'keyword', [], _('search for a keyword')),
  2273           ('k', 'keyword', [], _('search for a keyword')),
  1906           ('r', 'rev', [], _('revision')),
  2274           ('r', 'rev', [], _('show the specified revision or range')),
  1907           ('M', 'no-merges', None, _("do not show merges")),
  2275           ('M', 'no-merges', None, _("do not show merges")),
  1908           ('m', 'only-merges', None, _("show only merges")),
  2276           ('m', 'only-merges', None, _("show only merges")),
  1909           ('p', 'patch', None, _('show patch'))],
  2277           ('p', 'patch', None, _('show patch'))],
  1910          _('hg log [-I] [-X] [-r REV]... [-p] [FILE]')),
  2278          _('hg log [-I] [-X] [-r REV]... [-p] [FILE]')),
  1911     "manifest": (manifest, [], _('hg manifest [REV]')),
  2279     "manifest": (manifest, [], _('hg manifest [REV]')),
  1915          _('hg outgoing [-p] [DEST]')),
  2283          _('hg outgoing [-p] [DEST]')),
  1916     "parents": (parents, [], _('hg parents [REV]')),
  2284     "parents": (parents, [], _('hg parents [REV]')),
  1917     "paths": (paths, [], _('hg paths [NAME]')),
  2285     "paths": (paths, [], _('hg paths [NAME]')),
  1918     "^pull":
  2286     "^pull":
  1919         (pull,
  2287         (pull,
  1920          [('u', 'update', None, _('update working directory')),
  2288          [('u', 'update', None, _('update the working directory to tip after pull')),
  1921           ('e', 'ssh', "", _('ssh command')),
  2289           ('e', 'ssh', "", _('specify ssh command to use')),
  1922           ('', 'remotecmd', "", _('remote hg command'))],
  2290           ('', 'remotecmd', "", _('specify hg command to run on the remote side'))],
  1923          _('hg pull [-u] [-e FILE] [--remotecmd FILE] [SOURCE]')),
  2291          _('hg pull [-u] [-e FILE] [--remotecmd FILE] [SOURCE]')),
  1924     "^push":
  2292     "^push":
  1925         (push,
  2293         (push,
  1926          [('f', 'force', None, _('force push')),
  2294          [('f', 'force', None, _('force push')),
  1927           ('e', 'ssh', "", _('ssh command')),
  2295           ('e', 'ssh', "", _('specify ssh command to use')),
  1928           ('', 'remotecmd', "", _('remote hg command'))],
  2296           ('', 'remotecmd', "", _('specify hg command to run on the remote side'))],
  1929          _('hg push [-f] [-e FILE] [--remotecmd FILE] [DEST]')),
  2297          _('hg push [-f] [-e FILE] [--remotecmd FILE] [DEST]')),
  1930     "rawcommit":
  2298     "rawcommit":
  1931         (rawcommit,
  2299         (rawcommit,
  1932          [('p', 'parent', [], _('parent')),
  2300          [('p', 'parent', [], _('parent')),
  1933           ('d', 'date', "", _('date code')),
  2301           ('d', 'date', "", _('date code')),
  1937           ('t', 'text', "", _('commit message (deprecated: use -m)')),
  2305           ('t', 'text', "", _('commit message (deprecated: use -m)')),
  1938           ('l', 'logfile', "", _('commit message file'))],
  2306           ('l', 'logfile', "", _('commit message file'))],
  1939          _('hg rawcommit [OPTION]... [FILE]...')),
  2307          _('hg rawcommit [OPTION]... [FILE]...')),
  1940     "recover": (recover, [], _("hg recover")),
  2308     "recover": (recover, [], _("hg recover")),
  1941     "^remove|rm": (remove,
  2309     "^remove|rm": (remove,
  1942                    [('I', 'include', [], _('include path in search')),
  2310                    [('I', 'include', [], _('include names matching the given patterns')),
  1943                     ('X', 'exclude', [], _('exclude path from search'))],
  2311                     ('X', 'exclude', [], _('exclude names matching the given patterns'))],
  1944                    _("hg remove [OPTION]... FILE...")),
  2312                    _("hg remove [OPTION]... FILE...")),
  1945     "rename|mv": (rename,
  2313     "rename|mv": (rename,
  1946                   [('I', 'include', [], _('include path in search')),
  2314                   [('I', 'include', [], _('include names matching the given patterns')),
  1947                    ('X', 'exclude', [], _('exclude path from search')),
  2315                    ('X', 'exclude', [], _('exclude names matching the given patterns')),
  1948                    ('A', 'after', None, _('record a copy after it has happened')),
  2316                    ('A', 'after', None, _('record a rename that has already occurred')),
  1949                    ('f', 'force', None, _('replace destination if it exists')),
  2317                    ('f', 'force', None, _('forcibly copy over an existing managed file')),
  1950                    ('p', 'parents', None, _('append source path to dest'))],
  2318                    ('p', 'parents', None, _('append source path to dest'))],
  1951                   _('hg rename [OPTION]... [SOURCE]... DEST')),
  2319                   _('hg rename [OPTION]... [SOURCE]... DEST')),
  1952     "^revert":
  2320     "^revert":
  1953         (revert,
  2321         (revert,
  1954          [("n", "nonrecursive", None, _("don't recurse into subdirs")),
  2322          [("n", "nonrecursive", None, _("do not recurse into subdirectories")),
  1955           ("r", "rev", "", _("revision"))],
  2323           ("r", "rev", "", _("revision to revert to"))],
  1956          _("hg revert [-n] [-r REV] [NAME]...")),
  2324          _("hg revert [-n] [-r REV] [NAME]...")),
  1957     "root": (root, [], _("hg root")),
  2325     "root": (root, [], _("hg root")),
  1958     "^serve":
  2326     "^serve":
  1959         (serve,
  2327         (serve,
  1960          [('A', 'accesslog', '', _('access log file')),
  2328          [('A', 'accesslog', '', _('name of access log file to write to')),
  1961           ('E', 'errorlog', '', _('error log file')),
  2329           ('E', 'errorlog', '', _('name of error log file to write to')),
  1962           ('p', 'port', 0, _('listen port')),
  2330           ('p', 'port', 0, _('port to use (default: 8000)')),
  1963           ('a', 'address', '', _('interface address')),
  2331           ('a', 'address', '', _('address to use')),
  1964           ('n', 'name', "", _('repository name')),
  2332           ('n', 'name', "", _('name to show in web pages (default: working dir)')),
  1965           ('', 'stdio', None, _('for remote clients')),
  2333           ('', 'stdio', None, _('for remote clients')),
  1966           ('t', 'templates', "", _('template directory')),
  2334           ('t', 'templates', "", _('web templates to use')),
  1967           ('', 'style', "", _('template style')),
  2335           ('', 'style', "", _('template style to use')),
  1968           ('6', 'ipv6', None, _('use IPv6 in addition to IPv4'))],
  2336           ('6', 'ipv6', None, _('use IPv6 in addition to IPv4'))],
  1969          _("hg serve [OPTION]...")),
  2337          _("hg serve [OPTION]...")),
  1970     "^status":
  2338     "^status":
  1971         (status,
  2339         (status,
  1972          [('m', 'modified', None, _('show only modified files')),
  2340          [('m', 'modified', None, _('show only modified files')),
  1973           ('a', 'added', None, _('show only added files')),
  2341           ('a', 'added', None, _('show only added files')),
  1974           ('r', 'removed', None, _('show only removed files')),
  2342           ('r', 'removed', None, _('show only removed files')),
  1975           ('u', 'unknown', None, _('show only unknown (not tracked) files')),
  2343           ('u', 'unknown', None, _('show only unknown (not tracked) files')),
  1976           ('n', 'no-status', None, _('hide status prefix')),
  2344           ('n', 'no-status', None, _('hide status prefix')),
  1977           ('0', 'print0', None, _('end filenames with NUL')),
  2345           ('0', 'print0', None, _('end filenames with NUL, for use with xargs')),
  1978           ('I', 'include', [], _('include path in search')),
  2346           ('I', 'include', [], _('include names matching the given patterns')),
  1979           ('X', 'exclude', [], _('exclude path from search'))],
  2347           ('X', 'exclude', [], _('exclude names matching the given patterns'))],
  1980          _("hg status [OPTION]... [FILE]...")),
  2348          _("hg status [OPTION]... [FILE]...")),
  1981     "tag":
  2349     "tag":
  1982         (tag,
  2350         (tag,
  1983          [('l', 'local', None, _('make the tag local')),
  2351          [('l', 'local', None, _('make the tag local')),
  1984           ('m', 'message', "", _('commit message')),
  2352           ('m', 'message', "", _('message for tag commit log entry')),
  1985           ('t', 'text', "", _('commit message (deprecated: use -m)')),
  2353           ('t', 'text', "", _('commit message (deprecated: use -m)')),
  1986           ('d', 'date', "", _('date code')),
  2354           ('d', 'date', "", _('record datecode as commit date')),
  1987           ('u', 'user', "", _('user'))],
  2355           ('u', 'user', "", _('record user as commiter'))],
  1988          _('hg tag [OPTION]... NAME [REV]')),
  2356          _('hg tag [OPTION]... NAME [REV]')),
  1989     "tags": (tags, [], _('hg tags')),
  2357     "tags": (tags, [], _('hg tags')),
  1990     "tip": (tip, [], _('hg tip')),
  2358     "tip": (tip, [], _('hg tip')),
  1991     "unbundle":
  2359     "unbundle":
  1992         (unbundle,
  2360         (unbundle,
  1994          _('hg unbundle FILE')),
  2362          _('hg unbundle FILE')),
  1995     "undo": (undo, [], _('hg undo')),
  2363     "undo": (undo, [], _('hg undo')),
  1996     "^update|up|checkout|co":
  2364     "^update|up|checkout|co":
  1997         (update,
  2365         (update,
  1998          [('b', 'branch', "", _('checkout the head of a specific branch')),
  2366          [('b', 'branch', "", _('checkout the head of a specific branch')),
  1999           ('m', 'merge', None, _('allow merging of conflicts')),
  2367           ('m', 'merge', None, _('allow merging of branches')),
  2000           ('C', 'clean', None, _('overwrite locally modified files'))],
  2368           ('C', 'clean', None, _('overwrite locally modified files'))],
  2001          _('hg update [-b TAG] [-m] [-C] [REV]')),
  2369          _('hg update [-b TAG] [-m] [-C] [REV]')),
  2002     "verify": (verify, [], _('hg verify')),
  2370     "verify": (verify, [], _('hg verify')),
  2003     "version": (show_version, [], _('hg version')),
  2371     "version": (show_version, [], _('hg version')),
  2004 }
  2372 }
  2005 
  2373 
  2006 globalopts = [
  2374 globalopts = [
  2007     ('R', 'repository', "", _('repository root directory')),
  2375     ('R', 'repository', "", _("repository root directory")),
  2008     ('', 'cwd', '', _('change working directory')),
  2376     ('', 'cwd', '', _("change working directory")),
  2009     ('y', 'noninteractive', None, _('run non-interactively')),
  2377     ('y', 'noninteractive', None, _("do not prompt, assume 'yes' for any required answers")),
  2010     ('q', 'quiet', None, _('quiet mode')),
  2378     ('q', 'quiet', None, _("suppress output")),
  2011     ('v', 'verbose', None, _('verbose mode')),
  2379     ('v', 'verbose', None, _("enable additional output")),
  2012     ('', 'debug', None, _('debug mode')),
  2380     ('', 'debug', None, _("enable debugging output")),
  2013     ('', 'debugger', None, _('start debugger')),
  2381     ('', 'debugger', None, _("start debugger")),
  2014     ('', 'traceback', None, _('print traceback on exception')),
  2382     ('', 'traceback', None, _("print traceback on exception")),
  2015     ('', 'time', None, _('time how long the command takes')),
  2383     ('', 'time', None, _("time how long the command takes")),
  2016     ('', 'profile', None, _('profile')),
  2384     ('', 'profile', None, _("print command execution profile")),
  2017     ('', 'version', None, _('output version information and exit')),
  2385     ('', 'version', None, _("output version information and exit")),
  2018     ('h', 'help', None, _('display help and exit')),
  2386     ('h', 'help', None, _("display help and exit")),
  2019 ]
  2387 ]
  2020 
  2388 
  2021 norepo = ("clone init version help debugancestor debugconfig debugdata"
  2389 norepo = ("clone init version help debugancestor debugconfig debugdata"
  2022           " debugindex debugindexdot paths")
  2390           " debugindex debugindexdot paths")
  2023 
  2391