diff -r ae1f7a5373e8 -r 71938479eff9 mercurial/commands.py --- a/mercurial/commands.py Sat May 21 02:05:00 2011 +0200 +++ b/mercurial/commands.py Wed May 18 21:31:40 2011 +0200 @@ -3392,9 +3392,10 @@ displayer.close() @command('manifest', - [('r', 'rev', '', _('revision to display'), _('REV'))], + [('r', 'rev', '', _('revision to display'), _('REV')), + ('', 'all', False, _("list files from all revisions"))], _('[-r REV]')) -def manifest(ui, repo, node=None, rev=None): +def manifest(ui, repo, node=None, rev=None, **opts): """output the current or given revision of the project manifest Print a list of version controlled files for the given revision. @@ -3404,8 +3405,30 @@ With -v, print file permissions, symlink and executable bits. With --debug, print file revision hashes. + If option --all is specified, the list of all files from all revisions + is printed. This includes deleted and renamed files. + Returns 0 on success. """ + if opts.get('all'): + if rev or node: + raise util.Abort(_("can't specify a revision with --all")) + + res = [] + prefix = "data/" + suffix = ".i" + plen = len(prefix) + slen = len(suffix) + lock = repo.lock() + try: + for fn, b, size in repo.store.datafiles(): + if size != 0 and fn[-slen:] == suffix and fn[:plen] == prefix: + res.append(fn[plen:-slen]) + finally: + lock.release() + for f in sorted(res): + ui.write("%s\n" % f) + return if rev and node: raise util.Abort(_("please specify just one revision"))