mercurial/hg.py
changeset 324 ce81bdd91d06
parent 321 73b8a8a059ec
child 328 dac675ef6189
equal deleted inserted replaced
323:c6f0673ab7e9 324:ce81bdd91d06
   721                 unknown.append(h)
   721                 unknown.append(h)
   722 
   722 
   723         if not unknown:
   723         if not unknown:
   724             self.ui.status("nothing to do!\n")
   724             self.ui.status("nothing to do!\n")
   725             return None
   725             return None
   726             
   726 
       
   727         rep = {}
       
   728         reqcnt = 0
       
   729         
   727         unknown = remote.branches(unknown)
   730         unknown = remote.branches(unknown)
   728         while unknown:
   731         while unknown:
   729             n = unknown.pop(0)
   732             r = []
   730             seen[n[0]] = 1
   733             while unknown:
   731             
   734                 n = unknown.pop(0)
   732             self.ui.debug("examining %s:%s\n" % (short(n[0]), short(n[1])))
   735                 if n[0] in seen:
   733             if n == nullid: break
   736                     continue
   734             if n in seenbranch:
   737                 seen[n[0]] = 1
   735                 self.ui.debug("branch already found\n")
   738 
   736                 continue
   739                 self.ui.debug("examining %s:%s\n" % (short(n[0]), short(n[1])))
   737             if n[1] and n[1] in m: # do we know the base?
   740                 if n[0] == nullid:
   738                 self.ui.debug("found incomplete branch %s:%s\n"
   741                     break
   739                               % (short(n[0]), short(n[1])))
   742                 if n[1] in seenbranch:
   740                 search.append(n) # schedule branch range for scanning
   743                     self.ui.debug("branch already found\n")
   741                 seenbranch[n] = 1
   744                     continue
   742             else:
   745                 if n[1] and n[1] in m: # do we know the base?
   743                 if n[2] in m and n[3] in m:
   746                     self.ui.debug("found incomplete branch %s:%s\n"
   744                     if n[1] not in fetch:
   747                                   % (short(n[0]), short(n[1])))
   745                         self.ui.debug("found new changeset %s\n" %
   748                     search.append(n) # schedule branch range for scanning
   746                                       short(n[1]))
   749                     seenbranch[n[1]] = 1
   747                         fetch.append(n[1]) # earliest unknown
   750                 else:
   748                         continue
   751                     if n[1] not in seen and n[1] not in fetch:
   749 
   752                         if n[2] in m and n[3] in m:
   750                 r = []
   753                             self.ui.debug("found new changeset %s\n" %
   751                 for a in n[2:4]:
   754                                           short(n[1]))
   752                     if a not in seen: r.append(a)
   755                             fetch.append(n[1]) # earliest unknown
   753                     
   756                             continue
   754                 if r:
   757 
   755                     self.ui.debug("requesting %s\n" %
   758                     for a in n[2:4]:
   756                                 " ".join(map(short, r)))
   759                         if a not in rep:
   757                     for b in remote.branches(r):
   760                             r.append(a)
       
   761                             rep[a] = 1
       
   762 
       
   763             if r:
       
   764                 reqcnt += 1
       
   765                 self.ui.debug("request %d: %s\n" %
       
   766                             (reqcnt, " ".join(map(short, r))))
       
   767                 for p in range(0, len(r), 10):
       
   768                     for b in remote.branches(r[p:p+10]):
   758                         self.ui.debug("received %s:%s\n" %
   769                         self.ui.debug("received %s:%s\n" %
   759                                       (short(b[0]), short(b[1])))
   770                                       (short(b[0]), short(b[1])))
   760                         if b[0] not in m and b[0] not in seen:
   771                         if b[0] not in m and b[0] not in seen:
   761                             unknown.append(b)
   772                             unknown.append(b)
   762   
   773   
   763         while search:
   774         while search:
   764             n = search.pop(0)
   775             n = search.pop(0)
       
   776             reqcnt += 1
   765             l = remote.between([(n[0], n[1])])[0]
   777             l = remote.between([(n[0], n[1])])[0]
   766             p = n[0]
   778             p = n[0]
   767             f = 1
   779             f = 1
   768             for i in l + [n[1]]:
   780             for i in l + [n[1]]:
   769                 if i in m:
   781                 if i in m:
   782             if f in m:
   794             if f in m:
   783                 raise "already have", short(f[:4])
   795                 raise "already have", short(f[:4])
   784 
   796 
   785         self.ui.note("adding new changesets starting at " +
   797         self.ui.note("adding new changesets starting at " +
   786                      " ".join([short(f) for f in fetch]) + "\n")
   798                      " ".join([short(f) for f in fetch]) + "\n")
       
   799 
       
   800         self.ui.debug("%d total queries\n" % reqcnt)
   787 
   801 
   788         return remote.changegroup(fetch)
   802         return remote.changegroup(fetch)
   789     
   803     
   790     def changegroup(self, basenodes):
   804     def changegroup(self, basenodes):
   791         nodes = self.newer(basenodes)
   805         nodes = self.newer(basenodes)