[PATCH] subrepo: convert the os.path references in git to vfs

FUJIWARA Katsunori foozy at lares.dti.ne.jp
Fri Apr 10 04:14:37 CDT 2015


At Thu, 09 Apr 2015 21:21:11 -0400,
Matt Harbison wrote:
> 
> # HG changeset patch
> # User Matt Harbison <matt_harbison at yahoo.com>
> # Date 1423331860 18000
> #      Sat Feb 07 12:57:40 2015 -0500
> # Node ID 7b26d433ab78988a19cadcead645196999b59568
> # Parent  e0e28e910fa3797fd0aa4f818e9b33c5bcbf0e53
> subrepo: convert the os.path references in git to vfs
> 
> There are a handful of os.path references in the free functions at the top of
> the module that will be trickier to remove.
> 
> diff --git a/mercurial/subrepo.py b/mercurial/subrepo.py
> --- a/mercurial/subrepo.py
> +++ b/mercurial/subrepo.py
> @@ -1300,7 +1300,7 @@
>          return retdata, p.returncode
>  
>      def _gitmissing(self):
> -        return not os.path.exists(os.path.join(self._abspath, '.git'))
> +        return not self.wvfs.exists('.git')
>  
>      def _gitstate(self):
>          return self._gitcommand(['rev-parse', 'HEAD'])
> @@ -1632,14 +1632,13 @@
>          # local-only history
>          self.ui.note(_('removing subrepo %s\n') % self._relpath)
>          self._gitcommand(['config', 'core.bare', 'true'])
> -        for f in os.listdir(self._abspath):
> +        for f in self.wvfs.listdir():
>              if f == '.git':
>                  continue
> -            path = os.path.join(self._abspath, f)
> -            if os.path.isdir(path) and not os.path.islink(path):
> -                shutil.rmtree(path)
> +            if self.wvfs.isdir(f) and not self.wvfs.islink(f):

Using "vfs.readdir()" instead of "os.listdir()" can avoid these
(expensive) file type examination.

> +                shutil.rmtree(self.wvfs.join(f))

I'm just working for replacing "shtuil.rmtree()" itself by vfs, and
will post that series in a day (even though this series will conflict
yours, unfortunately)

I have other patches to replace os.*/os.path.*/util.* file API
invocations in subrepo.py, too.

So, let's coordinate our vfs-migration patches, if you have also other
ones for subrepo.py.

>              else:
> -                os.remove(path)
> +                self.wvfs.unlink(f)
>  
>      def archive(self, archiver, prefix, match=None):
>          total = 0
>
> @@ -1815,8 +1814,7 @@
>                  bakname = "%s.orig" % name
>                  self.ui.note(_('saving current version of %s as %s\n') %
>                          (name, bakname))
> -                util.rename(os.path.join(self._abspath, name),
> -                            os.path.join(self._abspath, bakname))
> +                self.wvfs.rename(name, bakname)
>  
>          if not opts.get('dry_run'):
>              self.get(substate, overwrite=True)
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel

----------------------------------------------------------------------
[FUJIWARA Katsunori]                             foozy at lares.dti.ne.jp


More information about the Mercurial-devel mailing list