# [PATCH 0/2] git-p4: unshelve uses HEAD^n, not HEAD~n

5 messages from 2020-09-19 to 2020-09-20. Participants: Luke Diamand, Eric Sunshine.
Thread: https://gitlist.dev/t/54260

## Luke Diamand, 2020-09-19 08:54

Subject: [PATCH 0/2] git-p4: unshelve uses HEAD^n, not HEAD~n
Message-ID: <20200919085441.7621-1-luke@diamand.org>
URL: https://gitlist.dev/e/20200919085441.7621-1-luke%40diamand.org

```
Jackson(Xuhui) Liu found that git-p4 unshelve fails, and suggested a
fix.

I have updated the tests to spot the error, and added his suggested fix,
which also works for me.

Luke Diamand (2):
  git-p4 unshelve: adding a commit breaks git-p4 unshelve
  git-p4: use HEAD~$n to find parent commit for unshelve

 git-p4.py           | 2 +-
 t/t9832-unshelve.sh | 5 ++++-
 2 files changed, 5 insertions(+), 2 deletions(-)

-- 
2.28.0


```

## Luke Diamand, 2020-09-19 08:54

Subject: [PATCH 1/2] git-p4 unshelve: adding a commit breaks git-p4 unshelve
Message-ID: <20200919085441.7621-2-luke@diamand.org>
URL: https://gitlist.dev/e/20200919085441.7621-2-luke%40diamand.org
In-Reply-To: <20200919085441.7621-1-luke@diamand.org>

```
git-p4 unshelve uses HEAD^$n to find the parent commit, which
fails if there is an additional commit.

Signed-off-by: Luke Diamand <luke@diamand.org>
---
 t/t9832-unshelve.sh | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/t/t9832-unshelve.sh b/t/t9832-unshelve.sh
index e9276c48f4..feda4499dd 100755
--- a/t/t9832-unshelve.sh
+++ b/t/t9832-unshelve.sh
@@ -29,8 +29,11 @@ test_expect_success 'init depot' '
 	)
 '
 
+# Create an initial clone, with a commit unrelated to the P4 change
+# on HEAD
 test_expect_success 'initial clone' '
-	git p4 clone --dest="$git" //depot/@all
+	git p4 clone --dest="$git" //depot/@all &&
+    test_commit -C "$git" "unrelated"
 '
 
 test_expect_success 'create shelved changelist' '
@@ -77,7 +80,7 @@ EOF
 	)
 '
 
-test_expect_success 'update shelved changelist and re-unshelve' '
+test_expect_failure 'update shelved changelist and re-unshelve' '
 	test_when_finished cleanup_git &&
 	(
 		cd "$cli" &&
-- 
2.28.0


```

## Luke Diamand, 2020-09-19 08:54

Subject: [PATCH 2/2] git-p4: use HEAD~$n to find parent commit for unshelve
Message-ID: <20200919085441.7621-3-luke@diamand.org>
URL: https://gitlist.dev/e/20200919085441.7621-3-luke%40diamand.org
In-Reply-To: <20200919085441.7621-2-luke@diamand.org>

```
Found-by: Liu Xuhui (Jackson) <Xuhui.Liu@amd.com>
Signed-off-by: Luke Diamand <luke@diamand.org>
---
 git-p4.py           | 2 +-
 t/t9832-unshelve.sh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/git-p4.py b/git-p4.py
index ca79dc0900..4433ca53de 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -4237,7 +4237,7 @@ def findLastP4Revision(self, starting_point):
         """
 
         for parent in (range(65535)):
-            log = extractLogMessageFromGitCommit("{0}^{1}".format(starting_point, parent))
+            log = extractLogMessageFromGitCommit("{0}~{1}".format(starting_point, parent))
             settings = extractSettingsGitLog(log)
             if 'change' in settings:
                 return settings
diff --git a/t/t9832-unshelve.sh b/t/t9832-unshelve.sh
index feda4499dd..7194fb2855 100755
--- a/t/t9832-unshelve.sh
+++ b/t/t9832-unshelve.sh
@@ -80,7 +80,7 @@ EOF
 	)
 '
 
-test_expect_failure 'update shelved changelist and re-unshelve' '
+test_expect_success 'update shelved changelist and re-unshelve' '
 	test_when_finished cleanup_git &&
 	(
 		cd "$cli" &&
-- 
2.28.0


```

## Eric Sunshine, 2020-09-20 05:31

Subject: Re: [PATCH 1/2] git-p4 unshelve: adding a commit breaks git-p4 unshelve
Message-ID: <CAPig+cSx35oTR_Er-DyxqV0HZw+tDHPf1GdARfw=-2bhTz02gw@mail.gmail.com>
URL: https://gitlist.dev/e/CAPig%2BcSx35oTR_Er-DyxqV0HZw%2BtDHPf1GdARfw%3D-2bhTz02gw%40mail.gmail.com
In-Reply-To: <20200919085441.7621-2-luke@diamand.org>

```
On Sat, Sep 19, 2020 at 4:54 AM Luke Diamand <luke@diamand.org> wrote:
> git-p4 unshelve: adding a commit breaks git-p4 unshelve
>
> git-p4 unshelve uses HEAD^$n to find the parent commit, which
> fails if there is an additional commit.

It was a bit difficult understanding the purpose of this patch based
upon the commit message alone. It might be clearer if written like
this:

    git-p4: demonstrate `unshelve` bug

    `git p4 unshelve` uses HEAD^$n to find the parent commit, which
    fails if there is an additional commit. Augment the tests to
    demonstrate this problem.

> Signed-off-by: Luke Diamand <luke@diamand.org>
> ---
> diff --git a/t/t9832-unshelve.sh b/t/t9832-unshelve.sh
> @@ -29,8 +29,11 @@ test_expect_success 'init depot' '
> +# Create an initial clone, with a commit unrelated to the P4 change
> +# on HEAD
>  test_expect_success 'initial clone' '
> -       git p4 clone --dest="$git" //depot/@all
> +       git p4 clone --dest="$git" //depot/@all &&
> +    test_commit -C "$git" "unrelated"
>  '

Strange indentation of the new line. Use TAB rather than spaces.

```

## Eric Sunshine, 2020-09-20 05:34

Subject: Re: [PATCH 2/2] git-p4: use HEAD~$n to find parent commit for unshelve
Message-ID: <CAPig+cQ2ccTC+d85A7HCHWeUp1aPgj-LBvbcO_Bv-nVkvTm=RQ@mail.gmail.com>
URL: https://gitlist.dev/e/CAPig%2BcQ2ccTC%2Bd85A7HCHWeUp1aPgj-LBvbcO_Bv-nVkvTm%3DRQ%40mail.gmail.com
In-Reply-To: <20200919085441.7621-3-luke@diamand.org>

```
On Sat, Sep 19, 2020 at 4:54 AM Luke Diamand <luke@diamand.org> wrote:
> git-p4: use HEAD~$n to find parent commit for unshelve

This commit message repeats what the patch itself says but doesn't
explain why this change is being made or what problem is being solved.
Some explanation to help readers understand the problem would be
welcome.

> Found-by: Liu Xuhui (Jackson) <Xuhui.Liu@amd.com>

I believe this would generally be stated as Reported-by:.

> Signed-off-by: Luke Diamand <luke@diamand.org>

```
