How to automatically remove all .orig files in Mercurial working tree?

Viewed 27985

During merges mercurial leaves .orig file for any unresolved file. But after manually resolving problems and marking a file correct it does not delete the .orig file. Can it be automatically removed by some command?

I work on a Mac so I can use something like:

find . -iname '*.orig' -exec rm '{}' ';'

and alias it or something, but I'd rather use something like hg cleanup...

UPDATE:

Since some time now, Purge extension is bundled with Mercurial and solves this problem nicely.

12 Answers

Personally, I use

$ rm **/*.orig

if I get tired of the .orig files. This works in Zsh and in Bash 4 after you run shopt -s globstar.

But if you use another shell or want a built-in solution, then maybe you'll like the purge extension (link updated 2016-08-25). That lets you remove all untracked files with

$ hg purge

You can remove all untracked and ignored files with

$ hg purge --all

An advantage of using hg purge is that this will also cleanup directories that become empty after removing the files. The rm command line will just leave the empty directories behind.

The following will remove .orig files in your entire working copy hierarchy and also works for paths containing spaces:

find . -name *.orig | while read -d $'\n' file; do rm -v "$file"; done;

I use an alias in my .bash_profile:

alias clearorig='echo "Removing .orig files..."; find . -name *.orig | \
while read -d $'\''\n'\'' file; do rm -v "$file"; done;'

you should use the update hook

update: This is run after an update or merge of the working directory has finished

PowerShell one-liner (recursive):

Get-ChildItem <path> -Recurse -File -Include *.orig | Remove-Item

For example for the current folder and sub-folders:

Get-ChildItem . -Recurse -File -Include *.orig | Remove-Item
Related