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

[PATCH 12/20] remote-bzr: split marks file

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Apr 26, 2013, 01:08 UTC
Message-ID
<1366938488-25425-13-git-send-email-felipe.contreras@gmail.com>
In-Reply-To
<1366938488-25425-1-git-send-email-felipe.contreras@gmail.com>

This way all the remotes can share the same git objects, and the same marks. The information we want to store per remote is very small.

The code transparently converts from one organization of marks, to the other. It's rather smooth and there shouldn't be any issues.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/remote-helpers/git-remote-bzr | 58 ++++++++++++++++++++++++++---------
 1 file changed, 43 insertions(+), 15 deletions(-)
diff --git a/contrib/remote-helpers/git-remote-bzr b/contrib/remote-helpers/git-remote-bzr
index 9fe830e..fcd8e41 100755
--- a/contrib/remote-helpers/git-remote-bzr
+++ b/contrib/remote-helpers/git-remote-bzr
@@ -52,22 +52,42 @@ def gittz(tz):
 
 class Marks:
 
-    def __init__(self, path):
-        self.path = path
+    def __init__(self, gitdir, dirname):
+        self.marks_path = os.path.join(gitdir, 'bzr', '.marks-bzr')
+        self.remote_path = os.path.join(dirname, '.marks-bzr')
+        old_path = os.path.join(dirname, 'marks-int')
+
         self.tips = {}
         self.marks = {}
         self.rev_marks = {}
         self.last_mark = 0
-        self.load()
+
+        if not os.path.exists(old_path):
+            self.load()
+        else:
+            self.old_load(old_path)
+            os.remove(old_path)
 
     def load(self):
-        if not os.path.exists(self.path):
-            return
 
-        tmp = json.load(open(self.path))
+        if os.path.exists(self.marks_path):
+            tmp = json.load(open(self.marks_path))
+            self.marks = tmp['marks']
+            self.last_mark = tmp['last-mark']
+
+            for rev, mark in self.marks.iteritems():
+                self.rev_marks[mark] = rev
+
+        if os.path.exists(self.remote_path):
+            tmp = json.load(open(self.remote_path))
+            self.tips = tmp['tips']
+
+    def old_load(self, path):
+
+        tmp = json.load(open(path))
         self.tips = tmp['tips']
-        self.marks = tmp['marks']
-        self.last_mark = tmp['last-mark']
+        self.marks = tmp['marks'] # TODO remove
+        self.last_mark = tmp['last-mark'] # TODO remove
 
         for rev, mark in self.marks.iteritems():
             self.rev_marks[mark] = rev
@@ -76,7 +96,10 @@ class Marks:
         return { 'tips': self.tips, 'marks': self.marks, 'last-mark' : self.last_mark }
 
     def store(self):
-        json.dump(self.dict(), open(self.path, 'w'))
+        d = { 'marks': self.marks, 'last-mark' : self.last_mark }
+        json.dump(d, open(self.marks_path, 'w'))
+        d = { 'tips': self.tips }
+        json.dump(d, open(self.remote_path, 'w'))
 
     def __str__(self):
         return str(self.dict())
@@ -348,10 +371,10 @@ def export_tag(repo, name):
     print
 
 def do_import(parser):
-    global dirname
+    global gitdir
 
     repo = parser.repo
-    path = os.path.join(dirname, 'marks-git')
+    path = os.path.join(gitdir, 'bzr', '.marks-git')
 
     print "feature done"
     if os.path.exists(path):
@@ -678,14 +701,14 @@ def do_export(parser):
     print
 
 def do_capabilities(parser):
-    global dirname
+    global gitdir
 
     print "import"
     print "export"
     print "refspec refs/heads/*:%s/heads/*" % prefix
     print "refspec refs/tags/*:%s/tags/*" % prefix
 
-    path = os.path.join(dirname, 'marks-git')
+    path = os.path.join(gitdir, 'bzr', '.marks-git')
 
     if os.path.exists(path):
         print "*import-marks %s" % path
@@ -848,8 +871,13 @@ def main(args):
 
     repo = get_repo(url, alias)
 
-    marks_path = os.path.join(dirname, 'marks-int')
-    marks = Marks(marks_path)
+    marks = Marks(gitdir, dirname)
+
+    # move old marks
+    old_gitmarks = os.path.join(dirname, 'marks-git')
+    new_gitmarks = os.path.join(gitdir, 'bzr', '.marks-git')
+    if os.path.exists(old_gitmarks):
+        os.rename(old_gitmarks, new_gitmarks)
 
     parser = Parser(repo)
     for line in parser:
-- 
1.8.2.1.884.g3532a8d
Previous: Felipe ContrerasNext: Felipe Contreras
Message 13 of 29 in “remote-bzr: massive changes”
  1. 00/20 remote-bzr: massive changesFelipe Contreras, Apr 26, 2013
  2. 01/20 remote-bzr: cleanup CustomTreeFelipe Contreras, Apr 26, 2013
  3. 02/20 remote-bzr: delay blob fetching until the very endFelipe Contreras, Apr 26, 2013
  4. 03/20 remote-bzr: fix order of locking in CustomTreeFelipe Contreras, Apr 26, 2013
  5. 04/20 remote-bzr: always try to update the worktreeFelipe Contreras, Apr 26, 2013
  6. 05/20 remote-bzr: add support to push mergesFelipe Contreras, Apr 26, 2013
  7. 06/20 remote-bzr: fixes for branch divergeFelipe Contreras, Apr 26, 2013
  8. 07/20 remote-bzr: fix partially pushed mergeFelipe Contreras, Apr 26, 2013
  9. 08/20 remote-bzr: use branch variable when appropriateFelipe Contreras, Apr 26, 2013
  10. 09/20 remote-bzr: add support for bzr reposFelipe Contreras, Apr 26, 2013
  11. 10/20 remote-bzr: fix branch namesFelipe Contreras, Apr 26, 2013
  12. 11/20 remote-bzr: add support for shared repoFelipe Contreras, Apr 26, 2013
  13. 12/20 remote-bzr: split marks fileFelipe Contreras, Apr 26, 2013
  14. Felipe ContrerasApr 26, 2013
  15. Junio C HamanoApr 27, 2013
  16. Felipe ContrerasApr 27, 2013
  17. Junio C HamanoApr 28, 2013
  18. Felipe ContrerasApr 29, 2013
  19. 13/20 remote-bzr: improve author sanitazionFelipe Contreras, Apr 26, 2013
  20. 14/20 remote-bzr: add custom method to find branchesFelipe Contreras, Apr 26, 2013
  21. 15/20 remote-bzr: add option to specify branchesFelipe Contreras, Apr 26, 2013
  22. 16/20 remote-bzr: improve progress reportingFelipe Contreras, Apr 26, 2013
  23. 17/20 remote-bzr: iterate revisions properlyFelipe Contreras, Apr 26, 2013
  24. 18/20 remote-bzr: delay peer branch usageFelipe Contreras, Apr 26, 2013
  25. 19/20 remote-bzr: access branches only when neededFelipe Contreras, Apr 26, 2013
  26. 20/20 remote-bzr: export HEADFelipe Contreras, Apr 26, 2013
  27. Felipe ContrerasApr 26, 2013
  28. Junio C HamanoApr 26, 2013
  29. Felipe ContrerasApr 26, 2013

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.