From: Catalin Marinas Date: Tue, 26 Jul 2005 12:54:56 +0000 (+0100) Subject: Add a patch renaming command X-Git-Tag: v0.14.3~733 X-Git-Url: https://git.distorted.org.uk/~mdw/stgit/commitdiff_plain/e55b53e007f02331a27e16bcac18165952a202d5 Add a patch renaming command This command changes the name of a patch Signed-off-by: Catalin Marinas --- diff --git a/stgit/commands/rename.py b/stgit/commands/rename.py new file mode 100644 index 0000000..78a473f --- /dev/null +++ b/stgit/commands/rename.py @@ -0,0 +1,43 @@ +__copyright__ = """ +Copyright (C) 2005, Catalin Marinas + +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] + +Rename into 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' diff --git a/stgit/main.py b/stgit/main.py index e409dac..3e7720d 100644 --- a/stgit/main.py +++ b/stgit/main.py @@ -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, diff --git a/stgit/stack.py b/stgit/stack.py index cef4ae5..f43f94b 100644 --- a/stgit/stack.py +++ b/stgit/stack.py @@ -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