156 '''create an unversioned archive of a repository revision |
156 '''create an unversioned archive of a repository revision |
157 |
157 |
158 By default, the revision used is the parent of the working |
158 By default, the revision used is the parent of the working |
159 directory; use -r/--rev to specify a different revision. |
159 directory; use -r/--rev to specify a different revision. |
160 |
160 |
161 To specify the type of archive to create, use -t/--type. Valid |
161 The archive type is automatically detected based on file |
162 types are: |
162 extension (or override using -t/--type). |
|
163 |
|
164 Valid types are: |
163 |
165 |
164 :``files``: a directory full of files (default) |
166 :``files``: a directory full of files (default) |
165 :``tar``: tar archive, uncompressed |
167 :``tar``: tar archive, uncompressed |
166 :``tbz2``: tar archive, compressed using bzip2 |
168 :``tbz2``: tar archive, compressed using bzip2 |
167 :``tgz``: tar archive, compressed using gzip |
169 :``tgz``: tar archive, compressed using gzip |
182 raise util.Abort(_('no working directory: please specify a revision')) |
184 raise util.Abort(_('no working directory: please specify a revision')) |
183 node = ctx.node() |
185 node = ctx.node() |
184 dest = cmdutil.make_filename(repo, dest, node) |
186 dest = cmdutil.make_filename(repo, dest, node) |
185 if os.path.realpath(dest) == repo.root: |
187 if os.path.realpath(dest) == repo.root: |
186 raise util.Abort(_('repository root cannot be destination')) |
188 raise util.Abort(_('repository root cannot be destination')) |
187 matchfn = cmdutil.match(repo, [], opts) |
189 |
188 kind = opts.get('type') or 'files' |
190 def guess_type(): |
|
191 exttypes = { |
|
192 'tar': ['.tar'], |
|
193 'tbz2': ['.tbz2', '.tar.bz2'], |
|
194 'tgz': ['.tgz', '.tar.gz'], |
|
195 'zip': ['.zip'], |
|
196 } |
|
197 |
|
198 for type, extensions in exttypes.items(): |
|
199 if any(dest.endswith(ext) for ext in extensions): |
|
200 return type |
|
201 return None |
|
202 |
|
203 kind = opts.get('type') or guess_type() or 'files' |
189 prefix = opts.get('prefix') |
204 prefix = opts.get('prefix') |
|
205 |
190 if dest == '-': |
206 if dest == '-': |
191 if kind == 'files': |
207 if kind == 'files': |
192 raise util.Abort(_('cannot archive plain files to stdout')) |
208 raise util.Abort(_('cannot archive plain files to stdout')) |
193 dest = sys.stdout |
209 dest = sys.stdout |
194 if not prefix: |
210 if not prefix: |
195 prefix = os.path.basename(repo.root) + '-%h' |
211 prefix = os.path.basename(repo.root) + '-%h' |
|
212 |
196 prefix = cmdutil.make_filename(repo, prefix, node) |
213 prefix = cmdutil.make_filename(repo, prefix, node) |
|
214 matchfn = cmdutil.match(repo, [], opts) |
197 archival.archive(repo, dest, node, kind, not opts.get('no_decode'), |
215 archival.archive(repo, dest, node, kind, not opts.get('no_decode'), |
198 matchfn, prefix) |
216 matchfn, prefix) |
199 |
217 |
200 def backout(ui, repo, node=None, rev=None, **opts): |
218 def backout(ui, repo, node=None, rev=None, **opts): |
201 '''reverse effect of earlier changeset |
219 '''reverse effect of earlier changeset |