Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/commands.py @ 2112:2b03c6733efa
add "archive" command, like "cvs export" only better.
most code in mercurial/archival.py module, for sharing with hgweb.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Fri, 21 Apr 2006 15:27:57 -0700 |
parents | 1d3c6e63d703 |
children | 9383ba6b069a |
comparison
equal
deleted
inserted
replaced
2110:25a8d116ab6a | 2112:2b03c6733efa |
---|---|
10 from i18n import gettext as _ | 10 from i18n import gettext as _ |
11 demandload(globals(), "os re sys signal shutil imp urllib pdb") | 11 demandload(globals(), "os re sys signal shutil imp urllib pdb") |
12 demandload(globals(), "fancyopts ui hg util lock revlog templater bundlerepo") | 12 demandload(globals(), "fancyopts ui hg util lock revlog templater bundlerepo") |
13 demandload(globals(), "fnmatch hgweb mdiff random signal tempfile time") | 13 demandload(globals(), "fnmatch hgweb mdiff random signal tempfile time") |
14 demandload(globals(), "traceback errno socket version struct atexit sets bz2") | 14 demandload(globals(), "traceback errno socket version struct atexit sets bz2") |
15 demandload(globals(), "changegroup") | 15 demandload(globals(), "archival changegroup") |
16 | 16 |
17 class UnknownCommand(Exception): | 17 class UnknownCommand(Exception): |
18 """Exception raised if command is not in the command table.""" | 18 """Exception raised if command is not in the command table.""" |
19 class AmbiguousCommand(Exception): | 19 class AmbiguousCommand(Exception): |
20 """Exception raised if command shortcut matches more than one command.""" | 20 """Exception raised if command shortcut matches more than one command.""" |
887 pieces.append(["%*s" % (m, x) for x in l]) | 887 pieces.append(["%*s" % (m, x) for x in l]) |
888 | 888 |
889 if pieces: | 889 if pieces: |
890 for p, l in zip(zip(*pieces), lines): | 890 for p, l in zip(zip(*pieces), lines): |
891 ui.write("%s: %s" % (" ".join(p), l[1])) | 891 ui.write("%s: %s" % (" ".join(p), l[1])) |
892 | |
893 def archive(ui, repo, dest, **opts): | |
894 '''create unversioned archive of a repository revision | |
895 | |
896 By default, the revision used is the parent of the working | |
897 directory; use "-r" to specify a different revision. | |
898 | |
899 To specify the type of archive to create, use "-t". Valid | |
900 types are: | |
901 | |
902 "files" (default): a directory full of files | |
903 "tar": tar archive, uncompressed | |
904 "tbz2": tar archive, compressed using bzip2 | |
905 "tgz": tar archive, compressed using gzip | |
906 "uzip": zip archive, uncompressed | |
907 "zip": zip archive, compressed using deflate | |
908 | |
909 The exact name of the destination archive or directory is given | |
910 using a format string; see "hg help export" for details. | |
911 | |
912 Each member added to an archive file has a directory prefix | |
913 prepended. Use "-p" to specify a format string for the prefix. | |
914 The default is the basename of the archive, with suffixes removed. | |
915 ''' | |
916 | |
917 if opts['rev']: | |
918 node = repo.lookup(opts['rev']) | |
919 else: | |
920 node, p2 = repo.dirstate.parents() | |
921 if p2 != nullid: | |
922 raise util.Abort(_('uncommitted merge - please provide a ' | |
923 'specific revision')) | |
924 | |
925 dest = make_filename(repo, repo.changelog, dest, node) | |
926 prefix = make_filename(repo, repo.changelog, opts['prefix'], node) | |
927 if os.path.realpath(dest) == repo.root: | |
928 raise util.Abort(_('repository root cannot be destination')) | |
929 _, matchfn, _ = matchpats(repo, [], opts) | |
930 archival.archive(repo, dest, node, opts.get('type') or 'files', | |
931 not opts['no_decode'], matchfn, prefix) | |
892 | 932 |
893 def bundle(ui, repo, fname, dest="default-push", **opts): | 933 def bundle(ui, repo, fname, dest="default-push", **opts): |
894 """create a changegroup file | 934 """create a changegroup file |
895 | 935 |
896 Generate a compressed changegroup file collecting all changesets | 936 Generate a compressed changegroup file collecting all changesets |
2837 ('n', 'number', None, _('list the revision number (default)')), | 2877 ('n', 'number', None, _('list the revision number (default)')), |
2838 ('c', 'changeset', None, _('list the changeset')), | 2878 ('c', 'changeset', None, _('list the changeset')), |
2839 ('I', 'include', [], _('include names matching the given patterns')), | 2879 ('I', 'include', [], _('include names matching the given patterns')), |
2840 ('X', 'exclude', [], _('exclude names matching the given patterns'))], | 2880 ('X', 'exclude', [], _('exclude names matching the given patterns'))], |
2841 _('hg annotate [-r REV] [-a] [-u] [-d] [-n] [-c] FILE...')), | 2881 _('hg annotate [-r REV] [-a] [-u] [-d] [-n] [-c] FILE...')), |
2882 'archive': | |
2883 (archive, | |
2884 [('', 'no-decode', None, _('do not pass files through decoders')), | |
2885 ('p', 'prefix', '', _('directory prefix for files in archive')), | |
2886 ('r', 'rev', '', _('revision to distribute')), | |
2887 ('t', 'type', '', _('type of distribution to create')), | |
2888 ('I', 'include', [], _('include names matching the given patterns')), | |
2889 ('X', 'exclude', [], _('exclude names matching the given patterns'))], | |
2890 _('hg archive [OPTION]... DEST')), | |
2842 "bundle": | 2891 "bundle": |
2843 (bundle, | 2892 (bundle, |
2844 [('f', 'force', None, | 2893 [('f', 'force', None, |
2845 _('run even when remote repository is unrelated'))], | 2894 _('run even when remote repository is unrelated'))], |
2846 _('hg bundle FILE DEST')), | 2895 _('hg bundle FILE DEST')), |
3247 del cmdoptions[n] | 3296 del cmdoptions[n] |
3248 | 3297 |
3249 return (cmd, cmd and i[0] or None, args, options, cmdoptions) | 3298 return (cmd, cmd and i[0] or None, args, options, cmdoptions) |
3250 | 3299 |
3251 def dispatch(args): | 3300 def dispatch(args): |
3252 for name in 'SIGTERM', 'SIGHUP', 'SIGBREAK': | 3301 for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM': |
3253 num = getattr(signal, name, None) | 3302 num = getattr(signal, name, None) |
3254 if num: signal.signal(num, catchterm) | 3303 if num: signal.signal(num, catchterm) |
3255 | 3304 |
3256 try: | 3305 try: |
3257 u = ui.ui() | 3306 u = ui.ui() |