##// END OF EJS Templates
dispatch: catch ConfigError while constructing ui
dispatch: catch ConfigError while constructing ui

File last commit:

r9270:00cc7fa0 default
r9470:ba75830d default
Show More
purge.py
108 lines | 3.9 KiB | text/x-python | PythonLexer
Emanuele Aina
Move back the purge extension in hgext
r4311 # Copyright (C) 2006 - Marco Barisione <marco@barisione.org>
#
Dirkjan Ochtman
change wiki/bts URLs to point to new hostname
r8936 # This is a small extension for Mercurial (http://mercurial.selenic.com/)
Emanuele Aina
Move back the purge extension in hgext
r4311 # 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/).
#
# 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.
Dirkjan Ochtman
extensions: change descriptions for extensions providing a few commands
r8934 '''command to delete untracked files from the working directory'''
Dirkjan Ochtman
help: add/fix docstrings for a bunch of extensions
r8873
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 _
Patrick Mezard
purge: remove read-only files under Windows (issue583)...
r8043 import os, stat
Emanuele Aina
Move back the purge extension in hgext
r4311
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
Martin Geisler
purge: word-wrap help texts at 70 characters
r7998 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"
Martin Geisler
purge: word-wrap help texts at 70 characters
r7998 - Empty directories: in fact Mercurial ignores directories unless
Cédric Duval
purge: fix spelling error
r8617 they contain files under source control management
Matt Mackall
purge: eliminate dopurge
r6573 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.
Martin Geisler
purge: word-wrap help texts at 70 characters
r7998 Be careful with purge, as you could irreversibly delete some files
you forgot to add to the repository. If you only want to print the
list of 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))
Patrick Mezard
purge: remove read-only files under Windows (issue583)...
r8043 def removefile(path):
Patrick Mezard
purge: fix b777dd8f7836 (remove read-only files)...
r8044 try:
os.remove(path)
except OSError:
# read-only files cannot be unlinked under Windows
s = os.stat(path)
if (s.st_mode & stat.S_IWRITE) != 0:
raise
os.chmod(path, stat.S_IMODE(s.st_mode) | stat.S_IWRITE)
os.remove(path)
Patrick Mezard
purge: remove read-only files under Windows (issue583)...
r8043
Emanuele Aina
Move back the purge extension in hgext
r4311 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
replace util.sort with sorted built-in...
r8209 for f in sorted(status[4] + status[5]):
Matt Mackall
purge: use status
r6754 ui.note(_('Removing file %s\n') % f)
Patrick Mezard
purge: remove read-only files under Windows (issue583)...
r8043 remove(removefile, f)
Emanuele Aina
Move back the purge extension in hgext
r4311
Matt Mackall
replace util.sort with sorted built-in...
r8209 for f in sorted(directories, reverse=True):
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')),
timeless
Generally replace "file name" with "filename" in help and comments.
r8761 ('p', 'print', None, _('print filenames instead of deleting them')),
Emanuele Aina
Move back the purge extension in hgext
r4311 ('0', 'print0', None, _('end filenames with NUL, for use with xargs'
Martin Geisler
help texts: write command line switches as -a/--abc
r8076 ' (implies -p/--print)')),
Benoit Boissinot
refactor options from cmdtable...
r5147 ] + commands.walkopts,
Emanuele Aina
Move back the purge extension in hgext
r4311 _('hg purge [OPTION]... [DIR]...'))
}