From: "Hannes Eder" <hannes@hanneseder.net>
To: "Karl Hasselström" <kha@treskal.com>
Cc: "Catalin Marinas" <catalin.marinas@gmail.com>, git@vger.kernel.org
Subject: Re: [STGIT][PATCH] new: translate non word characters in patch name to '-'
Date: Mon, 29 Dec 2008 21:15:44 +0100 [thread overview]
Message-ID: <154e089b0812291215h72dfe04aod080f665eb7f5592@mail.gmail.com> (raw)
In-Reply-To: <20081228204938.GA13143@diana.vm.bytemark.co.uk>
On 12/28/08, Karl Hasselström <kha@treskal.com> wrote:
> On 2008-12-27 13:37:20 +0100, Hannes Eder wrote:
>
> > This allows following usage:
> >
> > $ stg new full/path/file-fix-foobar
> > Now at patch "full-path-file-fix-foobar"
> >
> > Signed-off-by: Hannes Eder <hannes@hanneseder.net>
> > ---
> >
> > I ran into as a '/' in a patch messed up stgit.
> >
> > I find this useful as 'stg uncommit' does the same translation.
>
>
> Clearly, bad path names shouldn't mess anything up -- see
>
> https://gna.org/bugs/?10919
>
> But I would prefer "stg new" to quit with an error message when given
> an illegal patch name, not silently mangle it. (Of course, the
> commands that generate patch names from commit messages -- such as
> "stg new" when not given an explicit patch name -- should mangle the
> commit message as much as necessary. But when the user gives us a
> patch name, we should either use that as is or fail with an
> informative message.)
>
> I think the right thing to do would be to construct a function that
> validates patch names (I don't think we have one right now), and then
> call it whenever we need to check if a patch name is OK. Such as when
> the user gives us the name of a new patch. And when we've
> auto-generated a patch name from a commit message, we should probably
> assert that that the check function is OK with the name.
What about instead of 'fail with an informative message', just issue a
warning that
the name has been mangled. I use pathnames in patch names frequently,
so this would be very handy.
I guess some with with more python skills needs to clean that up, this
is the first stuff I do in python ;).
---
diff --git a/stgit/commands/new.py b/stgit/commands/new.py
index 151cfe9..ed5c9ce 100644
--- a/stgit/commands/new.py
+++ b/stgit/commands/new.py
@@ -58,7 +58,7 @@ def func(parser, options, args):
if len(args) == 0:
name = None
elif len(args) == 1:
- name = args[0]
+ name = utils.sanitize_patch_name(args[0])
if stack.patches.exists(name):
raise common.CmdException('%s: patch already exists' % name)
else:
diff --git a/stgit/commands/rename.py b/stgit/commands/rename.py
index 8a593ac..455b67e 100644
--- a/stgit/commands/rename.py
+++ b/stgit/commands/rename.py
@@ -50,6 +50,8 @@ def func(parser, options, args):
old, [new] = crt, args
else:
parser.error('incorrect number of arguments')
+
+ new = utils.sanitize_patch_name(new)
out.start('Renaming patch "%s" to "%s"' % (old, new))
crt_series.rename_patch(old, new)
diff --git a/stgit/utils.py b/stgit/utils.py
index 81035a5..8ffe5a3 100644
--- a/stgit/utils.py
+++ b/stgit/utils.py
@@ -231,6 +231,31 @@ def make_patch_name(msg, unacceptable,
default_name = 'patch'):
patchname = default_name
return find_patch_name(patchname, unacceptable)
+class PatchNameException(StgException):
+ pass
+
+def sanitize_patch_name(patchname):
+ # '..' is for patch ranges only, so it is not allowed here
+ if patchname.find('..') != -1:
+ raise PatchNameException('Patch name must not contain "..".')
+
+ # if patch name contains non word characters, replace them but warn user
+ # about that
+ if re.search('\W', patchname):
+ out.warn('replacing non word characters in patch name');
+ patchname = re.sub('[\W]+', '-', patchname).strip('-')
+
+ # limit patch name length
+ name_len = config.get('stgit.namelength')
+ if not name_len:
+ name_len = 30
+
+ if len(patchname) > name_len:
+ out.warn('truncating the patch name to %d characters' % name_len)
+ patchname = patchname[:name_len]
+
+ return patchname
+
# any and all functions are builtin in Python 2.5 and higher, but not
# in 2.4.
if not 'any' in dir(__builtins__):
next prev parent reply other threads:[~2008-12-29 20:17 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-27 12:37 [STGIT][PATCH] new: translate non word characters in patch name to '-' Hannes Eder
2008-12-28 20:49 ` Karl Hasselström
2008-12-29 20:15 ` Hannes Eder [this message]
2008-12-29 21:21 ` Karl Hasselström
2008-12-31 8:07 ` Hannes Eder
2008-12-31 10:38 ` Karl Hasselström
2009-01-15 14:53 ` David Kågedal
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=154e089b0812291215h72dfe04aod080f665eb7f5592@mail.gmail.com \
--to=hannes@hanneseder.net \
--cc=catalin.marinas@gmail.com \
--cc=git@vger.kernel.org \
--cc=kha@treskal.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).