threads / patch / 17418

patchgit-p4: avoid syncing duplicate changes

Subject: [PATCH] git-p4: avoid syncing duplicate changes

## tl;dr

4 messages between Jan 28, 2009 and Feb 23, 2009. Diffs are folded; open one to read it.

replies: 3people: 2as markdown or json

Pete Wyckoff· Jan 28, 2009, 16:45 UTC · lore

When a particular changeset affects multiple depot paths, it will appear multiple times in the output of "p4 changes". Filter out the duplicates to avoid the extra empty commits that this would otherwise create.

Signed-off-by: Pete Wyckoff <pw@padd.com>
---
 contrib/fast-import/git-p4 |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
Show changes to contrib/fast-import/git-p4 +3 −2
diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4
index a85a7b2..63c8eca 100755
--- a/contrib/fast-import/git-p4
+++ b/contrib/fast-import/git-p4
@@ -444,8 +444,9 @@ def p4ChangesForPaths(depotPaths, changeRange):
 
     changes = []
     for line in output:
-        changeNum = line.split(" ")[1]
-        changes.append(int(changeNum))
+	changeNum = int(line.split(" ")[1])
+	if changeNum not in changes:
+	    changes.append(changeNum)
 
     changes.sort()
     return changes
-- 
1.6.0.6
Simon Hausmann· Feb 5, 2009, 15:24 UTC · re: Pete Wyckoff · lore

Re: [PATCH] git-p4: avoid syncing duplicate changes

On Wednesday 28 January 2009 Pete Wyckoff, wrote:
Show 23 quoted lines
> When a particular changeset affects multiple depot paths, it
> will appear multiple times in the output of "p4 changes".
> Filter out the duplicates to avoid the extra empty commits that
> this would otherwise create.
> 
> Signed-off-by: Pete Wyckoff <pw@padd.com>
> ---
>  contrib/fast-import/git-p4 |    5 +++--
>  1 files changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4
> index a85a7b2..63c8eca 100755
> --- a/contrib/fast-import/git-p4
> +++ b/contrib/fast-import/git-p4
> @@ -444,8 +444,9 @@ def p4ChangesForPaths(depotPaths, changeRange):
>  
>      changes = []
>      for line in output:
> -        changeNum = line.split(" ")[1]
> -        changes.append(int(changeNum))
> +	changeNum = int(line.split(" ")[1])
> +	if changeNum not in changes:
> +	    changes.append(changeNum)
Hmm, isn't this a potentially quadratic operation?
I agree about the problem in general though.
Simon
Pete Wyckoff· Feb 18, 2009, 18:12 UTC · re: Simon Hausmann · lore

[PATCH v2] git-p4: avoid syncing duplicate changes

When a particular changeset affects multiple depot paths, it will appear multiple times in the output of "p4 changes". Filter out the duplicates to avoid the extra empty commits that this otherwise would create.

Signed-off-by: Pete Wyckoff <pw@padd.com>
---
Switched to a dictionary to avoid the quadratic behavior,
as pointed out by Simon.
 contrib/fast-import/git-p4 |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)
Show changes to contrib/fast-import/git-p4 +6 −5
diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4
index a85a7b2..3832f60 100755
--- a/contrib/fast-import/git-p4
+++ b/contrib/fast-import/git-p4
@@ -442,13 +442,14 @@ def p4ChangesForPaths(depotPaths, changeRange):
     output = p4_read_pipe_lines("changes " + ' '.join (["%s...%s" % (p, changeRange)
                                                         for p in depotPaths]))
 
-    changes = []
+    changes = {}
     for line in output:
-        changeNum = line.split(" ")[1]
-        changes.append(int(changeNum))
+	changeNum = int(line.split(" ")[1])
+	changes[changeNum] = True
 
-    changes.sort()
-    return changes
+    changelist = changes.keys()
+    changelist.sort()
+    return changelist
 
 class Command:
     def __init__(self):
-- 
1.6.0.6
Simon Hausmann· Feb 23, 2009, 17:08 UTC · re: Pete Wyckoff · lore

Re: [PATCH v2] git-p4: avoid syncing duplicate changes

On Wednesday 18 February 2009 Pete Wyckoff, wrote:
Show 6 quoted lines
> When a particular changeset affects multiple depot paths, it
> will appear multiple times in the output of "p4 changes".
> Filter out the duplicates to avoid the extra empty commits that
> this otherwise would create.
> 
> Signed-off-by: Pete Wyckoff <pw@padd.com>
Acked-by: Simon Hausmann <simon@lst.de>
Nice patch, thanks :)
Simon
Show 12 quoted lines
> Switched to a dictionary to avoid the quadratic behavior,
> as pointed out by Simon.
> 
>  contrib/fast-import/git-p4 |   11 ++++++-----
>  1 files changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4
> index a85a7b2..3832f60 100755
> --- a/contrib/fast-import/git-p4
> +++ b/contrib/fast-import/git-p4
> @@ -442,13 +442,14 @@ def p4ChangesForPaths(depotPaths, changeRange):
>      output = p4_read_pipe_lines("changes " + ' '.join (["%s...%s" % (p, 
changeRange)
>                                                          for p in 
depotPaths]))
Show 21 quoted lines
>  
> -    changes = []
> +    changes = {}
>      for line in output:
> -        changeNum = line.split(" ")[1]
> -        changes.append(int(changeNum))
> +	changeNum = int(line.split(" ")[1])
> +	changes[changeNum] = True
>  
> -    changes.sort()
> -    return changes
> +    changelist = changes.keys()
> +    changelist.sort()
> +    return changelist
>  
>  class Command:
>      def __init__(self):
> -- 
> 1.6.0.6
> 
> 

← back to recent threads