git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2] git-p4: Fix multi-path changelist empty commits

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 19, 2016, 17:49 UTC
Message-ID
<xmqqy3zbq05o.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<010201590ed6ecaa-740c2532-827e-4f5a-af46-0f58d0722db6-000000@eu-west-1.amazonses.com>
George Vanburgh <george@vanburgh.me> writes:
Show 27 quoted lines
> From: George Vanburgh <gvanburgh@bloomberg.net>
>
> When importing from multiple perforce paths - we may attempt to import
> a changelist that contains files from two (or more) of these depot
> paths. Currently, this results in multiple git commits - one
> containing the changes, and the other(s) as empty commit(s). This
> behavior was introduced in commit 1f90a64
> ("git-p4: reduce number of server queries for fetches", 2015-12-19).
>
> Reproduction Steps:
>
> 1. Have a git repo cloned from a perforce repo using multiple depot
> paths (e.g. //depot/foo and //depot/bar).
> 2. Submit a single change to the perforce repo that makes changes in
> both //depot/foo and //depot/bar.
> 3. Run "git p4 sync" to sync the change from #2.
>
> Change is synced as multiple commits, one for each depot path that was
> affected.
>
> Using a set, instead of a list inside p4ChangesForPaths() ensures that
> each changelist is unique to the returned list, and therefore only a
> single commit is generated for each changelist.
>
> Reported-by: James Farwell <jfarwell@vmware.com>
> Signed-off-by: George Vanburgh <gvanburgh@bloomberg.net>
> ---
Thanks, George.  Luke, can I add your "Reviewed-by:" here?
Show 69 quoted lines
>  git-p4.py               |  4 ++--
>  t/t9800-git-p4-basic.sh | 22 +++++++++++++++++++++-
>  2 files changed, 23 insertions(+), 3 deletions(-)
>
> diff --git a/git-p4.py b/git-p4.py
> index fd5ca52..6307bc8 100755
> --- a/git-p4.py
> +++ b/git-p4.py
> @@ -822,7 +822,7 @@ def p4ChangesForPaths(depotPaths, changeRange, requestedBlockSize):
>                  die("cannot use --changes-block-size with non-numeric revisions")
>              block_size = None
>  
> -    changes = []
> +    changes = set()
>  
>      # Retrieve changes a block at a time, to prevent running
>      # into a MaxResults/MaxScanRows error from the server.
> @@ -841,7 +841,7 @@ def p4ChangesForPaths(depotPaths, changeRange, requestedBlockSize):
>  
>          # Insert changes in chronological order
>          for line in reversed(p4_read_pipe_lines(cmd)):
> -            changes.append(int(line.split(" ")[1]))
> +            changes.add(int(line.split(" ")[1]))
>  
>          if not block_size:
>              break
> diff --git a/t/t9800-git-p4-basic.sh b/t/t9800-git-p4-basic.sh
> index 0730f18..4d93522 100755
> --- a/t/t9800-git-p4-basic.sh
> +++ b/t/t9800-git-p4-basic.sh
> @@ -131,6 +131,26 @@ test_expect_success 'clone two dirs, @all, conflicting files' '
>  	)
>  '
>  
> +test_expect_success 'clone two dirs, each edited by submit, single git commit' '
> +	(
> +		cd "$cli" &&
> +		echo sub1/f4 >sub1/f4 &&
> +		p4 add sub1/f4 &&
> +		echo sub2/f4 >sub2/f4 &&
> +		p4 add sub2/f4 &&
> +		p4 submit -d "sub1/f4 and sub2/f4"
> +	) &&
> +	git p4 clone --dest="$git" //depot/sub1@all //depot/sub2@all &&
> +	test_when_finished cleanup_git &&
> +	(
> +		cd "$git" &&
> +		git ls-files >lines &&
> +		test_line_count = 4 lines &&
> +		git log --oneline p4/master >lines &&
> +		test_line_count = 5 lines
> +	)
> +'
> +
>  revision_ranges="2000/01/01,#head \
>  		 1,2080/01/01 \
>  		 2000/01/01,2080/01/01 \
> @@ -147,7 +167,7 @@ test_expect_success 'clone using non-numeric revision ranges' '
>  		(
>  			cd "$git" &&
>  			git ls-files >lines &&
> -			test_line_count = 6 lines
> +			test_line_count = 8 lines
>  		)
>  	done
>  '
>
> --
> https://github.com/git/git/pull/311
Previous: George VanburghNext: Luke Diamand
Message 5 of 6 in “git-p4: Fix multi-path changelist empty commits”
  1. git-p4: Fix multi-path changelist empty commitsGeorge Vanburgh, Dec 15, 2016
  2. Luke DiamandDec 17, 2016
  3. George VanburghDec 17, 2016
  4. git-p4: Fix multi-path changelist empty commitsGeorge Vanburgh, Dec 17, 2016
  5. Junio C HamanoDec 19, 2016
  6. Luke DiamandDec 19, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.