[PATCH 01 of 13] util: introduce ignoremissing flag to unlinkpath
Mads Kiilerich
kiilerix at gmail.com
Fri Dec 21 19:06:50 UTC 2012
# HG changeset patch
# User Mads Kiilerich <madski at unity3d.com>
# Date 1356116414 -3600
# Node ID b35a5b6dead73e2503c09ca94a57ad912b9d3451
# Parent 7af9d4303ebe256189afe4628962374f0577f9a6
util: introduce ignoremissing flag to unlinkpath
diff --git a/hgext/largefiles/lfutil.py b/hgext/largefiles/lfutil.py
--- a/hgext/largefiles/lfutil.py
+++ b/hgext/largefiles/lfutil.py
@@ -36,11 +36,7 @@
try:
if unlink:
for f in list:
- try:
- util.unlinkpath(repo.wjoin(f))
- except OSError, inst:
- if inst.errno != errno.ENOENT:
- raise
+ util.unlinkpath(repo.wjoin(f), ignoremissing=True)
repo[None].forget(list)
finally:
wlock.release()
diff --git a/hgext/mq.py b/hgext/mq.py
--- a/hgext/mq.py
+++ b/hgext/mq.py
@@ -1329,11 +1329,7 @@
# created while patching
for f in all_files:
if f not in repo.dirstate:
- try:
- util.unlinkpath(repo.wjoin(f))
- except OSError, inst:
- if inst.errno != errno.ENOENT:
- raise
+ util.unlinkpath(repo.wjoin(f), ignoremissing=True)
self.ui.warn(_('done\n'))
raise
@@ -1442,11 +1438,7 @@
self.backup(repo, tobackup)
for f in a:
- try:
- util.unlinkpath(repo.wjoin(f))
- except OSError, e:
- if e.errno != errno.ENOENT:
- raise
+ util.unlinkpath(repo.wjoin(f), ignoremissing=True)
repo.dirstate.drop(f)
for f in m + r:
fctx = ctx[f]
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -4957,11 +4957,7 @@
for f in list:
if f in added:
continue # we never unlink added files on remove
- try:
- util.unlinkpath(repo.wjoin(f))
- except OSError, inst:
- if inst.errno != errno.ENOENT:
- raise
+ util.unlinkpath(repo.wjoin(f), ignoremissing=True)
repo[None].forget(list)
finally:
wlock.release()
diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -379,11 +379,10 @@
if f == '.hgsubstate': # subrepo states need updating
subrepo.submerge(repo, wctx, mctx, wctx, overwrite)
try:
- util.unlinkpath(repo.wjoin(f))
+ util.unlinkpath(repo.wjoin(f), ignoremissing=True)
except OSError, inst:
- if inst.errno != errno.ENOENT:
- repo.ui.warn(_("update failed to remove %s: %s!\n") %
- (f, inst.strerror))
+ repo.ui.warn(_("update failed to remove %s: %s!\n") %
+ (f, inst.strerror))
removed += 1
elif m == "m": # merge
if f == '.hgsubstate': # subrepo states need updating
diff --git a/mercurial/patch.py b/mercurial/patch.py
--- a/mercurial/patch.py
+++ b/mercurial/patch.py
@@ -439,11 +439,7 @@
util.setflags(self._join(fname), False, True)
def unlink(self, fname):
- try:
- util.unlinkpath(self._join(fname))
- except OSError, inst:
- if inst.errno != errno.ENOENT:
- raise
+ util.unlinkpath(self._join(fname), ignoremissing=True)
def writerej(self, fname, failed, total, lines):
fname = fname + ".rej"
diff --git a/mercurial/posix.py b/mercurial/posix.py
--- a/mercurial/posix.py
+++ b/mercurial/posix.py
@@ -443,9 +443,13 @@
def makedir(path, notindexed):
os.mkdir(path)
-def unlinkpath(f):
+def unlinkpath(f, ignoremissing=False):
"""unlink and remove the directory if it is empty"""
- os.unlink(f)
+ try:
+ os.unlink(f)
+ except OSError, e:
+ if not (ignoremissing and e.errno == errno.ENOENT):
+ raise
# try removing directories that might now be empty
try:
os.removedirs(os.path.dirname(f))
diff --git a/mercurial/windows.py b/mercurial/windows.py
--- a/mercurial/windows.py
+++ b/mercurial/windows.py
@@ -275,9 +275,13 @@
break
head, tail = os.path.split(head)
-def unlinkpath(f):
+def unlinkpath(f, ignoremissing=False):
"""unlink and remove the directory if it is empty"""
- unlink(f)
+ try:
+ unlink(f)
+ except OSError, e:
+ if not (ignoremissing and e.errno == errno.ENOENT):
+ raise
# try removing directories that might now be empty
try:
_removedirs(os.path.dirname(f))
More information about the Mercurial-devel
mailing list