threads / patch / 10165

patchBetter diagnostic for wrong branch configuration.

Subject: [StGIT PATCH] Better diagnostic for wrong branch configuration.

## tl;dr

6 messages between Oct 5, 2007 and Oct 8, 2007. Diffs are folded; open one to read it.

replies: 5people: 3as markdown or json

Yann Dirson· Oct 5, 2007, 20:44 UTC · lore

If the branch.*.merge parameter does not name a valid remote head, stgit would not rebase after a fetch, and would write instead 'Rebasing to "None" ... done'.

This patch makes this situation an error and tells the user what to fix in his repo configuration. ---

 stgit/commands/pull.py |    9 ++++++++-
 stgit/git.py           |    5 ++++-
 2 files changed, 12 insertions(+), 2 deletions(-)
Show changes to 2 files +12 −2

stgit/commands/pull.py, stgit/git.py

diff --git a/stgit/commands/pull.py b/stgit/commands/pull.py
index 052ea2b..070db99 100644
--- a/stgit/commands/pull.py
+++ b/stgit/commands/pull.py
@@ -90,7 +90,14 @@ def func(parser, options, args):
     elif policy == 'fetch-rebase':
         out.info('Fetching from "%s"' % repository)
         git.fetch(repository)
-        rebase(git.fetch_head())
+        try:
+            target = git.fetch_head()
+        except git.GitException:
+            out.error('Could not find the remote head to rebase onto, pushing any patches back...')
+            post_rebase(applied, False, False)
+            raise CmdException, 'Could not find the remote head to rebase onto - fix branch.%s.merge in .git/config' % crt_series.get_name()
+
+        rebase(target)
     elif policy == 'rebase':
         rebase(crt_series.get_parent_branch())
 
diff --git a/stgit/git.py b/stgit/git.py
index 9e0f771..a0493bc 100644
--- a/stgit/git.py
+++ b/stgit/git.py
@@ -1003,11 +1003,14 @@ def fetch_head():
         m = re.match('^([^\t]*)\t\t', line)
         if m:
             if fetch_head:
-                raise GitException, "StGit does not support multiple FETCH_HEAD"
+                raise GitException, 'StGit does not support multiple FETCH_HEAD'
             else:
                 fetch_head=m.group(1)
     stream.close()
 
+    if not fetch_head:
+        raise GitException, 'No for-merge remote head found in FETCH_HEAD'
+
     # here we are sure to have a single fetch_head
     return fetch_head
 
Karl Hasselström· Oct 7, 2007, 13:14 UTC · re: Yann Dirson · lore

Re: [StGIT PATCH] Better diagnostic for wrong branch configuration.

On 2007-10-05 22:44:52 +0200, Yann Dirson wrote:
Show 6 quoted lines
> If the branch.*.merge parameter does not name a valid remote head,
> stgit would not rebase after a fetch, and would write instead
> 'Rebasing to "None" ... done'.
>
> This patch makes this situation an error and tells the user what to
> fix in his repo configuration.
Good. Sign-off?
> -                raise GitException, "StGit does not support multiple FETCH_HEAD"
> +                raise GitException, 'StGit does not support multiple FETCH_HEAD'
Unrelated quote fixup. No big deal, though.
-- 
Karl Hasselström, kha@treskal.com
      www.treskal.com/kalle
Yann Dirson· Oct 7, 2007, 14:17 UTC · re: Karl Hasselström · lore

Re: [StGIT PATCH] Better diagnostic for wrong branch configuration.

On Sun, Oct 07, 2007 at 03:14:17PM +0200, Karl Hasselström wrote:
Show 10 quoted lines
> On 2007-10-05 22:44:52 +0200, Yann Dirson wrote:
> 
> > If the branch.*.merge parameter does not name a valid remote head,
> > stgit would not rebase after a fetch, and would write instead
> > 'Rebasing to "None" ... done'.
> >
> > This patch makes this situation an error and tells the user what to
> > fix in his repo configuration.
> 
> Good. Sign-off?
Oops, sorry - "Signed-off-by: Yann Dirson <ydirson@altern.org>"
> > -                raise GitException, "StGit does not support multiple FETCH_HEAD"
> > +                raise GitException, 'StGit does not support multiple FETCH_HEAD'
> 
> Unrelated quote fixup. No big deal, though.
Right - did not seem to warrant a patch of its own :)
Best regards,
-- 
Yann
Karl Hasselström· Oct 7, 2007, 15:25 UTC · re: Yann Dirson · lore

Re: [StGIT PATCH] Better diagnostic for wrong branch configuration.

On 2007-10-07 16:17:44 +0200, Yann Dirson wrote:
> Oops, sorry - "Signed-off-by: Yann Dirson <ydirson@altern.org>"
Thanks; I'll include that when I push out my branches tonight.
-- 
Karl Hasselström, kha@treskal.com
      www.treskal.com/kalle
Catalin Marinas· Oct 7, 2007, 21:04 UTC · re: Yann Dirson · lore

Re: [StGIT PATCH] Better diagnostic for wrong branch configuration.

On 05/10/2007, Yann Dirson <ydirson@altern.org> wrote:
> If the branch.*.merge parameter does not name a valid remote head,
> stgit would not rebase after a fetch, and would write instead
> 'Rebasing to "None" ... done'.

Applied, thanks. I'll try it tomorrow with my StGIT over SVN configuration as well (it works OK with the latter patches).

-- 
Catalin
Catalin Marinas· Oct 8, 2007, 13:00 UTC · re: Yann Dirson · lore

Re: [StGIT PATCH] Better diagnostic for wrong branch configuration.

On 05/10/2007, Yann Dirson <ydirson@altern.org> wrote:
Show 14 quoted lines
> --- a/stgit/git.py
> +++ b/stgit/git.py
> @@ -1003,11 +1003,14 @@ def fetch_head():
>          m = re.match('^([^\t]*)\t\t', line)
>          if m:
>              if fetch_head:
> -                raise GitException, "StGit does not support multiple FETCH_HEAD"
> +                raise GitException, 'StGit does not support multiple FETCH_HEAD'
>              else:
>                  fetch_head=m.group(1)
>      stream.close()
>
> +    if not fetch_head:
> +        raise GitException, 'No for-merge remote head found in FETCH_HEAD'
OK, I tried and it doesn't work with my StGIT over SVN configuration.

What I did is defining 'pull-policy' as 'fetch-rebase', 'fetchcmd' as 'git svn fetch' which doesn't create any FETCH_HEAD. The 'pullcmd' is defined as 'git svn rebase' and it doesn't use any argument if git.fetch_head() return None.

I also think it is better for the pull command to re-raise the git.fetch_head exception as this one contains more detailed information about the error (after the out.error call). It currently shows that the remote head couldn't be found but there is the multiple heads case raised by git.fetch_head.

-- 
Catalin

← back to recent threads