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

[PATCH 2/2] git-p4: Added copy detection support

From
Vitor Antunes <vitor.hda@gmail.com>
Date
Nov 19, 2010, 01:38 UTC
Message-ID
<1290130693-30855-3-git-send-email-vitor.hda@gmail.com>
In-Reply-To
<1290130693-30855-1-git-send-email-vitor.hda@gmail.com>
Added new config options:
    git-p4.detectCopies         - Enable copy detection.
    git-p4.detectCopiesHarder   - Find copies harder.
The detectCopies option should be set to the desired threshold value.
The detectCopiesHarder option receives a simple true/false value.
P4Submit is now able to process diff-tree C status.
---
 contrib/fast-import/git-p4 |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4
index ba18512..0ea3a44 100755
--- a/contrib/fast-import/git-p4
+++ b/contrib/fast-import/git-p4
@@ -620,6 +620,14 @@ class P4Submit(Command):
         else:
             diffOpts = ("", "-M")[self.detectRenames]
 
+        detectCopies = gitConfig("git-p4.detectCopies")
+        if len(detectCopies) > 0:
+            diffOpts += " -C%s" % detectCopies
+
+        detectCopiesHarder = gitConfig("git-p4.detectCopiesHarder")
+        if len(detectCopiesHarder) > 0 and detectCopiesHarder.lower() != "false":
+            diffOpts += " --find-copies-harder"
+
         diff = read_pipe_lines("git diff-tree -r %s \"%s^\" \"%s\"" % (diffOpts, id, id))
         filesToAdd = set()
         filesToDelete = set()
@@ -643,6 +651,15 @@ class P4Submit(Command):
                 filesToDelete.add(path)
                 if path in filesToAdd:
                     filesToAdd.remove(path)
+            elif modifier == "C":
+                src, dest = diff['src'], diff['dst']
+                p4_system("integrate -Dt \"%s\" \"%s\"" % (src, dest))
+                if diff['src_sha1'] != diff['dst_sha1']:
+                    p4_system("edit \"%s\"" % (dest))
+                if isModeExecChanged(diff['src_mode'], diff['dst_mode']):
+                    filesToChangeExecBit[dest] = diff['dst_mode']
+                os.unlink(dest)
+                editedFiles.add(dest)
             elif modifier == "R":
                 src, dest = diff['src'], diff['dst']
                 p4_system("integrate -Dt \"%s\" \"%s\"" % (src, dest))
-- 
1.7.2.3
Previous: Thomas Berg
Message 15 of 15 in “git-p4: Rename and copy detection improvements.”
  1. 0/2 git-p4: Rename and copy detection improvements.Vitor Antunes, Nov 19, 2010
  2. 1/2 git-p4: Don't edit renamed files if not necessary.Vitor Antunes, Nov 19, 2010
  3. Vitor AntunesNov 19, 2010
  4. git-p4: Corrected typo.Vitor Antunes, Nov 25, 2010
  5. Vitor AntunesJan 27, 2011
  6. Thomas BergJan 28, 2011
  7. Vitor AntunesJan 29, 2011
  8. Vitor AntunesJan 30, 2011
  9. Thomas BergJan 30, 2011
  10. Vitor AntunesJan 31, 2011
  11. Thomas BergJan 31, 2011
  12. Vitor AntunesJan 31, 2011
  13. Vitor AntunesJan 31, 2011
  14. Thomas BergFeb 4, 2011
  15. 2/2 git-p4: Added copy detection supportVitor Antunes, Nov 19, 2010

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.