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

[PATCH] git-p4: fix issue with multiple perforce remotes

From
KGKirill Frolov via GitGitGadget <gitgitgadget@gmail.com>
Date
Mar 21, 2022, 12:43 UTC
Message-ID
<pull.1180.git.1647866603032.gitgitgadget@gmail.com>
From: Kirill Frolov <k.frolov@samsung.com>

Single perforce branch might be sync'ed multiple times with different revision numbers, so it will be seen to Git as complete different commits. This can be done by the following command:

  git p4 sync --branch=NAME //perforce/path...

It is assumed, that this command applied multiple times and peforce repository changes between command invocations.

In such situation, git p4 will see multiple perforce branches with same name and different revision numbers. The problem is that to make a shelve, git-p4 script will try to find "origin" branch, if not specified in command line explicitly. And previously script selected any branch with same name and don't mention particular revision number. Later this may cause failure of the command "git diff-tree -r $rev^ $rev", so shelve can't be created (due to wrong origin branch/commit).

This commit fixes the heuristic by which git p4 selects origin branch: first it tries to select branch with same perforce path and perforce revision, and if it fails, then selects branch with only same perforce path (ignoring perforce revision number).

Signed-off-by: Kirill Frolov <k.frolov@samsung.com>
---
    git-p4: fix issue with perforce branch synchronized multiple times.
    
    Perforce branch might be sync'ed multiple times with different revision
    numbers (by the command "git p4 sync --branch=NAME //perforce/path...")
    
    In such situation, git p4 will see multiple perforce branches with same
    name and different revision numbers. The problem is that to make a
    shelve, git-p4 script will try to find "origin" branch, if not specified
    in command line explicitly. And previously script selected any branch
    with same name and don't mention particular revision number. Later this
    may cause failure of the command "git diff-tree -r $rev^ $rev", so
    shelve can't be created (due to wrong origin branch/commit).
    
    This commit fixes the heuristic by which git p4 selects origin branch:
    first it tries to select branch with same perforce path and perforce
    revision, and if it fails, then selects branch with only same perforce
    path (ignoring perforce revision number).
    
    Signed-off-by: Kirill Frolov k.frolov@samsung.com
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1180%2Fkfrolov%2Fperforce_multi_fix-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1180/kfrolov/perforce_multi_fix-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/1180
 git-p4.py | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/git-p4.py b/git-p4.py
index a9b1f904410..4903e86351d 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -946,8 +946,12 @@ def findUpstreamBranchPoint(head = "HEAD"):
         log = extractLogMessageFromGitCommit(tip)
         settings = extractSettingsGitLog(log)
         if "depot-paths" in settings:
+            git_branch = "remotes/p4/" + branch
             paths = ",".join(settings["depot-paths"])
-            branchByDepotPath[paths] = "remotes/p4/" + branch
+            branchByDepotPath[paths] = git_branch
+            if "change" in settings:
+                paths = paths + ";" + settings["change"]
+                branchByDepotPath[paths] = git_branch
 
     settings = None
     parent = 0
@@ -957,6 +961,10 @@ def findUpstreamBranchPoint(head = "HEAD"):
         settings = extractSettingsGitLog(log)
         if "depot-paths" in settings:
             paths = ",".join(settings["depot-paths"])
+            if "change" in settings:
+                expaths = paths + ";" + settings["change"]
+                if expaths in branchByDepotPath:
+                    return [branchByDepotPath[expaths], settings]
             if paths in branchByDepotPath:
                 return [branchByDepotPath[paths], settings]
 

base-commit: 74cc1aa55f30ed76424a0e7226ab519aa6265061
-- 
gitgitgadget
Message 1 of 1 in “git-p4: fix issue with multiple perforce remotes”
  1. git-p4: fix issue with multiple perforce remotesKirill Frolov via GitGitGadget, Mar 21, 2022

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.