changeset 3632:4cfb72bcb978

util: add copyfile function
author Matt Mackall <mpm@selenic.com>
date Mon, 13 Nov 2006 13:26:57 -0600
parents dc3504af7722
children 508036290b00
files mercurial/commands.py mercurial/patch.py mercurial/util.py
diffstat 3 files changed, 13 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -8,7 +8,7 @@
 from demandload import demandload
 from node import *
 from i18n import gettext as _
-demandload(globals(), "os re sys signal shutil imp urllib pdb shlex")
+demandload(globals(), "os re sys signal imp urllib pdb shlex")
 demandload(globals(), "fancyopts ui hg util lock revlog templater bundlerepo")
 demandload(globals(), "difflib patch tempfile time")
 demandload(globals(), "traceback errno version atexit sets bz2")
@@ -1004,14 +1004,11 @@ def docopy(ui, repo, pats, opts, wlock):
                     repo.undelete([abstarget], wlock)
                 try:
                     if not opts.get('dry_run'):
-                        shutil.copyfile(relsrc, reltarget)
-                        shutil.copymode(relsrc, reltarget)
+                        util.copyfile(relsrc, reltarget)
                     restore = False
                 finally:
                     if restore:
                         repo.remove([abstarget], wlock)
-            except shutil.Error, inst:
-                raise util.Abort(str(inst))
             except IOError, inst:
                 if inst.errno == errno.ENOENT:
                     ui.warn(_('%s: deleted in working copy\n') % relsrc)
@@ -2419,8 +2416,7 @@ def revert(ui, repo, *pats, **opts):
                 ui.note(_('saving current version of %s as %s\n') %
                         (rel, bakname))
                 if not opts.get('dry_run'):
-                    shutil.copyfile(rel, bakname)
-                    shutil.copymode(rel, bakname)
+                    util.copyfile(rel, bakname)
             if ui.verbose or not exact:
                 ui.status(xlist[1] % rel)
         for table, hitlist, misslist, backuphit, backupmiss in disptable:
--- a/mercurial/patch.py
+++ b/mercurial/patch.py
@@ -26,11 +26,8 @@ def copyfile(src, dst, basedir=None):
     targetdir = os.path.dirname(absdst)
     if not os.path.isdir(targetdir):
         os.makedirs(targetdir)
-    try:
-        shutil.copyfile(abssrc, absdst)
-        shutil.copymode(abssrc, absdst)
-    except shutil.Error, inst:
-        raise util.Abort(str(inst))
+
+    util.copyfile(abssrc, absdst)
 
 # public functions
 
--- a/mercurial/util.py
+++ b/mercurial/util.py
@@ -460,6 +460,14 @@ def unlink(f):
     except OSError:
         pass
 
+def copyfile(src, dest):
+    "copy a file, preserving mode"
+    try:
+        shutil.copyfile(src, dest)
+        shutil.copymode(src, dest)
+    except shutil.Error, inst:
+        raise util.Abort(str(inst))
+
 def copyfiles(src, dst, hardlink=None):
     """Copy a directory tree using hardlinks if possible"""