[PATCH SnapExtension] Got it working with Mercurial 1.8 and TortoiseHg 2

Martin Geisler mg at aragost.com
Wed Apr 6 06:43:04 CDT 2011


Srećko Jurić-Kavelj <srecko.juric-kavelj at fer.hr> writes:

> # HG changeset patch
> # User Srećko Jurić-Kavelj <srecko.juric-kavelj at fer.hr>
> # Date 1300346240 -3600
> # Branch hg_1.7.5/TortoiseHG_1.1.9.1
> # Node ID 3063c9ce92dec04a9128e73bc5663806e70734af
> # Parent  ec82df41a2b5e6be0f567eed7191f57dc8a41036
> Got it working with Mercurial 1.8 and TortoiseHg 2.

That is cool. May I ask how many and how large files you manage with
this extension?

You should probably add Klaus Koch in Cc on such patches. Or you can
make a fork of his repository on Bitbucket and send him a pull request:

  https://bitbucket.org/kuk42/hgsnap/changesets

> Haven't checked all the wrapfunctions, but if there werent any notable
> changes in Mercurial API (only util.unlinkpath is documented)
> everything should work.
>
> Testing is needed.
>
> diff -r ec82df41a2b5 -r 3063c9ce92de snap.py
> --- a/snap.py	Mon Feb 14 09:01:48 2011 +0100
> +++ b/snap.py	Thu Mar 17 08:17:20 2011 +0100
> @@ -338,19 +338,19 @@
>  try:                        # TortoiseHG uses its own option parser(s)
>      import tortoisehg
>      try:
> +        import tortoisehg.hgqt.run as hgqt_run
> +        def _parseopts(ui, args):
> +            try:
> +                return hgqt_run._parse(ui, args)[-2] # 
> +            except ImportError:
> +                return dispatch._parse(ui, args)[-1] # 
> +    except ImportError:
>          import tortoisehg.hgtk.hgtk as hgtk_hgtk
>          def _parseopts(ui, args):
>              try:
>                  return hgtk_hgtk._parse(ui, args)[-2] # 
>              except ImportError:
>                  return dispatch._parse(ui, args)[-1] # 
> -    except ImportError:
> -        import tortoisehg.hgqt.run as hgqt_run
> -        def _parseopts(ui, args):
> -            try:
> -                return hgqt_run._parse(ui, args)[-2] # 
> -            except ImportError:
> -                return dispatch._parse(ui, args)[-1] # 
>  except ImportError:
>      def _parseopts(ui, args):
>          return dispatch._parse(ui, args)[-1] # 
> @@ -1259,7 +1259,7 @@
>              else:
>                  raise error.RepoError(_('no store at %s') % self.path)
>  
> -        self.store = store.basicstore(self.path, util.opener, os.path.join)
> +        self.store = store.basicstore(self.path, util.opener)
>          self.opener = self.store.opener
>          self.createmode = self.store.createmode
>  
> @@ -1388,7 +1388,7 @@
>          finally:
>              _close(fdest)
>              if os.path.lexists(ftmp):
> -                util.unlink(ftmp)
> +                util.unlinkpath(ftmp)
>  
>          try:           # just a very rudimentary check of file consistency
>              stdest = snapStoreFile(dest, 'r')
> @@ -1769,7 +1769,7 @@
>                                        (realsize, size))
>              self.sendresponse('')
>          except (IOError, OSError, Exception), e:
> -            util.unlink(tempname)
> +            util.unlinkpath(tempname)
>              self.sendresponse(str(e))
>          return tempname
>  
> @@ -1835,7 +1835,7 @@
>          except error.RepoError, e:
>              raise util.Abort(error.RepoError(_('snapget failed: %s') % e))
>          finally:
> -            util.unlink(tempname)
> +            util.unlinkpath(tempname)
>  
>      def snappush(self, remote, src):
>          return remote.snappull(remote=self, src=src)
> @@ -3139,7 +3139,7 @@
>                  fname = util.normpath(name[5:-2]) # strip data/ and .i
>                  for i in flog:
>                      n = flog.node(i)
> -                    if 'snap' in flog._readmeta(n): # 
> +                    if 'snap' in filelog._parsemeta(flog.revision(n)): # 
>                          s = flog.read(n)
>                          sname = snappedname(repo, s)
>                          snapfiles.add(sname)
> @@ -3356,7 +3356,7 @@
>          if self.path().startswith('.hg') or 'l' in self.flags():
>              return False
>          flog = self.filelog()
> -        return 'snap' in flog._readmeta(self.filenode()) # 
> +        return 'snap' in filelog._parsemeta(flog.revision(self.filenode())) # 
>  
>      for cls in (context.filectx, context.workingfilectx):
>          if not (getattr(cls, 'issnap', fctxissnap).func_name in
> @@ -3386,7 +3386,7 @@
>      def filelogsize(orig, self, rev):
>          """return the size of a given revision considering any meta"""
>          node = self.node(rev)
> -        m = self._readmeta(node)
> +        m = filelog._parsemeta(self.revision(node))
>          if m:
>              return len(self.read(node))
>          return revlog.revlog.size(self, rev)

-- 
Martin Geisler

aragost Trifork
Professional Mercurial support
http://mercurial.aragost.com/kick-start/


More information about the Mercurial-devel mailing list