Re: [STGIT][PATCH] new: translate non word characters in patch name to '-'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/28/08, Karl Hasselström <kha@xxxxxxxxxxx> 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@xxxxxxxxxxxxxx>
>  > ---
>  >
>  > 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__):
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux