##// END OF EJS Templates
convert/bzr: fix symlink handling (issue1626)
convert/bzr: fix symlink handling (issue1626)

File last commit:

r8076:5ec526c1 default
r8148:adce97d2 default
Show More
purge.py
98 lines | 3.6 KiB | text/x-python | PythonLexer
Emanuele Aina
Move back the purge extension in hgext
r4311 # Copyright (C) 2006 - Marco Barisione <marco@barisione.org>
#
# This is a small extension for Mercurial (http://www.selenic.com/mercurial)
# that removes files not known to mercurial
#
# This program was inspired by the "cvspurge" script contained in CVS utilities
# (http://www.red-bean.com/cvsutils/).
#
# To enable the "purge" extension put these lines in your ~/.hgrc:
# [extensions]
# hgext.purge =
#
# For help on the usage of "hg purge" use:
# hg help purge
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Matt Mackall
purge: use cmdutil.matchpats
r6574 from mercurial import util, commands, cmdutil
Emanuele Aina
Move back the purge extension in hgext
r4311 from mercurial.i18n import _
import os
Matt Mackall
purge: eliminate dopurge
r6573 def purge(ui, repo, *dirs, **opts):
Benjamin Pollack
1 file changed, 7 insertions(+), 9 deletions(-)...
r7605 '''removes files not tracked by Mercurial
Matt Mackall
purge: eliminate dopurge
r6573
Benjamin Pollack
1 file changed, 7 insertions(+), 9 deletions(-)...
r7605 Delete files not known to Mercurial. This is useful to test local and
uncommitted changes in an otherwise-clean source tree.
Matt Mackall
purge: eliminate dopurge
r6573
This means that purge will delete:
- Unknown files: files marked with "?" by "hg status"
- Empty directories: in fact Mercurial ignores directories unless they
contain files under source control managment
But it will leave untouched:
Benjamin Pollack
1 file changed, 7 insertions(+), 9 deletions(-)...
r7605 - Modified and unmodified tracked files
- Ignored files (unless --all is specified)
Matt Mackall
purge: eliminate dopurge
r6573 - New files added to the repository (with "hg add")
If directories are given on the command line, only files in these
directories are considered.
Benjamin Pollack
1 file changed, 7 insertions(+), 9 deletions(-)...
r7605 Be careful with purge, as you could irreversibly delete some files you
Matt Mackall
purge: eliminate dopurge
r6573 forgot to add to the repository. If you only want to print the list of
Benjamin Pollack
1 file changed, 7 insertions(+), 9 deletions(-)...
r7605 files that this program would delete, use the --print option.
Matt Mackall
purge: eliminate dopurge
r6573 '''
act = not opts['print']
Matt Mackall
purge: cleanup...
r6757 eol = '\n'
if opts['print0']:
eol = '\0'
act = False # --print0 implies --print
Emanuele Aina
Move back the purge extension in hgext
r4311
def remove(remove_func, name):
if act:
try:
Martin Geisler
use repo.wjoin(f) instead of os.path.join(repo.root, f)
r7570 remove_func(repo.wjoin(name))
Benoit Boissinot
remove unused variables
r7280 except OSError:
Matt Mackall
purge: cleanup...
r6757 m = _('%s cannot be removed') % name
if opts['abort_on_err']:
raise util.Abort(m)
ui.warn(_('warning: %s\n') % m)
Emanuele Aina
Move back the purge extension in hgext
r4311 else:
ui.write('%s%s' % (name, eol))
directories = []
Matt Mackall
walk: remove remaining users of cmdutils.matchpats
r6582 match = cmdutil.match(repo, dirs, opts)
Matt Mackall
walk: use match.dir in statwalk
r6588 match.dir = directories.append
Matt Mackall
purge: use status
r6754 status = repo.status(match=match, ignored=opts['all'], unknown=True)
Emanuele Aina
Move back the purge extension in hgext
r4311
Matt Mackall
util: add sort helper
r6762 for f in util.sort(status[4] + status[5]):
Matt Mackall
purge: use status
r6754 ui.note(_('Removing file %s\n') % f)
remove(os.remove, f)
Emanuele Aina
Move back the purge extension in hgext
r4311
Matt Mackall
util: add sort helper
r6762 for f in util.sort(directories)[::-1]:
Emanuele Aina
purge: add --include and --exclude options
r4463 if match(f) and not os.listdir(repo.wjoin(f)):
Emanuele Aina
Move back the purge extension in hgext
r4311 ui.note(_('Removing directory %s\n') % f)
remove(os.rmdir, f)
cmdtable = {
Emanuele Aina
purge: add the clean alias inspired by git-clean and svn-clean
r4695 'purge|clean':
Emanuele Aina
Move back the purge extension in hgext
r4311 (purge,
[('a', 'abort-on-err', None, _('abort if an error occurs')),
Emanuele Aina
purge: don't delete ignored files if --all is not specified
r4691 ('', 'all', None, _('purge ignored files too')),
Emanuele Aina
Move back the purge extension in hgext
r4311 ('p', 'print', None, _('print the file names instead of deleting them')),
('0', 'print0', None, _('end filenames with NUL, for use with xargs'
Emanuele Aina
purge: add --include and --exclude options
r4463 ' (implies -p)')),
Benoit Boissinot
refactor options from cmdtable...
r5147 ] + commands.walkopts,
Emanuele Aina
Move back the purge extension in hgext
r4311 _('hg purge [OPTION]... [DIR]...'))
}