From: George Vanburgh <george@vanburgh.me>
To: Luke Diamand <luke@diamand.org>
Cc: Git Users <git@vger.kernel.org>
Subject: Re: [PATCH] git-p4: Fix multi-path changelist empty commits
Date: Sat, 17 Dec 2016 03:25:03 +0100 [thread overview]
Message-ID: <2BE8EE6F-F718-475A-A2BA-483F39F5B9A0@vanburgh.me> (raw)
In-Reply-To: <CAE5ih7-+tahL4=OrW6F6UPKKRg1KFkw32e=pnTx6j2WTZ-BhOw@mail.gmail.com>
On 17 December 2016 01:47:55 CET, Luke Diamand <luke@diamand.org> wrote:
>On 15 December 2016 at 17:14, George Vanburgh <george@vanburgh.me>
>wrote:
>> 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 commits. This
>behavior was introduced in commit 1f90a64 ("git-p4: reduce number of
>server queries for fetches", 2015-12-19).
>
>That's definitely a bug, thanks for spotting that! Even more so for
>adding a test case.
Not a problem - thanks to you guys for maintaining such an awesome tool!
>
>>
>> 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.
>
>The change looks good to me apart from one missing "&&" in the test
>case (see below).
Oops - I'll correct that and resubmit :)
>Possibly need to rewrap the comment line (I think there's a 72
>character limit) ?
Sure - I'll fix that in the resubmission
>
>Luke
>
>
>>
>> Reported-by: James Farwell <jfarwell@vmware.com>
>> Signed-off-by: George Vanburgh <gvanburgh@bloomberg.net>
>> ---
>> 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..4d72e0b 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"
>
>Missing &&
>
>> + 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
next prev parent reply other threads:[~2016-12-17 2:25 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-15 17:14 [PATCH] git-p4: Fix multi-path changelist empty commits George Vanburgh
2016-12-17 0:47 ` Luke Diamand
2016-12-17 2:25 ` George Vanburgh [this message]
2016-12-17 22:11 ` [PATCH v2] " George Vanburgh
2016-12-19 17:49 ` Junio C Hamano
2016-12-19 17:56 ` Luke Diamand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2BE8EE6F-F718-475A-A2BA-483F39F5B9A0@vanburgh.me \
--to=george@vanburgh.me \
--cc=git@vger.kernel.org \
--cc=luke@diamand.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).