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

[PATCH v7 4/7] git-p4: add file streaming progress in verbose mode

From
larsxschneider@gmail.com <larsxschneider@gmail.com>
Date
Sep 21, 2015, 22:41 UTC
Message-ID
<1442875273-48610-5-git-send-email-larsxschneider@gmail.com>
In-Reply-To
<1442875273-48610-1-git-send-email-larsxschneider@gmail.com>
From: Lars Schneider <larsxschneider@gmail.com>

If a file is streamed from P4 to Git then the verbose mode prints continuously the progress as percentage like this: //depot/file.bin 20% (10 MB)

Upon completion the progress is overwritten with depot source, local file and size like this: //depot/file.bin --> local/file.bin (10 MB)

Signed-off-by: Lars Schneider <larsxschneider@gmail.com>
---
 git-p4.py | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/git-p4.py b/git-p4.py
index e7d1b3f..fabc900 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -2171,7 +2171,9 @@ class P4Sync(Command, P4UserMap):
     def streamOneP4File(self, file, contents):
         relPath = self.stripRepoPath(file['depotFile'], self.branchPrefixes)
         if verbose:
-            sys.stderr.write("%s\n" % relPath)
+            size = int(self.stream_file['fileSize'])
+            sys.stdout.write('\r%s --> %s (%i MB)\n' % (file['depotFile'], relPath, size/1024/1024))
+            sys.stdout.flush()
 
         (type_base, type_mods) = split_p4_type(file["type"])
 
@@ -2258,7 +2260,8 @@ class P4Sync(Command, P4UserMap):
     def streamOneP4Deletion(self, file):
         relPath = self.stripRepoPath(file['path'], self.branchPrefixes)
         if verbose:
-            sys.stderr.write("delete %s\n" % relPath)
+            sys.stdout.write("delete %s\n" % relPath)
+            sys.stdout.flush()
         self.gitStream.write("D %s\n" % relPath)
 
     # handle another chunk of streaming data
@@ -2298,10 +2301,23 @@ class P4Sync(Command, P4UserMap):
         # 'data' field we need to append to our array
         for k in marshalled.keys():
             if k == 'data':
+                if 'streamContentSize' not in self.stream_file:
+                    self.stream_file['streamContentSize'] = 0
+                self.stream_file['streamContentSize'] += len(marshalled['data'])
                 self.stream_contents.append(marshalled['data'])
             else:
                 self.stream_file[k] = marshalled[k]
 
+        if (verbose and
+            'streamContentSize' in self.stream_file and
+            'fileSize' in self.stream_file and
+            'depotFile' in self.stream_file):
+            size = int(self.stream_file["fileSize"])
+            if size > 0:
+                progress = 100*self.stream_file['streamContentSize']/size
+                sys.stdout.write('\r%s %d%% (%i MB)' % (self.stream_file['depotFile'], progress, int(size/1024/1024)))
+                sys.stdout.flush()
+
         self.stream_have_file_info = True
 
     # Stream directly from "p4 files" into "git fast-import"
-- 
2.5.1
Previous: larsxschneider@gmail.comNext: larsxschneider@gmail.com
Message 7 of 21 in “git-p4: add support for large file systems”
  1. 0/7 git-p4: add support for large file systemslarsxschneider@gmail.com, Sep 21, 2015
  2. 1/7 git-p4: add optional type specifier to gitConfig readerlarsxschneider@gmail.com, Sep 21, 2015
  3. Junio C HamanoSep 22, 2015
  4. Lars SchneiderSep 23, 2015
  5. 2/7 git-p4: add gitConfigInt readerlarsxschneider@gmail.com, Sep 21, 2015
  6. 3/7 git-p4: return an empty list if a list config has no valueslarsxschneider@gmail.com, Sep 21, 2015
  7. 4/7 git-p4: add file streaming progress in verbose modelarsxschneider@gmail.com, Sep 21, 2015
  8. 5/7 git-p4: check free space during streaminglarsxschneider@gmail.com, Sep 21, 2015
  9. 6/7 git-p4: add support for large file systemslarsxschneider@gmail.com, Sep 21, 2015
  10. Luke DiamandSep 25, 2015
  11. 7/7 git-p4: add Git LFS backend for large file systemlarsxschneider@gmail.com, Sep 21, 2015
  12. Junio C HamanoSep 22, 2015
  13. Lars SchneiderSep 23, 2015
  14. Luke DiamandSep 23, 2015
  15. Lars SchneiderSep 23, 2015
  16. Lars SchneiderSep 23, 2015
  17. Luke DiamandSep 23, 2015
  18. Lars SchneiderSep 23, 2015
  19. Luke DiamandSep 24, 2015
  20. Lars SchneiderSep 25, 2015
  21. Luke DiamandSep 25, 2015

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.