Mercurial > public > mercurial-scm > hg
comparison mercurial/subrepo.py @ 18967:88d1b59f6906
archive: raise error.Abort if the file pattern matches no files
Note that we could raise this exception even if no pattern were specified, but
the revision contained no files. However this should not happen in practice
since in that case commands.py/archive would exit earlier with an "no working
directory: please specify a revision" error message instead.
author | Angel Ezquerra <angel.ezquerra@gmail.com> |
---|---|
date | Thu, 21 Mar 2013 22:09:15 +0100 |
parents | ca480d710fe6 |
children | 811e253226c3 |
comparison
equal
deleted
inserted
replaced
18966:5572f688e0a9 | 18967:88d1b59f6906 |
---|---|
421 archiver.addfile(os.path.join(prefix, self._path, name), | 421 archiver.addfile(os.path.join(prefix, self._path, name), |
422 mode, symlink, self.filedata(name)) | 422 mode, symlink, self.filedata(name)) |
423 ui.progress(_('archiving (%s)') % relpath, i + 1, | 423 ui.progress(_('archiving (%s)') % relpath, i + 1, |
424 unit=_('files'), total=total) | 424 unit=_('files'), total=total) |
425 ui.progress(_('archiving (%s)') % relpath, None) | 425 ui.progress(_('archiving (%s)') % relpath, None) |
426 return total | |
426 | 427 |
427 def walk(self, match): | 428 def walk(self, match): |
428 ''' | 429 ''' |
429 walk recursively through the directory tree, finding all files | 430 walk recursively through the directory tree, finding all files |
430 matched by the match function | 431 matched by the match function |
578 % (inst, subrelpath(self))) | 579 % (inst, subrelpath(self))) |
579 | 580 |
580 @annotatesubrepoerror | 581 @annotatesubrepoerror |
581 def archive(self, ui, archiver, prefix, match=None): | 582 def archive(self, ui, archiver, prefix, match=None): |
582 self._get(self._state + ('hg',)) | 583 self._get(self._state + ('hg',)) |
583 abstractsubrepo.archive(self, ui, archiver, prefix, match) | 584 total = abstractsubrepo.archive(self, ui, archiver, prefix, match) |
584 | |
585 rev = self._state[1] | 585 rev = self._state[1] |
586 ctx = self._repo[rev] | 586 ctx = self._repo[rev] |
587 for subpath in ctx.substate: | 587 for subpath in ctx.substate: |
588 s = subrepo(ctx, subpath) | 588 s = subrepo(ctx, subpath) |
589 submatch = matchmod.narrowmatcher(subpath, match) | 589 submatch = matchmod.narrowmatcher(subpath, match) |
590 s.archive(ui, archiver, os.path.join(prefix, self._path), submatch) | 590 total += s.archive( |
591 ui, archiver, os.path.join(prefix, self._path), submatch) | |
592 return total | |
591 | 593 |
592 @annotatesubrepoerror | 594 @annotatesubrepoerror |
593 def dirty(self, ignoreupdate=False): | 595 def dirty(self, ignoreupdate=False): |
594 r = self._state[1] | 596 r = self._state[1] |
595 if r == '' and not ignoreupdate: # no state recorded | 597 if r == '' and not ignoreupdate: # no state recorded |
1381 shutil.rmtree(path) | 1383 shutil.rmtree(path) |
1382 else: | 1384 else: |
1383 os.remove(path) | 1385 os.remove(path) |
1384 | 1386 |
1385 def archive(self, ui, archiver, prefix, match=None): | 1387 def archive(self, ui, archiver, prefix, match=None): |
1388 total = 0 | |
1386 source, revision = self._state | 1389 source, revision = self._state |
1387 if not revision: | 1390 if not revision: |
1388 return | 1391 return total |
1389 self._fetch(source, revision) | 1392 self._fetch(source, revision) |
1390 | 1393 |
1391 # Parse git's native archive command. | 1394 # Parse git's native archive command. |
1392 # This should be much faster than manually traversing the trees | 1395 # This should be much faster than manually traversing the trees |
1393 # and objects with many subprocess calls. | 1396 # and objects with many subprocess calls. |
1404 data = info.linkname | 1407 data = info.linkname |
1405 else: | 1408 else: |
1406 data = tar.extractfile(info).read() | 1409 data = tar.extractfile(info).read() |
1407 archiver.addfile(os.path.join(prefix, self._path, info.name), | 1410 archiver.addfile(os.path.join(prefix, self._path, info.name), |
1408 info.mode, info.issym(), data) | 1411 info.mode, info.issym(), data) |
1412 total += 1 | |
1409 ui.progress(_('archiving (%s)') % relpath, i + 1, | 1413 ui.progress(_('archiving (%s)') % relpath, i + 1, |
1410 unit=_('files')) | 1414 unit=_('files')) |
1411 ui.progress(_('archiving (%s)') % relpath, None) | 1415 ui.progress(_('archiving (%s)') % relpath, None) |
1416 return total | |
1412 | 1417 |
1413 | 1418 |
1414 @annotatesubrepoerror | 1419 @annotatesubrepoerror |
1415 def status(self, rev2, **opts): | 1420 def status(self, rev2, **opts): |
1416 rev1 = self._state[1] | 1421 rev1 = self._state[1] |