mercurial/hg.py
changeset 191 d7e859cf2f1b
parent 190 3dd5ce2fddb6
child 192 5d8553352d2e
equal deleted inserted replaced
190:3dd5ce2fddb6 191:d7e859cf2f1b
   635             if not g: raise "couldn't find change to %s" % f
   635             if not g: raise "couldn't find change to %s" % f
   636             l = struct.pack(">l", len(f))
   636             l = struct.pack(">l", len(f))
   637             yield "".join([l, f, g])
   637             yield "".join([l, f, g])
   638 
   638 
   639     def addchangegroup(self, generator):
   639     def addchangegroup(self, generator):
       
   640         changesets = files = revisions = 0
       
   641 
   640         self.lock()
   642         self.lock()
   641         class genread:
   643         class genread:
   642             def __init__(self, generator):
   644             def __init__(self, generator):
   643                 self.g = generator
   645                 self.g = generator
   644                 self.buf = ""
   646                 self.buf = ""
   672             
   674             
   673         csg = getchunk()
   675         csg = getchunk()
   674         co = self.changelog.tip()
   676         co = self.changelog.tip()
   675         cn = self.changelog.addgroup(csg, report, tr)
   677         cn = self.changelog.addgroup(csg, report, tr)
   676 
   678 
       
   679         revisions = self.changelog.rev(cn) - self.changelog.rev(co)
       
   680         changesets = revisions
       
   681 
   677         self.ui.status("adding manifests\n")
   682         self.ui.status("adding manifests\n")
   678         # pull off the manifest group
   683         # pull off the manifest group
   679         mfg = getchunk()
   684         mfg = getchunk()
   680         mm = self.manifest.tip()
   685         mm = self.manifest.tip()
   681         mo = self.manifest.addgroup(mfg, lambda x: self.changelog.rev(x), tr)
   686         mo = self.manifest.addgroup(mfg, lambda x: self.changelog.rev(x), tr)
       
   687 
       
   688         revisions += self.manifest.rev(mo) - self.manifest.rev(mm)
   682 
   689 
   683         # do we need a resolve?
   690         # do we need a resolve?
   684         if self.changelog.ancestor(co, cn) != co:
   691         if self.changelog.ancestor(co, cn) != co:
   685             simple = False
   692             simple = False
   686             resolverev = self.changelog.count()
   693             resolverev = self.changelog.count()
   747             fg = getchunk()
   754             fg = getchunk()
   748             self.ui.debug("adding %s revisions\n" % f)
   755             self.ui.debug("adding %s revisions\n" % f)
   749             fl = self.file(f)
   756             fl = self.file(f)
   750             o = fl.tip()
   757             o = fl.tip()
   751             n = fl.addgroup(fg, lambda x: self.changelog.rev(x), tr)
   758             n = fl.addgroup(fg, lambda x: self.changelog.rev(x), tr)
       
   759             revisions += fl.rev(n) - fl.rev(o)
       
   760             files += 1
   752             if f in need:
   761             if f in need:
   753                 del need[f]
   762                 del need[f]
   754                 # manifest resolve determined we need to merge the tips
   763                 # manifest resolve determined we need to merge the tips
   755                 nmap[f] = self.merge3(fl, f, o, n, tr, resolverev)
   764                 nmap[f] = self.merge3(fl, f, o, n, tr, resolverev)
   756 
   765 
   758             # we need to do trivial merges on local files
   767             # we need to do trivial merges on local files
   759             for f in new:
   768             for f in new:
   760                 if f not in need: continue
   769                 if f not in need: continue
   761                 fl = self.file(f)
   770                 fl = self.file(f)
   762                 nmap[f] = self.merge3(fl, f, need[f], fl.tip(), tr, resolverev)
   771                 nmap[f] = self.merge3(fl, f, need[f], fl.tip(), tr, resolverev)
       
   772                 revisions += 1
   763 
   773 
   764         # For simple merges, we don't need to resolve manifests or changesets
   774         # For simple merges, we don't need to resolve manifests or changesets
   765         if simple:
   775         if simple:
   766             self.ui.debug("simple merge, skipping resolve\n")
   776             self.ui.debug("simple merge, skipping resolve\n")
       
   777             self.ui.status(("added %d changesets, %d files," +
       
   778                            " and %d new revisions\n")
       
   779                            % (changesets, files, revisions))
   767             tr.close()
   780             tr.close()
   768             return
   781             return
   769 
   782 
   770         node = self.manifest.add(nmap, tr, resolverev, mm, mo)
   783         node = self.manifest.add(nmap, tr, resolverev, mm, mo)
       
   784         revisions += 1
   771 
   785 
   772         # Now all files and manifests are merged, we add the changed files
   786         # Now all files and manifests are merged, we add the changed files
   773         # and manifest id to the changelog
   787         # and manifest id to the changelog
   774         self.ui.status("committing merge changeset\n")
   788         self.ui.status("committing merge changeset\n")
   775         if co == cn: cn = -1
   789         if co == cn: cn = -1
   777         edittext = "\nHG: merge resolve\n" + \
   791         edittext = "\nHG: merge resolve\n" + \
   778                    "HG: manifest hash %s\n" % hex(node) + \
   792                    "HG: manifest hash %s\n" % hex(node) + \
   779                    "".join(["HG: changed %s\n" % f for f in new])
   793                    "".join(["HG: changed %s\n" % f for f in new])
   780         edittext = self.ui.edit(edittext)
   794         edittext = self.ui.edit(edittext)
   781         n = self.changelog.add(node, new, edittext, tr, co, cn)
   795         n = self.changelog.add(node, new, edittext, tr, co, cn)
       
   796         revisions += 1
       
   797 
       
   798         self.ui.status("added %d changesets, %d files, and %d new revisions\n"
       
   799                        % (changesets, files, revisions))
   782 
   800 
   783         tr.close()
   801         tr.close()
   784 
   802 
   785     def merge3(self, fl, fn, my, other, transaction, link):
   803     def merge3(self, fl, fn, my, other, transaction, link):
   786         """perform a 3-way merge and append the result"""
   804         """perform a 3-way merge and append the result"""