mercurial/hg.py
changeset 275 61d45b0ba8fb
parent 273 4f8174389001
child 276 10e325db7347
equal deleted inserted replaced
274:5da941efbb52 275:61d45b0ba8fb
   833                        % (files, changesets, revisions))
   833                        % (files, changesets, revisions))
   834 
   834 
   835         tr.close()
   835         tr.close()
   836         return
   836         return
   837 
   837 
   838     def update(self, node):
   838     def update(self, node, allow=False, force=False):
   839         pl = self.dirstate.parents()
   839         pl = self.dirstate.parents()
   840         if pl[1] != nullid:
   840         if not force and pl[1] != nullid:
   841             self.ui.warn("aborting: outstanding uncommitted merges\n")
   841             self.ui.warn("aborting: outstanding uncommitted merges\n")
   842             return
   842             return
   843 
   843 
   844         p1, p2 = pl[0], node
   844         p1, p2 = pl[0], node
   845         m1n = self.changelog.read(p1)[0]
   845         m1n = self.changelog.read(p1)[0]
   878                     elif m2[f] != a:
   878                     elif m2[f] != a:
   879                         self.ui.debug(" remote %s is newer, get\n" % f)
   879                         self.ui.debug(" remote %s is newer, get\n" % f)
   880                         get[f] = m2[f]
   880                         get[f] = m2[f]
   881                 del m2[f]
   881                 del m2[f]
   882             elif f in ma:
   882             elif f in ma:
   883                 if n != ma[f]:
   883                 if not force and n != ma[f]:
   884                     r = self.ui.prompt(
   884                     r = self.ui.prompt(
   885                         (" local changed %s which remote deleted\n" % f) +
   885                         (" local changed %s which remote deleted\n" % f) +
   886                         "(k)eep or (d)elete?", "[kd]", "k")
   886                         "(k)eep or (d)elete?", "[kd]", "k")
   887                     if r == "d":
   887                     if r == "d":
   888                         remove.append(f)
   888                         remove.append(f)
   896                 else:
   896                 else:
   897                     self.ui.debug("working dir created %s, keeping\n" % f)
   897                     self.ui.debug("working dir created %s, keeping\n" % f)
   898 
   898 
   899         for f, n in m2.iteritems():
   899         for f, n in m2.iteritems():
   900             if f[0] == "/": continue
   900             if f[0] == "/": continue
   901             if f in ma and n != ma[f]:
   901             if not force and f in ma and n != ma[f]:
   902                     r = self.ui.prompt(
   902                 r = self.ui.prompt(
   903                         ("remote changed %s which local deleted\n" % f) +
   903                     ("remote changed %s which local deleted\n" % f) +
   904                         "(k)eep or (d)elete?", "[kd]", "k")
   904                     "(k)eep or (d)elete?", "[kd]", "k")
   905                     if r == "d": remove.append(f)
   905                 if r == "d": remove.append(f)
   906             else:
   906             else:
   907                 self.ui.debug("remote created %s\n" % f)
   907                 self.ui.debug("remote created %s\n" % f)
   908                 get[f] = n
   908                 get[f] = n
   909 
   909 
   910         del mw, m1, m2, ma
   910         del mw, m1, m2, ma
       
   911 
       
   912         if force:
       
   913             for f in merge:
       
   914                 get[f] = merge[f][1]
       
   915             merge = {}
   911 
   916 
   912         if not merge:
   917         if not merge:
   913             # we don't need to do any magic, just jump to the new rev
   918             # we don't need to do any magic, just jump to the new rev
   914             mode = 'n'
   919             mode = 'n'
   915             p1, p2 = p2, nullid
   920             p1, p2 = p2, nullid
   916         else:
   921         else:
       
   922             if not allow:
       
   923                 self.ui.status("the following files conflict:\n")
       
   924                 for f in merge:
       
   925                     self.ui.status(" %s\n" % f)
       
   926                 self.ui.warn("aborting update due to conflicting files!\n")
       
   927                 self.ui.status("(use update -m to allow a merge)\n")
       
   928                 return 1
   917             # we have to remember what files we needed to get/change
   929             # we have to remember what files we needed to get/change
   918             # because any file that's different from either one of its
   930             # because any file that's different from either one of its
   919             # parents must be in the changeset
   931             # parents must be in the changeset
   920             mode = 'm'
   932             mode = 'm'
   921 
   933 
   974                               (fn, short(other), short(base)))
   986                               (fn, short(other), short(base)))
   975 
   987 
   976         cmd = os.environ.get("HGMERGE", "hgmerge")
   988         cmd = os.environ.get("HGMERGE", "hgmerge")
   977         r = os.system("%s %s %s %s" % (cmd, a, b, c))
   989         r = os.system("%s %s %s %s" % (cmd, a, b, c))
   978         if r:
   990         if r:
   979             self.ui.warn("merging %s failed!\n" % f)
   991             self.ui.warn("merging %s failed!\n" % fn)
   980 
   992 
   981         os.unlink(b)
   993         os.unlink(b)
   982         os.unlink(c)
   994         os.unlink(c)
   983 
   995 
   984     def verify(self):
   996     def verify(self):