[PATCH] purge: add options for deleting only files or only directories
Augie Fackler
raf at durin42.com
Sat Nov 16 11:44:01 CST 2013
On Thu, Nov 07, 2013 at 05:29:08PM -0800, Ben Kehoe wrote:
> # HG changeset patch
> # User Ben Kehoe <benk at berkeley.edu>
> # Date 1383873854 28800
> # Thu Nov 07 17:24:14 2013 -0800
> # Node ID 8d80f5d4459447b7b85571dba6274e6ed8ab2c36
> # Parent c38c3fdc8b9317ba09e03ab09364c3800da7c50c
> purge: add options for deleting only files or only directories
I think I like this. Anyone else have an opinion?
>
> Added --files and --dirs options to purge, since it is often useful to leave
> directory structure intact when deleting untracked files.
> Either or both options can be given. If neither are given, it's the same as
> both (i.e., existing behavior).
>
> diff -r c38c3fdc8b93 -r 8d80f5d44594 hgext/purge.py
> --- a/hgext/purge.py Thu Nov 07 15:24:23 2013 -0600
> +++ b/hgext/purge.py Thu Nov 07 17:24:14 2013 -0800
> @@ -35,6 +35,8 @@
> @command('purge|clean',
> [('a', 'abort-on-err', None, _('abort if an error occurs')),
> ('', 'all', None, _('purge ignored files too')),
> + ('', 'dirs', None, _('purge directories')),
> + ('', 'files', None, _('purge files')),
> ('p', 'print', None, _('print filenames instead of deleting them')),
> ('0', 'print0', None, _('end filenames with NUL, for use with xargs'
> ' (implies -p/--print)')),
> @@ -46,7 +48,7 @@
> Delete files not known to Mercurial. This is useful to test local
> and uncommitted changes in an otherwise-clean source tree.
>
> - This means that purge will delete:
> + This means that purge will delete the following by default:
>
> - Unknown files: files marked with "?" by :hg:`status`
> - Empty directories: in fact Mercurial ignores directories unless
> @@ -58,6 +60,10 @@
> - Ignored files (unless --all is specified)
> - New files added to the repository (with :hg:`add`)
>
> + The --files and --dirs options can be use to direct purge to delete
> + only files, only directories, or both. If neither option is given,
> + both will be deleted.
> +
> If directories are given on the command line, only files in these
> directories are considered.
>
> @@ -71,6 +77,11 @@
> if opts['print0']:
> eol = '\0'
> act = False # --print0 implies --print
> + removefiles = opts['files']
> + removedirs = opts['dirs']
> + if not removefiles and not removedirs:
> + removefiles = True
> + removedirs = True
>
> def remove(remove_func, name):
> if act:
> @@ -100,11 +111,13 @@
> match.explicitdir = match.traversedir = directories.append
> status = repo.status(match=match, ignored=opts['all'], unknown=True)
>
> - for f in sorted(status[4] + status[5]):
> - ui.note(_('removing file %s\n') % f)
> - remove(removefile, f)
> + if removefiles:
> + for f in sorted(status[4] + status[5]):
> + ui.note(_('removing file %s\n') % f)
> + remove(removefile, f)
>
> - for f in sorted(directories, reverse=True):
> - if match(f) and not os.listdir(repo.wjoin(f)):
> - ui.note(_('removing directory %s\n') % f)
> - remove(os.rmdir, f)
> + if removedirs:
> + for f in sorted(directories, reverse=True):
> + if match(f) and not os.listdir(repo.wjoin(f)):
> + ui.note(_('removing directory %s\n') % f)
> + remove(os.rmdir, f)
> diff -r c38c3fdc8b93 -r 8d80f5d44594 tests/test-purge.t
> --- a/tests/test-purge.t Thu Nov 07 15:24:23 2013 -0600
> +++ b/tests/test-purge.t Thu Nov 07 17:24:14 2013 -0800
> @@ -215,4 +215,50 @@
> $ hg purge -p -X .svn -X '*/.svn'
> $ hg purge -p -X re:.*.svn
>
> + $ rm -R .svn directory r1
> +
> +only remove files
> +
> + $ mkdir -p empty_dir dir
> + $ touch untracked_file dir/untracked_file
> + $ hg purge -p --files
> + dir/untracked_file
> + untracked_file
> + $ hg purge -v --files
> + removing file dir/untracked_file
> + removing file untracked_file
> + $ ls
> + dir
> + empty_dir
> + $ ls dir
> +
> +only remove dirs
> +
> + $ mkdir -p empty_dir dir
> + $ touch untracked_file dir/untracked_file
> + $ hg purge -p --dirs
> + empty_dir
> + $ hg purge -v --dirs
> + removing directory empty_dir
> + $ ls
> + dir
> + untracked_file
> + $ ls dir
> + untracked_file
> +
> +remove both files and dirs
> +
> + $ mkdir -p empty_dir dir
> + $ touch untracked_file dir/untracked_file
> + $ hg purge -p --files --dirs
> + dir/untracked_file
> + untracked_file
> + empty_dir
> + $ hg purge -v --files --dirs
> + removing file dir/untracked_file
> + removing file untracked_file
> + removing directory empty_dir
> + removing directory dir
> + $ ls
> +
> $ cd ..
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list