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

4 messages from 2009-01-28 to 2009-02-23. Participants: Pete Wyckoff, Simon Hausmann.
Thread: https://gitlist.dev/t/17418

## Pete Wyckoff, 2009-01-28 16:45

Subject: [PATCH] git-p4: avoid syncing duplicate changes
Message-ID: <20090128164540.GA2137@padd.com>
URL: https://gitlist.dev/e/20090128164540.GA2137%40padd.com

```
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)
 
     changes.sort()
     return changes
-- 
1.6.0.6

```

## Simon Hausmann, 2009-02-05 15:24

Subject: Re: [PATCH] git-p4: avoid syncing duplicate changes
Message-ID: <200902051624.51636.simon@lst.de>
URL: https://gitlist.dev/e/200902051624.51636.simon%40lst.de
In-Reply-To: <20090128164540.GA2137@padd.com>

```
On Wednesday 28 January 2009 Pete Wyckoff, wrote:
> 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, 2009-02-18 18:12

Subject: [PATCH v2] git-p4: avoid syncing duplicate changes
Message-ID: <20090218181214.GA21970@padd.com>
URL: https://gitlist.dev/e/20090218181214.GA21970%40padd.com
In-Reply-To: <200902051624.51636.simon@lst.de>

```
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(-)

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, 2009-02-23 17:08

Subject: Re: [PATCH v2] git-p4: avoid syncing duplicate changes
Message-ID: <200902231808.11072.simon@lst.de>
URL: https://gitlist.dev/e/200902231808.11072.simon%40lst.de
In-Reply-To: <20090218181214.GA21970@padd.com>

```
On Wednesday 18 February 2009 Pete Wyckoff, wrote:
> 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

> 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]))
>  
> -    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
> 
> 

```
