Patchwork [2,of,2,V3] issue6588 fix: filelog can store rev-dups - revs with same content on same parents, but on different changeID

login
register
mail settings
Submitter alexrayne
Date Sept. 26, 2021, 8:31 p.m.
Message ID <f626e7866c6ccee99854.1632688295@black2>
Download mbox | patch
Permalink /patch/49822/
State New
Headers show

Comments

alexrayne - Sept. 26, 2021, 8:31 p.m.
# HG changeset patch
# User alexrayne <alexraynepe196@gmail.com>
# Date 1632687562 -10800
#      Sun Sep 26 23:19:22 2021 +0300
# Branch stable
# Node ID f626e7866c6ccee998543847f7ed3b0f63a3c504
# Parent  bf4231a64fb22e0268aea344f03fbab1708ca3a5
issue6588 fix: filelog can store rev-dups - revs with same content on same parents, but on different changeID.

* to solve problem with rev-dups, this patch infers changes into revision meta-data - current timestamp.
Raphaël Gomès - Oct. 1, 2021, 9:24 a.m.
Sorry, I haven't had time to look into the bug or your proposed fix, and 
I'm going away for 2 weeks. Hopefully others can take a look at it soon.

Just wanted to let you know that this wasn't lost to the abyss.

Raphaël

On 9/26/21 10:31 PM, alexrayne wrote:
> # HG changeset patch
> # User alexrayne <alexraynepe196@gmail.com>
> # Date 1632687562 -10800
> #      Sun Sep 26 23:19:22 2021 +0300
> # Branch stable
> # Node ID f626e7866c6ccee998543847f7ed3b0f63a3c504
> # Parent  bf4231a64fb22e0268aea344f03fbab1708ca3a5
> issue6588 fix: filelog can store rev-dups - revs with same content on same parents, but on different changeID.
>
> * to solve problem with rev-dups, this patch infers changes into revision meta-data - current timestamp.
>
> diff --git a/mercurial/filelog.py b/mercurial/filelog.py
> --- a/mercurial/filelog.py
> +++ b/mercurial/filelog.py
> @@ -18,6 +18,7 @@
>       util as interfaceutil,
>   )
>   from .utils import storageutil
> +from .utils import dateutil
>   from .revlogutils import (
>       constants as revlog_constants,
>       rewrite,
> @@ -209,8 +210,14 @@
>   
>       def add(self, text, meta, transaction, link, p1=None, p2=None):
>           if meta or text.startswith(b'\1\n'):
> -            text = storageutil.packmeta(meta, text)
> -        rev = self.addrevision(text, transaction, link, p1, p2)
> +            revdata = storageutil.packmeta(meta, text)
> +        else :
> +            revdata = text
> +        rev = self.addrevision(revdata, transaction, link, p1, p2)
> +        if self.linkrev(rev) != link:
> +            meta[b"dup-date"] = dateutil.datestr()
> +            revdata = storageutil.packmeta(meta, text)
> +            rev = self.addrevision(revdata, transaction, link, p1, p2)
>           return self.node(rev)
>   
>       def renamed(self, node):
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Patch

# HG changeset patch
# User alexrayne <alexraynepe196@gmail.com>
# Date 1632687562 -10800
#      Sun Sep 26 23:19:22 2021 +0300
# Branch stable
# Node ID f626e7866c6ccee998543847f7ed3b0f63a3c504
# Parent  bf4231a64fb22e0268aea344f03fbab1708ca3a5
issue6588 fix: filelog can store rev-dups - revs with same content on same parents, but on different changeID.

* to solve problem with rev-dups, this patch infers changes into revision meta-data - current timestamp.

diff --git a/mercurial/filelog.py b/mercurial/filelog.py
--- a/mercurial/filelog.py
+++ b/mercurial/filelog.py
@@ -18,6 +18,7 @@ 
     util as interfaceutil,
 )
 from .utils import storageutil
+from .utils import dateutil
 from .revlogutils import (
     constants as revlog_constants,
     rewrite,
@@ -209,8 +210,14 @@ 
 
     def add(self, text, meta, transaction, link, p1=None, p2=None):
         if meta or text.startswith(b'\1\n'):
-            text = storageutil.packmeta(meta, text)
-        rev = self.addrevision(text, transaction, link, p1, p2)
+            revdata = storageutil.packmeta(meta, text)
+        else :
+            revdata = text
+        rev = self.addrevision(revdata, transaction, link, p1, p2)
+        if self.linkrev(rev) != link:
+            meta[b"dup-date"] = dateutil.datestr()
+            revdata = storageutil.packmeta(meta, text)
+            rev = self.addrevision(revdata, transaction, link, p1, p2)
         return self.node(rev)
 
     def renamed(self, node):