[PATCH 3 of 3 STABLE] transactions: change backupfiles format to use newlines

Augie Fackler raf at durin42.com
Tue Oct 21 21:46:07 CDT 2014


On Tue, Oct 21, 2014 at 12:58:36PM -0700, Durham Goode wrote:
> # HG changeset patch
> # User Durham Goode <durham at fb.com>
> # Date 1413920308 25200
> #      Tue Oct 21 12:38:28 2014 -0700
> # Branch stable
> # Node ID 4407a3d98344f7e7bacd19c5d0adf579e76b1813
> # Parent  b4a651b82658895889a0f53f93fd75f59590c18d
> transactions: change backupfiles format to use newlines

queued these for stable, thanks

>
> Previously the journal.backupfiles file was delimited by \0. Now we delimit it
> using \n (same as the journal file). This allows us to change the number of
> values in each line more easily, rather than relying on the count of \0's.
>
> diff --git a/mercurial/transaction.py b/mercurial/transaction.py
> --- a/mercurial/transaction.py
> +++ b/mercurial/transaction.py
> @@ -128,7 +128,7 @@ class transaction(object):
>          self.file.write(d)
>          self.file.flush()
>
> -        d = ''.join(['%s\0%s\0' % (f, b) for f, b in backups])
> +        d = ''.join(['%s\0%s\n' % (f, b) for f, b in backups])
>          self.backupsfile.write(d)
>          self.backupsfile.flush()
>
> @@ -177,7 +177,7 @@ class transaction(object):
>
>          self.backupentries.append((file, backupfile, None))
>          self.backupmap[file] = len(self.backupentries) - 1
> -        self.backupsfile.write("%s\0%s\0" % (file, backupfile))
> +        self.backupsfile.write("%s\0%s\n" % (file, backupfile))
>          self.backupsfile.flush()
>
>      @active
> @@ -349,20 +349,16 @@ def rollback(opener, file, report):
>      backupjournal = "%s.backupfiles" % file
>      if opener.exists(backupjournal):
>          fp = opener.open(backupjournal)
> -        data = fp.read()
> -        if len(data) > 0:
> -            ver = version
> -            versionend = data.find('\n')
> -            if versionend != -1:
> -                ver = data[:versionend]
> -                data = data[versionend + 1:]
> -
> +        lines = fp.readlines()
> +        if lines:
> +            ver = lines[0][:-1]
>              if ver == str(version):
> -                parts = data.split('\0')
> -                # Skip the final part, since it's just a trailing empty space
> -                for i in xrange(0, len(parts) - 1, 2):
> -                    f, b = parts[i:i + 2]
> -                    backupentries.append((f, b, None))
> +                for line in lines[1:]:
> +                    if line:
> +                        # Shave off the trailing newline
> +                        line = line[:-1]
> +                        f, b = line.split('\0')
> +                        backupentries.append((f, b, None))
>              else:
>                  report(_("journal was created by a newer version of "
>                           "Mercurial"))
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list