From: "Karl Hasselström" <kha@treskal.com>
To: Catalin Marinas <catalin.marinas@gmail.com>
Cc: git@vger.kernel.org, Petr Baudis <pasky@suse.cz>
Subject: [StGIT PATCH 1/5] Make the "name" argument to "stg new" optional
Date: Fri, 11 May 2007 03:40:05 +0200 [thread overview]
Message-ID: <20070511014004.13161.39982.stgit@yoghurt> (raw)
In-Reply-To: <20070511013400.13161.9160.stgit@yoghurt>
From: Karl Hasselström <kha@treskal.com>
If no name is given, one is generated from the commit message. This
can be very handy.
Signed-off-by: Karl Hasselström <kha@treskal.com>
---
Documentation/stg-new.txt | 5 +++--
stgit/commands/common.py | 25 -------------------------
stgit/commands/new.py | 15 +++++++++++----
stgit/commands/pick.py | 2 +-
stgit/commands/uncommit.py | 3 +--
stgit/stack.py | 17 +++++++++++------
stgit/utils.py | 27 ++++++++++++++++++++++++++-
t/t1003-new.sh | 29 +++++++++++++++++++++++++++++
8 files changed, 82 insertions(+), 41 deletions(-)
diff --git a/Documentation/stg-new.txt b/Documentation/stg-new.txt
index 009659a..fbf2f67 100644
--- a/Documentation/stg-new.txt
+++ b/Documentation/stg-new.txt
@@ -10,7 +10,7 @@ stg-new - stgdesc:new[]
SYNOPSIS
--------
[verse]
-'stg' new [OPTIONS] <name>
+'stg' new [OPTIONS] [name]
DESCRIPTION
-----------
@@ -22,7 +22,8 @@ tree are not included in the patch. A stglink:refresh[] command is
needed for this.
The given <name> must be unique in the stack, and may only contain
-alphanumeric characters, dashes and underscores.
+alphanumeric characters, dashes and underscores. If no name is given,
+one is generated from the first line of the commit message.
An editor will be launched to edit the commit message to be used for
the patch, unless the '--message' flag already specified one. The
diff --git a/stgit/commands/common.py b/stgit/commands/common.py
index 674d8c1..28026da 100644
--- a/stgit/commands/common.py
+++ b/stgit/commands/common.py
@@ -323,31 +323,6 @@ def address_or_alias(addr_str):
for addr in addr_str.split(',')]
return ', '.join([addr for addr in addr_list if addr])
-def patch_name_from_msg(msg):
- """Return a string to be used as a patch name. This is generated
- from the first 30 characters of the top line of the string passed
- as argument."""
- if not msg:
- return None
-
- subject_line = msg[:30].lstrip().split('\n', 1)[0].lower()
- return re.sub('[\W]+', '-', subject_line).strip('-')
-
-def make_patch_name(msg, unacceptable, default_name = 'patch',
- alternative = True):
- """Return a patch name generated from the given commit message,
- guaranteed to make unacceptable(name) be false. If the commit
- message is empty, base the name on default_name instead."""
- patchname = patch_name_from_msg(msg)
- if not patchname:
- patchname = default_name
- if alternative and unacceptable(patchname):
- suffix = 0
- while unacceptable('%s-%d' % (patchname, suffix)):
- suffix += 1
- patchname = '%s-%d' % (patchname, suffix)
- return patchname
-
def prepare_rebase(real_rebase, force=None):
if not force:
# Be sure we won't loose results of stg-(un)commit by error.
diff --git a/stgit/commands/new.py b/stgit/commands/new.py
index 2c1e94b..f192e34 100644
--- a/stgit/commands/new.py
+++ b/stgit/commands/new.py
@@ -25,7 +25,7 @@ from stgit import stack, git
help = 'create a new patch and make it the topmost one'
-usage = """%prog [options] <name>
+usage = """%prog [options] [name]
Create a new, empty patch and make it the topmost one. If the
'--message' option is not passed, an editor is invoked with the
@@ -33,7 +33,10 @@ Create a new, empty patch and make it the topmost one. If the
/usr/share/stgit/templates/patchdescr.tmpl file used a as template,
together with generated lines. By default, the local changes in the
working tree are not included in the patch. A 'refresh' command is
-needed for this."""
+needed for this.
+
+If no name is given for the new patch, one is generated from the first
+line of the commit message."""
options = [make_option('-m', '--message',
help = 'use MESSAGE as the patch description'),
@@ -57,7 +60,11 @@ options = [make_option('-m', '--message',
def func(parser, options, args):
"""Creates a new patch
"""
- if len(args) != 1:
+ if len(args) == 0:
+ name = None # autogenerate a name
+ elif len(args) == 1:
+ name = args[0]
+ else:
parser.error('incorrect number of arguments')
check_conflicts()
@@ -66,7 +73,7 @@ def func(parser, options, args):
if options.author:
options.authname, options.authemail = name_email(options.author)
- crt_series.new_patch(args[0], message = options.message,
+ crt_series.new_patch(name, message = options.message,
show_patch = options.showpatch,
author_name = options.authname,
author_email = options.authemail,
diff --git a/stgit/commands/pick.py b/stgit/commands/pick.py
index edd614d..75def2a 100644
--- a/stgit/commands/pick.py
+++ b/stgit/commands/pick.py
@@ -75,7 +75,7 @@ def func(parser, options, args):
elif len(patch_branch) == 2:
patch = patch_branch[0]
else:
- patch = make_patch_name(commit.get_log(), crt_series.patch_exists)
+ patch = None
if options.parent:
parent = git_id(options.parent)
diff --git a/stgit/commands/uncommit.py b/stgit/commands/uncommit.py
index 462846c..04c7e52 100644
--- a/stgit/commands/uncommit.py
+++ b/stgit/commands/uncommit.py
@@ -95,8 +95,7 @@ def func(parser, options, args):
if patchnames:
patchname = patchnames[n]
else:
- patchname = make_patch_name(commit.get_log(),
- crt_series.patch_exists)
+ patchname = None
crt_series.new_patch(patchname,
can_edit = False, before_existing = True,
diff --git a/stgit/stack.py b/stgit/stack.py
index 76704e8..d0008bc 100644
--- a/stgit/stack.py
+++ b/stgit/stack.py
@@ -777,20 +777,25 @@ class Series(StgitObject):
before_existing = False, refresh = True):
"""Creates a new patch
"""
- self.__patch_name_valid(name)
- if self.patch_applied(name) or self.patch_unapplied(name):
- raise StackException, 'Patch "%s" already exists' % name
+ if name != None:
+ self.__patch_name_valid(name)
+ if self.patch_applied(name) or self.patch_unapplied(name):
+ raise StackException, 'Patch "%s" already exists' % name
if not message and can_edit:
- descr = edit_file(self, None, \
- 'Please enter the description for patch "%s" ' \
- 'above.' % name, show_patch)
+ descr = edit_file(
+ self, None,
+ 'Please enter the description for the patch above.',
+ show_patch)
else:
descr = message
head = git.get_head()
+ if name == None:
+ name = make_patch_name(descr, self.patch_exists)
+
patch = Patch(name, self.__patch_dir, self.__refs_dir)
patch.create()
diff --git a/stgit/utils.py b/stgit/utils.py
index d04d077..18198c0 100644
--- a/stgit/utils.py
+++ b/stgit/utils.py
@@ -1,7 +1,7 @@
"""Common utility functions
"""
-import errno, os, os.path, sys
+import errno, os, os.path, re, sys
from stgit.config import config
__copyright__ = """
@@ -172,3 +172,28 @@ def call_editor(filename):
if err:
raise EditorException, 'editor failed, exit code: %d' % err
print 'done'
+
+def patch_name_from_msg(msg):
+ """Return a string to be used as a patch name. This is generated
+ from the first 30 characters of the top line of the string passed
+ as argument."""
+ if not msg:
+ return None
+
+ subject_line = msg[:30].lstrip().split('\n', 1)[0].lower()
+ return re.sub('[\W]+', '-', subject_line).strip('-')
+
+def make_patch_name(msg, unacceptable, default_name = 'patch',
+ alternative = True):
+ """Return a patch name generated from the given commit message,
+ guaranteed to make unacceptable(name) be false. If the commit
+ message is empty, base the name on default_name instead."""
+ patchname = patch_name_from_msg(msg)
+ if not patchname:
+ patchname = default_name
+ if alternative and unacceptable(patchname):
+ suffix = 0
+ while unacceptable('%s-%d' % (patchname, suffix)):
+ suffix += 1
+ patchname = '%s-%d' % (patchname, suffix)
+ return patchname
diff --git a/t/t1003-new.sh b/t/t1003-new.sh
new file mode 100755
index 0000000..0be5d9b
--- /dev/null
+++ b/t/t1003-new.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+#
+# Copyright (c) 2007 Karl Hasselström
+#
+
+test_description='Test the new command.
+
+'
+
+. ./test-lib.sh
+
+test_expect_success \
+ 'Initialize the StGIT repository' '
+ stg init
+'
+
+test_expect_success \
+ 'Create a named patch' '
+ stg new foo -m foobar &&
+ [ $(stg applied -c) -eq 1 ]
+'
+
+test_expect_success \
+ 'Create a patch without giving a name' '
+ stg new -m yo &&
+ [ $(stg applied -c) -eq 2 ]
+'
+
+test_done
next prev parent reply other threads:[~2007-05-11 1:47 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-11 1:39 [StGIT PATCH 0/5] Some tweaks and enhancements Karl Hasselström
2007-05-11 1:40 ` Karl Hasselström [this message]
2007-05-11 1:40 ` [StGIT PATCH 2/5] Generate patch names of more uniform length Karl Hasselström
2007-05-11 1:40 ` [StGIT PATCH 3/5] Remove an unnecessary parameter to make_patch_name Karl Hasselström
2007-05-11 1:40 ` [StGIT PATCH 4/5] If any uncommit would fail, don't uncommit anything Karl Hasselström
2007-05-11 1:40 ` [StGIT PATCH 5/5] Uncommit to a named commit Karl Hasselström
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070511014004.13161.39982.stgit@yoghurt \
--to=kha@treskal.com \
--cc=catalin.marinas@gmail.com \
--cc=git@vger.kernel.org \
--cc=pasky@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.