Mercurial > public > mercurial-scm > hg-stable
diff mercurial/util.py @ 38497:da2a7d8354b2
unlinkpath: make empty directory removal optional (issue5901) (issue5826)
There are known cases where performing operations such as rebase from a
directory that is newly created can fail or at least lead to being in a
directory handle that no longer exists.
This is even reproducible by just doing something as simple as:
cd foo; hg rm *
The behavior is different if you use `hg addremove`, the directory is not
removed until we attempt to go back to the node after committing it:
cd foo; rm *; hg addremove; hg ci -m'bye foo'; hg co .^; hg co tip
Differential Revision: https://phab.mercurial-scm.org/D3859
author | Kyle Lippincott <spectral@google.com> |
---|---|
date | Thu, 28 Jun 2018 18:07:22 -0700 |
parents | 63e6f5ae84bc |
children | 152f4822d210 |
line wrap: on
line diff
--- a/mercurial/util.py Thu Jun 28 21:24:47 2018 +0530 +++ b/mercurial/util.py Thu Jun 28 18:07:22 2018 -0700 @@ -2139,17 +2139,18 @@ else: self.close() -def unlinkpath(f, ignoremissing=False): +def unlinkpath(f, ignoremissing=False, rmdir=True): """unlink and remove the directory if it is empty""" if ignoremissing: tryunlink(f) else: unlink(f) - # try removing directories that might now be empty - try: - removedirs(os.path.dirname(f)) - except OSError: - pass + if rmdir: + # try removing directories that might now be empty + try: + removedirs(os.path.dirname(f)) + except OSError: + pass def tryunlink(f): """Attempt to remove a file, ignoring ENOENT errors."""