302 |
302 |
303 def fileflags(self, name): |
303 def fileflags(self, name): |
304 """return file flags""" |
304 """return file flags""" |
305 return '' |
305 return '' |
306 |
306 |
307 def archive(self, archiver, prefix): |
307 def archive(self, ui, archiver, prefix): |
308 for name in self.files(): |
308 files = self.files() |
|
309 total = len(files) |
|
310 relpath = subrelpath(self) |
|
311 ui.progress(_('archiving (%s)') % relpath, 0, |
|
312 unit=_('files'), total=total) |
|
313 for i, name in enumerate(files): |
309 flags = self.fileflags(name) |
314 flags = self.fileflags(name) |
310 mode = 'x' in flags and 0755 or 0644 |
315 mode = 'x' in flags and 0755 or 0644 |
311 symlink = 'l' in flags |
316 symlink = 'l' in flags |
312 archiver.addfile(os.path.join(prefix, self._path, name), |
317 archiver.addfile(os.path.join(prefix, self._path, name), |
313 mode, symlink, self.filedata(name)) |
318 mode, symlink, self.filedata(name)) |
|
319 ui.progress(_('archiving (%s)') % relpath, i + 1, |
|
320 unit=_('files'), total=total) |
|
321 ui.progress(_('archiving (%s)') % relpath, None) |
314 |
322 |
315 |
323 |
316 class hgsubrepo(abstractsubrepo): |
324 class hgsubrepo(abstractsubrepo): |
317 def __init__(self, ctx, path, state): |
325 def __init__(self, ctx, path, state): |
318 self._path = path |
326 self._path = path |
371 listsubrepos=True, **opts) |
379 listsubrepos=True, **opts) |
372 except error.RepoLookupError, inst: |
380 except error.RepoLookupError, inst: |
373 self._repo.ui.warn(_('warning: error "%s" in subrepository "%s"\n') |
381 self._repo.ui.warn(_('warning: error "%s" in subrepository "%s"\n') |
374 % (inst, subrelpath(self))) |
382 % (inst, subrelpath(self))) |
375 |
383 |
376 def archive(self, archiver, prefix): |
384 def archive(self, ui, archiver, prefix): |
377 abstractsubrepo.archive(self, archiver, prefix) |
385 abstractsubrepo.archive(self, ui, archiver, prefix) |
378 |
386 |
379 rev = self._state[1] |
387 rev = self._state[1] |
380 ctx = self._repo[rev] |
388 ctx = self._repo[rev] |
381 for subpath in ctx.substate: |
389 for subpath in ctx.substate: |
382 s = subrepo(ctx, subpath) |
390 s = subrepo(ctx, subpath) |
383 s.archive(archiver, os.path.join(prefix, self._path)) |
391 s.archive(ui, archiver, os.path.join(prefix, self._path)) |
384 |
392 |
385 def dirty(self): |
393 def dirty(self): |
386 r = self._state[1] |
394 r = self._state[1] |
387 if r == '': |
395 if r == '': |
388 return True |
396 return True |
858 if os.path.isdir(path) and not os.path.islink(path): |
866 if os.path.isdir(path) and not os.path.islink(path): |
859 shutil.rmtree(path) |
867 shutil.rmtree(path) |
860 else: |
868 else: |
861 os.remove(path) |
869 os.remove(path) |
862 |
870 |
863 def archive(self, archiver, prefix): |
871 def archive(self, ui, archiver, prefix): |
864 source, revision = self._state |
872 source, revision = self._state |
865 self._fetch(source, revision) |
873 self._fetch(source, revision) |
866 |
874 |
867 # Parse git's native archive command. |
875 # Parse git's native archive command. |
868 # This should be much faster than manually traversing the trees |
876 # This should be much faster than manually traversing the trees |
869 # and objects with many subprocess calls. |
877 # and objects with many subprocess calls. |
870 tarstream = self._gitcommand(['archive', revision], stream=True) |
878 tarstream = self._gitcommand(['archive', revision], stream=True) |
871 tar = tarfile.open(fileobj=tarstream, mode='r|') |
879 tar = tarfile.open(fileobj=tarstream, mode='r|') |
872 for info in tar: |
880 relpath = subrelpath(self) |
|
881 ui.progress(_('archiving (%s)') % relpath, 0, unit=_('files')) |
|
882 for i, info in enumerate(tar): |
873 archiver.addfile(os.path.join(prefix, self._relpath, info.name), |
883 archiver.addfile(os.path.join(prefix, self._relpath, info.name), |
874 info.mode, info.issym(), |
884 info.mode, info.issym(), |
875 tar.extractfile(info).read()) |
885 tar.extractfile(info).read()) |
|
886 ui.progress(_('archiving (%s)') % relpath, i + 1, |
|
887 unit=_('files')) |
|
888 ui.progress(_('archiving (%s)') % relpath, None) |
|
889 |
876 |
890 |
877 types = { |
891 types = { |
878 'hg': hgsubrepo, |
892 'hg': hgsubrepo, |
879 'svn': svnsubrepo, |
893 'svn': svnsubrepo, |
880 'git': gitsubrepo, |
894 'git': gitsubrepo, |