* [STGIT][PATCH] new: translate non word characters in patch name to '-'
@ 2008-12-27 12:37 Hannes Eder
2008-12-28 20:49 ` Karl Hasselström
0 siblings, 1 reply; 7+ messages in thread
From: Hannes Eder @ 2008-12-27 12:37 UTC (permalink / raw)
To: git
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.
stgit/commands/new.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/stgit/commands/new.py b/stgit/commands/new.py
index 151cfe9..ab09476 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.patch_name_from_msg(args[0])
if stack.patches.exists(name):
raise common.CmdException('%s: patch already exists' % name)
else:
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [STGIT][PATCH] new: translate non word characters in patch name to '-'
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
0 siblings, 1 reply; 7+ messages in thread
From: Karl Hasselström @ 2008-12-28 20:49 UTC (permalink / raw)
To: Hannes Eder; +Cc: Catalin Marinas, git
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.
--
Karl Hasselström, kha@treskal.com
www.treskal.com/kalle
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [STGIT][PATCH] new: translate non word characters in patch name to '-'
2008-12-28 20:49 ` Karl Hasselström
@ 2008-12-29 20:15 ` Hannes Eder
2008-12-29 21:21 ` Karl Hasselström
2009-01-15 14:53 ` David Kågedal
0 siblings, 2 replies; 7+ messages in thread
From: Hannes Eder @ 2008-12-29 20:15 UTC (permalink / raw)
To: Karl Hasselström; +Cc: Catalin Marinas, git
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__):
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [STGIT][PATCH] new: translate non word characters in patch name to '-'
2008-12-29 20:15 ` Hannes Eder
@ 2008-12-29 21:21 ` Karl Hasselström
2008-12-31 8:07 ` Hannes Eder
2009-01-15 14:53 ` David Kågedal
1 sibling, 1 reply; 7+ messages in thread
From: Karl Hasselström @ 2008-12-29 21:21 UTC (permalink / raw)
To: Hannes Eder; +Cc: Catalin Marinas, git
On 2008-12-29 21:15:44 +0100, Hannes Eder wrote:
> 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.
Hmm, I'm still skeptical. Programs that try to be too clever all too
often end up just being annoying and unpredictable.
> I guess some with with more python skills needs to clean that up,
> this is the first stuff I do in python ;).
The code looks OK -- but as I said, I don't agree with what it's
trying to do.
There's a small inconsistency: you fail if the name contains "..", but
correct single bad characters.
And as I recall, stgit.namelength is about the automatically generated
patch names -- there's no limit for the names provided by the user.
--
Karl Hasselström, kha@treskal.com
www.treskal.com/kalle
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [STGIT][PATCH] new: translate non word characters in patch name to '-'
2008-12-29 21:21 ` Karl Hasselström
@ 2008-12-31 8:07 ` Hannes Eder
2008-12-31 10:38 ` Karl Hasselström
0 siblings, 1 reply; 7+ messages in thread
From: Hannes Eder @ 2008-12-31 8:07 UTC (permalink / raw)
To: Karl Hasselström; +Cc: Catalin Marinas, git
On Mon, Dec 29, 2008 at 10:21 PM, Karl Hasselström <kha@treskal.com> wrote:
> On 2008-12-29 21:15:44 +0100, Hannes Eder wrote:
>
>> 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.
>
> Hmm, I'm still skeptical. Programs that try to be too clever all too
> often end up just being annoying and unpredictable.
>
>> I guess some with with more python skills needs to clean that up,
>> this is the first stuff I do in python ;).
>
> The code looks OK -- but as I said, I don't agree with what it's
> trying to do.
>
> There's a small inconsistency: you fail if the name contains "..", but
> correct single bad characters.
".." is used to denote patch name ranges [<patch1>..<patch2>] for
commands like "stg pop", "stg push", and so forth, therefore I think
it is wise to exclude ".." from single patch names [<patch3>].
> And as I recall, stgit.namelength is about the automatically generated
> patch names -- there's no limit for the names provided by the user.
Ok.
Maybe we should start defining what a 'valid' patch name has to look
like, i.e. define
def is_patch_name_valid(patchname)
Best,
Hannes
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [STGIT][PATCH] new: translate non word characters in patch name to '-'
2008-12-31 8:07 ` Hannes Eder
@ 2008-12-31 10:38 ` Karl Hasselström
0 siblings, 0 replies; 7+ messages in thread
From: Karl Hasselström @ 2008-12-31 10:38 UTC (permalink / raw)
To: Hannes Eder; +Cc: Catalin Marinas, git
On 2008-12-31 09:07:51 +0100, Hannes Eder wrote:
> On Mon, Dec 29, 2008 at 10:21 PM, Karl Hasselström <kha@treskal.com> wrote:
>
> > There's a small inconsistency: you fail if the name contains "..",
> > but correct single bad characters.
>
> ".." is used to denote patch name ranges [<patch1>..<patch2>] for
> commands like "stg pop", "stg push", and so forth, therefore I think
> it is wise to exclude ".." from single patch names [<patch3>].
Yes. But what I meant was that it's a tad inconsistent to fail on some
illegal patch names, and correct others. You should either always fail
(my preference), or always correct.
> Maybe we should start defining what a 'valid' patch name has to look
> like, i.e. define
>
> def is_patch_name_valid(patchname)
Yes, exactly. This function could be called
1. when validating user input in e.g. "stg new";
2. in an assert at the end of the function that constructs a patch
name from the commit message; and
3. in an assert just before we try to actually create a patch with a
given name.
(2) and (3) aren't really necessary, of course; they're just there to
catch bugs.
If you define such a function, be liberal in forbidding stuff. It's
easy to relax the rules later, but hard to tighten them since we have
to deal with existing repositories with illegal patch names. It's
probably a good idea to look at what git allows in its ref names, and
additionally forbid "/" and anything else you can think of.
--
Karl Hasselström, kha@treskal.com
www.treskal.com/kalle
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [STGIT][PATCH] new: translate non word characters in patch name to '-'
2008-12-29 20:15 ` Hannes Eder
2008-12-29 21:21 ` Karl Hasselström
@ 2009-01-15 14:53 ` David Kågedal
1 sibling, 0 replies; 7+ messages in thread
From: David Kågedal @ 2009-01-15 14:53 UTC (permalink / raw)
To: git
"Hannes Eder" <hannes@hanneseder.net> writes:
> 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.
No, I agree with Karl. For example, a tool (such as the Emacs
frontend) might want to do a "stg new foobar" and then do something
with the patch it now knows is called "foobar". And if it was called
something else the tool will fail.
--
David Kågedal
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2009-01-15 14:54 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
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
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).