threads / discuss / 4272

A few stgit bugfixes

Subject: A few stgit bugfixes

## tl;dr

5 messages between May 24, 2006 and May 24, 2006.

replies: 4people: 2as markdown or json

Karl Hasselström· May 24, 2006, 06:06 UTC · re: Karl Hasselström · lore

[PATCH 1/3] Fix infinite recursion on absolute paths

Calling create_dirs with an absolute path caused infinite recursion, since os.path.dirname('/') == '/'. Fix this by exiting early if the given path already is a directory. ---

 stgit/utils.py |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/stgit/utils.py b/stgit/utils.py
index 68b8f58..ed6e43c 100644
--- a/stgit/utils.py
+++ b/stgit/utils.py
@@ -130,7 +130,7 @@ def remove_file_and_dirs(basedir, file):
 
 def create_dirs(directory):
     """Create the given directory, if the path doesn't already exist."""
-    if directory:
+    if directory and not os.path.isdir(directory):
         create_dirs(os.path.dirname(directory))
         try:
             os.mkdir(directory)
Karl Hasselström· May 24, 2006, 06:06 UTC · re: Karl Hasselström · lore

[PATCH 2/3] Fix indexing error during "diff -r/"

The string indexing when decoding the -r argument for diff made an implicit assumption that the revision string was at least two characters long, which broke on the simple invocation "diff -r/". ---

 stgit/commands/diff.py |    8 ++++----
 stgit/utils.py         |    6 ++++++
 2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/stgit/commands/diff.py b/stgit/commands/diff.py
index d765784..caa3c5b 100644
--- a/stgit/commands/diff.py
+++ b/stgit/commands/diff.py
@@ -56,11 +56,11 @@ def func(parser, options, args):
         rev_list_len = len(rev_list)
         if rev_list_len == 1:
             rev = rev_list[0]
-            if rev[-1] == '/':
+            if rev.endswith('/'):
                 # the whole patch
-                rev = rev[:-1]
-                if rev[-1] == '/':
-                    rev = rev[:-1]
+                rev = strip_suffix('/', rev)
+                if rev.endswith('/'):
+                    rev = strip_suffix('/', rev)
                 rev1 = rev + '//bottom'
                 rev2 = rev + '//top'
             else:
diff --git a/stgit/utils.py b/stgit/utils.py
index ed6e43c..67431ec 100644
--- a/stgit/utils.py
+++ b/stgit/utils.py
@@ -109,6 +109,12 @@ def strip_prefix(prefix, string):
     assert string.startswith(prefix)
     return string[len(prefix):]
 
+def strip_suffix(suffix, string):
+    """Return string, without the suffix. Blow up if string doesn't
+    end with suffix."""
+    assert string.endswith(suffix)
+    return string[:-len(suffix)]
+
 def remove_dirs(basedir, dirs):
     """Starting at join(basedir, dirs), remove the directory if empty,
     and try the same with its parent, until we find a nonempty
Karl Hasselström· May 24, 2006, 06:07 UTC · re: Karl Hasselström · lore

[PATCH 3/3] Explicitly specify utf-8 coding in file

uncommit.py has a non-ascii character in it (in my name in the copyright line). Without this coding: comment, I get an error like the following when I run stgit:

  /home/kha/git/stgit/stgit/main.py:61: DeprecationWarning: Non-ASCII
  character '\xc3' in file
  /home/kha/git/stgit/stgit/commands/uncommit.py on line 3, but no
  encoding declared; see http://www.python.org/peps/pep-0263.html for
  details
---
 stgit/commands/uncommit.py |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/stgit/commands/uncommit.py b/stgit/commands/uncommit.py
index e03d207..52ce5a8 100644
--- a/stgit/commands/uncommit.py
+++ b/stgit/commands/uncommit.py
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+
 __copyright__ = """
 Copyright (C) 2006, Karl Hasselström <kha@treskal.com>
 

← back to recent threads