Add a patch renaming command
authorCatalin Marinas <catalin.marinas@gmail.com>
Tue, 26 Jul 2005 12:54:56 +0000 (13:54 +0100)
committerCatalin Marinas <catalin.marinas@gmail.com>
Tue, 26 Jul 2005 12:54:56 +0000 (13:54 +0100)
This command changes the name of a patch

Signed-off-by: Catalin Marinas <catalin.marinas@gmail.com>
stgit/commands/rename.py [new file with mode: 0644]
stgit/main.py
stgit/stack.py

diff --git a/stgit/commands/rename.py b/stgit/commands/rename.py
new file mode 100644 (file)
index 0000000..78a473f
--- /dev/null
@@ -0,0 +1,43 @@
+__copyright__ = """
+Copyright (C) 2005, Catalin Marinas <catalin.marinas@gmail.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License version 2 as
+published by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+"""
+
+import sys, os
+from optparse import OptionParser, make_option
+
+from stgit.commands.common import *
+from stgit.utils import *
+from stgit import stack, git
+
+
+help = 'rename a patch in the series'
+usage = """%prog [options] <oldpatch> <newpatch>
+
+Rename <oldpatch> into <newpatch> in a series."""
+
+options = []
+
+
+def func(parser, options, args):
+    """Rename a patch in the series
+    """
+    if len(args) != 2:
+        parser.error('incorrect number of arguments')
+
+    print 'Renaming patch "%s" -> "%s"...' % (args[0], args[1]),
+    sys.stdout.flush()
+    crt_series.rename_patch(args[0], args[1])
+    print 'done'
index e409dac..3e7720d 100644 (file)
@@ -42,6 +42,7 @@ import stgit.commands.pop
 import stgit.commands.pull
 import stgit.commands.push
 import stgit.commands.refresh
+import stgit.commands.rename
 import stgit.commands.resolved
 import stgit.commands.rm
 import stgit.commands.series
@@ -68,6 +69,7 @@ commands = {
     'pull':     stgit.commands.pull,
     'push':     stgit.commands.push,
     'refresh':  stgit.commands.refresh,
+    'rename':   stgit.commands.rename,
     'resolved': stgit.commands.resolved,
     'rm':       stgit.commands.rm,
     'series':   stgit.commands.series,
index cef4ae5..f43f94b 100644 (file)
@@ -115,6 +115,13 @@ class Patch:
     def get_name(self):
         return self.__name
 
+    def rename(self, newname):
+        olddir = self.__dir
+        self.__name = newname
+        self.__dir = os.path.join(self.__patch_dir, self.__name)
+
+        os.rename(olddir, self.__dir)
+
     def __get_field(self, name, multiline = False):
         id_file = os.path.join(self.__dir, name)
         if os.path.isfile(id_file):
@@ -532,3 +539,30 @@ class Series:
             return True
 
         return False
+
+    def rename_patch(self, oldname, newname):
+        applied = self.get_applied()
+        unapplied = self.get_unapplied()
+
+        if newname in applied or newname in unapplied:
+            raise StackException, 'Patch "%s" already exists' % newname
+
+        if oldname in unapplied:
+            Patch(oldname, self.__patch_dir).rename(newname)
+            unapplied[unapplied.index(oldname)] = newname
+
+            f = file(self.__unapplied_file, 'w+')
+            f.writelines([line + '\n' for line in unapplied])
+            f.close()
+        elif oldname in applied:
+            Patch(oldname, self.__patch_dir).rename(newname)
+            if oldname == self.get_current():
+                self.__set_current(newname)
+
+            applied[applied.index(oldname)] = newname
+
+            f = file(self.__applied_file, 'w+')
+            f.writelines([line + '\n' for line in applied])
+            f.close()
+        else:
+            raise StackException, 'Unknown patch "%s"' % oldname