git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] stgit: fix clone

From
CMCatalin Marinas <catalin.marinas@gmail.com>
Date
Jan 12, 2006, 11:54 UTC
Message-ID
<b0943d9e0601120354u73489c74j@mail.gmail.com>
In-Reply-To
<43C58AF3.10606@citi.umich.edu>
On 11/01/06, Chuck Lever <cel@citi.umich.edu> wrote:
Show 7 quoted lines
> Chuck Lever wrote:
> > seems to me the "git clone" script should create an environment where
> > "git-rev-parse --git-dir" ought to work correctly.
>
> stgit/main.py does a special stack.Series('master') just for the clone
> command.  it really shouldn't do this -- the crt_series.init() in the
> clone command ought to be fixed to do this properly.

If the stack.Series() doesn't get a parameter, it will try to get the default branch using 'git-symbolic-ref HEAD'. Any command run outside a tree (and which doesn't have the -h option) would fail. The clone command is the only one allowed to run outside a tree and that's why I passed a default branch name. This is to avoid the creation of another stack.Series() object later when the git tree was cloned.

See the attached patch for a different fix and let me know if there are any issues with it. I should probably release 0.8.1 with the fixed bugs.

-- Catalin

Fix the clone command failure
From: Catalin Marinas <catalin.marinas@gmail.com>

The clone command fails because there is no GIT tree available, which is wrong. The patch fixes the Series.__init__() function and also creates a new Series object in clone.py once a GIT tree was initialised.

Signed-off-by: Catalin Marinas <catalin.marinas@gmail.com>
---
 stgit/commands/clone.py |    2 +-
 stgit/main.py           |   18 ++++++++----------
 stgit/stack.py          |   30 ++++++++++++++++--------------
 3 files changed, 25 insertions(+), 25 deletions(-)
diff --git a/stgit/commands/clone.py b/stgit/commands/clone.py
index f4e3f6b..9ad76a6 100644
--- a/stgit/commands/clone.py
+++ b/stgit/commands/clone.py
@@ -51,6 +51,6 @@ def func(parser, options, args):
     os.chdir(local_dir)
     git.checkout(tree_id = 'HEAD')
 
-    crt_series.init()
+    stack.Series().init()
 
     print 'done'
diff --git a/stgit/main.py b/stgit/main.py
index b84d91d..2336a43 100644
--- a/stgit/main.py
+++ b/stgit/main.py
@@ -150,16 +150,14 @@ def main():
                           option_list = command.options)
     options, args = parser.parse_args()
     try:
-        # 'clone' doesn't expect an already initialised GIT tree
-        if cmd == 'clone':
-            stgit.commands.common.crt_series = stack.Series('master')
-        elif hasattr(options, 'branch') and options.branch:
-            stgit.commands.common.crt_series = stack.Series(options.branch)
-        else:
-            stgit.commands.common.crt_series = stack.Series()
-        # the line below is a simple way to avoid an exception when
-        # stgit is run outside an initialised tree
-        setattr(command, 'crt_series', stgit.commands.common.crt_series)
+        # 'clone' doesn't expect an already initialised GIT tree. A Series
+        # object will be created after the GIT tree is cloned
+        if cmd != 'clone':
+            if hasattr(options, 'branch') and options.branch:
+                command.crt_series = stack.Series(options.branch)
+            else:
+                command.crt_series = stack.Series()
+            stgit.commands.common.crt_series = command.crt_series
 
         command.func(parser, options, args)
     except (IOError, CmdException, stack.StackException, git.GitException), \
diff --git a/stgit/stack.py b/stgit/stack.py
index 8b7c296..c2adeb9 100644
--- a/stgit/stack.py
+++ b/stgit/stack.py
@@ -257,21 +257,23 @@ class Series:
     def __init__(self, name = None):
         """Takes a series name as the parameter.
         """
-        if name:
-            self.__name = name
-        else:
-            self.__name = git.get_head_file()
-
-        if self.__name:
+        try:
+            if name:
+                self.__name = name
+            else:
+                self.__name = git.get_head_file()
             base_dir = git.get_base_dir()
-            self.__patch_dir = os.path.join(base_dir, 'patches',
-                                            self.__name)
-            self.__base_file = os.path.join(base_dir, 'refs', 'bases',
-                                            self.__name)
-            self.__applied_file = os.path.join(self.__patch_dir, 'applied')
-            self.__unapplied_file = os.path.join(self.__patch_dir, 'unapplied')
-            self.__current_file = os.path.join(self.__patch_dir, 'current')
-            self.__descr_file = os.path.join(self.__patch_dir, 'description')
+        except git.GitException, ex:
+            raise StackException, 'GIT tree not initialised: %s' % ex
+
+        self.__patch_dir = os.path.join(base_dir, 'patches',
+                                        self.__name)
+        self.__base_file = os.path.join(base_dir, 'refs', 'bases',
+                                        self.__name)
+        self.__applied_file = os.path.join(self.__patch_dir, 'applied')
+        self.__unapplied_file = os.path.join(self.__patch_dir, 'unapplied')
+        self.__current_file = os.path.join(self.__patch_dir, 'current')
+        self.__descr_file = os.path.join(self.__patch_dir, 'description')
 
     def get_branch(self):
         """Return the branch name for the Series object
Previous: Chuck LeverNext: Chuck Lever
Message 4 of 6 in “stgit: fix clone”
  1. stgit: fix clonePavel Roskin, Jan 11, 2006
  2. Chuck LeverJan 11, 2006
  3. Chuck LeverJan 11, 2006
  4. Catalin MarinasJan 12, 2006
  5. Chuck LeverJan 12, 2006
  6. Pavel RoskinJan 13, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.