hgext/mq.py
changeset 1852 fdf9cbf56ec7
parent 1839 876e4e6ad82b
child 1863 e8b86fb8ae33
equal deleted inserted replaced
1851:5c374776a8bc 1852:fdf9cbf56ec7
    15 
    15 
    16 repomap = {}
    16 repomap = {}
    17 
    17 
    18 class queue:
    18 class queue:
    19     def __init__(self, ui, path, patchdir=None):
    19     def __init__(self, ui, path, patchdir=None):
    20         self.opener = util.opener(path)
       
    21         self.basepath = path
    20         self.basepath = path
    22         if patchdir:
    21         if patchdir:
    23             self.path = patchdir
    22             self.path = patchdir
    24         else:
    23         else:
    25             self.path = os.path.join(path, "patches")
    24             self.path = os.path.join(path, "patches")
       
    25         self.opener = util.opener(self.path)
    26         self.ui = ui
    26         self.ui = ui
    27         self.applied = []
    27         self.applied = []
    28         self.full_series = []
    28         self.full_series = []
    29         self.applied_dirty = 0
    29         self.applied_dirty = 0
    30         self.series_dirty = 0
    30         self.series_dirty = 0
    31         self.series_path = os.path.join(self.path, "series")
    31         self.series_path = "series"
    32         self.status_path = os.path.join(self.path, "status")
    32         self.status_path = "status"
    33 
    33 
    34         s = self.series_path
    34         if os.path.exists(os.path.join(self.path, self.series_path)):
    35         if os.path.exists(s):
    35             self.full_series = self.opener(self.series_path).read().splitlines()
    36             self.full_series = self.opener(s).read().splitlines()
       
    37         self.read_series(self.full_series)
    36         self.read_series(self.full_series)
    38 
    37 
    39         s = self.status_path
    38         if os.path.exists(os.path.join(self.path, self.status_path)):
    40         if os.path.exists(s):
    39             self.applied = self.opener(self.status_path).read().splitlines()
    41             self.applied = self.opener(s).read().splitlines()
       
    42 
    40 
    43     def find_series(self, patch):
    41     def find_series(self, patch):
    44         pre = re.compile("(\s*)([^#]+)")
    42         pre = re.compile("(\s*)([^#]+)")
    45         index = 0
    43         index = 0
    46         for l in self.full_series:
    44         for l in self.full_series:
   184             message, comments, user, patchfound = mergeq.readheaders(patch)
   182             message, comments, user, patchfound = mergeq.readheaders(patch)
   185         except:
   183         except:
   186             self.ui.warn("Unable to read %s\n" % patch)
   184             self.ui.warn("Unable to read %s\n" % patch)
   187             sys.exit(1)
   185             sys.exit(1)
   188 
   186 
   189         patchf = self.opener(os.path.join(self.path, patch), "w")
   187         patchf = self.opener(patch, "w")
   190         if comments:
   188         if comments:
   191             comments = "\n".join(comments) + '\n\n'
   189             comments = "\n".join(comments) + '\n\n'
   192             patchf.write(comments)
   190             patchf.write(comments)
   193         commands.dodiff(patchf, self.ui, repo, head, n)
   191         commands.dodiff(patchf, self.ui, repo, head, n)
   194         patchf.close()
   192         patchf.close()
   400         self.full_series[insert:insert] = [patch]
   398         self.full_series[insert:insert] = [patch]
   401         self.applied.append(revlog.hex(n) + ":" + patch)
   399         self.applied.append(revlog.hex(n) + ":" + patch)
   402         self.read_series(self.full_series)
   400         self.read_series(self.full_series)
   403         self.series_dirty = 1
   401         self.series_dirty = 1
   404         self.applied_dirty = 1
   402         self.applied_dirty = 1
   405         p = self.opener(os.path.join(self.path, patch), "w")
   403         p = self.opener(patch, "w")
   406         if msg:
   404         if msg:
   407             msg = msg + "\n"
   405             msg = msg + "\n"
   408             p.write(msg)
   406             p.write(msg)
   409         p.close()
   407         p.close()
   410         wlock = None
   408         wlock = None
   714         top = revlog.bin(top)
   712         top = revlog.bin(top)
   715         cparents = repo.changelog.parents(top)
   713         cparents = repo.changelog.parents(top)
   716         patchparent = self.qparents(repo, top)
   714         patchparent = self.qparents(repo, top)
   717         message, comments, user, patchfound = self.readheaders(patch)
   715         message, comments, user, patchfound = self.readheaders(patch)
   718 
   716 
   719         patchf = self.opener(os.path.join(self.path, patch), "w")
   717         patchf = self.opener(patch, "w")
   720         if comments:
   718         if comments:
   721             comments = "\n".join(comments) + '\n\n'
   719             comments = "\n".join(comments) + '\n\n'
   722             patchf.write(comments)
   720             patchf.write(comments)
   723 
   721 
   724         tip = repo.changelog.tip()
   722         tip = repo.changelog.tip()
   833             list = []
   831             list = []
   834             for root, dirs, files in os.walk(self.path):
   832             for root, dirs, files in os.walk(self.path):
   835                 d = root[len(self.path) + 1:]
   833                 d = root[len(self.path) + 1:]
   836                 for f in files:
   834                 for f in files:
   837                     fl = os.path.join(d, f)
   835                     fl = os.path.join(d, f)
   838                     if (fl not in self.series and fl != "status" and
   836                     if (fl not in self.series and
   839                         fl != "series" and not fl.startswith('.')):
   837                         fl not in (self.status_path, self.series_path)
       
   838                         and not fl.startswith('.')):
   840                         list.append(fl)
   839                         list.append(fl)
   841             list.sort()
   840             list.sort()
   842             if list:
   841             if list:
   843                 for x in list:
   842                 for x in list:
   844                     if self.ui.verbose:
   843                     if self.ui.verbose:
  1010                 if not patch:
  1009                 if not patch:
  1011                     patch = os.path.split(filename)[1]
  1010                     patch = os.path.split(filename)[1]
  1012                 if not force and os.path.isfile(os.path.join(self.path, patch)):
  1011                 if not force and os.path.isfile(os.path.join(self.path, patch)):
  1013                     self.ui.warn("patch %s already exists\n" % patch)
  1012                     self.ui.warn("patch %s already exists\n" % patch)
  1014                     sys.exit(1)
  1013                     sys.exit(1)
  1015                 patchf = self.opener(os.path.join(self.path, patch), "w")
  1014                 patchf = self.opener(patch, "w")
  1016                 patchf.write(text)
  1015                 patchf.write(text)
  1017             if patch in self.series:
  1016             if patch in self.series:
  1018                 self.ui.warn("patch %s is already in the series file\n" % patch)
  1017                 self.ui.warn("patch %s is already in the series file\n" % patch)
  1019                 sys.exit(1)
  1018                 sys.exit(1)
  1020             index = self.series_end() + i
  1019             index = self.series_end() + i
  1203             newpath = savename(path)
  1202             newpath = savename(path)
  1204         ui.warn("copy %s to %s\n" % (path, newpath))
  1203         ui.warn("copy %s to %s\n" % (path, newpath))
  1205         util.copyfiles(path, newpath)
  1204         util.copyfiles(path, newpath)
  1206     if opts['empty']:
  1205     if opts['empty']:
  1207         try:
  1206         try:
  1208             os.unlink(q.status_path)
  1207             os.unlink(os.path.join(q.path, q.status_path))
  1209         except:
  1208         except:
  1210             pass
  1209             pass
  1211     return 0
  1210     return 0
  1212 
  1211 
  1213 def strip(ui, repo, rev, **opts):
  1212 def strip(ui, repo, rev, **opts):