mercurial/merge.py
changeset 3162 a9e75b371315
parent 3161 84561ea8711e
child 3167 e67c22bc8bba
equal deleted inserted replaced
3161:84561ea8711e 3162:a9e75b371315
   169                 for mf in match[of]:
   169                 for mf in match[of]:
   170                     checkpair(c, mf, m1)
   170                     checkpair(c, mf, m1)
   171 
   171 
   172     return copy
   172     return copy
   173 
   173 
   174 def manifestmerge(ui, m1, m2, ma, overwrite, backwards, partial):
   174 def filtermanifest(man, partial):
       
   175     if partial:
       
   176         for k in man.keys():
       
   177             if not partial(k): del man[k]
       
   178 
       
   179 def manifestmerge(ui, m1, m2, ma, overwrite, backwards):
   175     """
   180     """
   176     Merge manifest m1 with m2 using ancestor ma and generate merge action list
   181     Merge manifest m1 with m2 using ancestor ma and generate merge action list
   177     """
   182     """
   178 
   183 
   179     def fmerge(f):
   184     def fmerge(f):
   184     action = []
   189     action = []
   185 
   190 
   186     def act(msg, f, m, *args):
   191     def act(msg, f, m, *args):
   187         ui.debug(" %s: %s -> %s\n" % (f, msg, m))
   192         ui.debug(" %s: %s -> %s\n" % (f, msg, m))
   188         action.append((f, m) + args)
   193         action.append((f, m) + args)
   189 
       
   190     # Filter manifests
       
   191     if partial:
       
   192         for f in m1.keys():
       
   193             if not partial(f): del m1[f]
       
   194         for f in m2.keys():
       
   195             if not partial(f): del m2[f]
       
   196 
   194 
   197     # Compare manifests
   195     # Compare manifests
   198     for f, n in m1.iteritems():
   196     for f, n in m1.iteritems():
   199         if f in m2:
   197         if f in m2:
   200             # are files different?
   198             # are files different?
   361 
   359 
   362     action = []
   360     action = []
   363     copy = {}
   361     copy = {}
   364 
   362 
   365     m1 = workingmanifest(repo, m1, status)
   363     m1 = workingmanifest(repo, m1, status)
       
   364     filtermanifest(m1, partial)
       
   365     filtermanifest(m2, partial)
   366 
   366 
   367     if not force:
   367     if not force:
   368         checkunknown(repo, m2, status)
   368         checkunknown(repo, m2, status)
   369     if not branchmerge:
   369     if not branchmerge:
   370         action += forgetremoved(m2, status)
   370         action += forgetremoved(m2, status)
   371     if not (backwards or overwrite):
   371     if not (backwards or overwrite):
   372         copy = findcopies(repo, m1, m2, repo.changelog.rev(pa))
   372         copy = findcopies(repo, m1, m2, repo.changelog.rev(pa))
   373 
   373 
   374     action += manifestmerge(repo.ui, m1, m2, ma, overwrite, backwards, partial)
   374     action += manifestmerge(repo.ui, m1, m2, ma, overwrite, backwards)
   375     del m1, m2, ma
   375     del m1, m2, ma
   376 
   376 
   377     ### apply phase
   377     ### apply phase
   378 
   378 
   379     if not branchmerge:
   379     if not branchmerge: