git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>
To: git@vger.kernel.org
Cc: Johannes Schindelin <Johannes.Schindelin@gmx.de>,
	Johannes Sixt <j.sixt@viscovery.net>,
	Christian Couder <chriscool@tuxfamily.org>,
	Martin von Zweigbergk <martin.von.zweigbergk@gmail.com>
Subject: [PATCH/RFC 00/20] Refactor rebase
Date: Thu, 25 Nov 2010 20:57:43 +0100	[thread overview]
Message-ID: <1290715083-16919-1-git-send-email-martin.von.zweigbergk@gmail.com> (raw)

This is a first draft of my attempt to refactor the rebase code. I
have tried to refactor it as Hannes suggested, namely "to write a
command line processor, git-rebase.sh, that sets shell variables from
options that it collects from various sources, then dispatches to one
of git-rebase--interactive.sh, git-rebase--merge.sh, or
git-rebase--am.sh (the latter two would be stripped-down copies of the
current git-rebase.sh)."


Patches 01-04 try to make git-rebase.sh more readable and extensible.

Patches 05-16 factor out common code between git-rebase.sh and
git-rebase--interactive.sh.

Patches 17-20 finally achieve, I hope, what Hannes suggested.


I have aligned a lot of the error checking and error messages, but I
still have barely gotten to align any of the command line options
supported by 'git rebase' and 'git rebase -i'. How do you think I
should continue? Some specific questions:

1. What should -v do? Interactive rebase currently prints most
commands it is about to execute, while non-interactive rebase only
prints a header to the diffstat. Is there any reason they should be
different? If not, what should they print?

2. Interactive rebase currently saves most command line options when
the rebase is initiated and then reads then back on '--continue'
etc. Non-interactive rebase does not store any options and allows them
to be passed on the command line when the rebase is continued
instead. Any reason for the difference? What do we want?


All feedback would be greatly appreciated! I'm new to the Git code,
new to development on Linux and even quite new to bash, so please
review very carefully. Thanks!


Martin von Zweigbergk (20):
  rebase: clearer names for directory variables
  rebase: refactor reading of state
  rebase: read state outside loop
  rebase: remove unused rebase state 'prev_head'
  rebase: act on command line outside parsing loop
  rebase: collect check for existing rebase
  rebase: stricter check on arguments
  rebase: align variable names
  rebase: align variable content
  rebase: factor out command line option processing
  rebase -i: remove now unnecessary directory checks
  rebase: reorder validation steps
  rebase: factor out reference parsing
  rebase: factor out clean work tree check
  rebase: factor out call to pre-rebase hook
  rebase -i: support --stat
  rebase: improve detection of rebase in progress
  rebase -m: extract code to new source file
  rebase: extract am code to new source file
  rebase: show consistent conflict resolution hint

 .gitignore                 |    2 +
 Makefile                   |    2 +
 git-rebase--am.sh          |   34 +++
 git-rebase--interactive.sh |  554 ++++++++++++++++----------------------------
 git-rebase--merge.sh       |  154 ++++++++++++
 git-rebase.sh              |  434 ++++++++++++-----------------------
 6 files changed, 538 insertions(+), 642 deletions(-)
 create mode 100644 git-rebase--am.sh
 create mode 100644 git-rebase--merge.sh

-- 
1.7.3.2.864.gbbb96

             reply	other threads:[~2010-11-26  1:58 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-25 19:57 Martin von Zweigbergk [this message]
2010-11-25 19:57 ` [PATCH/RFC 01/20] rebase: clearer names for directory variables Martin von Zweigbergk
2010-11-25 19:57 ` [PATCH/RFC 02/20] rebase: refactor reading of state Martin von Zweigbergk
2010-11-25 19:57 ` [PATCH/RFC 03/20] rebase: read state outside loop Martin von Zweigbergk
2010-11-25 19:57 ` [PATCH/RFC 04/20] rebase: remove unused rebase state 'prev_head' Martin von Zweigbergk
2010-11-26  7:54   ` Michael J Gruber
2010-11-26 18:45     ` Martin von Zweigbergk
2010-11-29 21:06     ` Junio C Hamano
2010-11-30  7:29       ` Michael J Gruber
2010-11-25 19:57 ` [PATCH/RFC 05/20] rebase: act on command line outside parsing loop Martin von Zweigbergk
2010-11-25 19:57 ` [PATCH/RFC 06/20] rebase: collect check for existing rebase Martin von Zweigbergk
2010-11-25 19:57 ` [PATCH/RFC 07/20] rebase: stricter check on arguments Martin von Zweigbergk
2010-11-25 19:57 ` [PATCH/RFC 08/20] rebase: align variable names Martin von Zweigbergk
2010-11-25 19:57 ` [PATCH/RFC 09/20] rebase: align variable content Martin von Zweigbergk
2010-11-25 19:57 ` [PATCH/RFC 10/20] rebase: factor out command line option processing Martin von Zweigbergk
2010-11-25 19:57 ` [PATCH/RFC 11/20] rebase -i: remove now unnecessary directory checks Martin von Zweigbergk
2010-11-25 19:57 ` [PATCH/RFC 12/20] rebase: reorder validation steps Martin von Zweigbergk
2010-11-25 19:57 ` [PATCH/RFC 13/20] rebase: factor out reference parsing Martin von Zweigbergk
2010-11-25 19:57 ` [PATCH/RFC 14/20] rebase: factor out clean work tree check Martin von Zweigbergk
2010-11-25 19:57 ` [PATCH/RFC 15/20] rebase: factor out call to pre-rebase hook Martin von Zweigbergk
2010-11-25 19:57 ` [PATCH/RFC 16/20] rebase -i: support --stat Martin von Zweigbergk
2010-11-25 19:58 ` [PATCH/RFC 17/20] rebase: improve detection of rebase in progress Martin von Zweigbergk
2010-11-25 19:58 ` [PATCH/RFC 18/20] rebase -m: extract code to new source file Martin von Zweigbergk
2010-11-25 19:58 ` [PATCH/RFC 19/20] rebase: extract am " Martin von Zweigbergk
2010-11-25 19:58 ` [PATCH/RFC 20/20] rebase: show consistent conflict resolution hint Martin von Zweigbergk
2010-11-25 20:23 ` [PATCH/RFC 00/20] Refactor rebase Martin von Zweigbergk
2010-11-26 14:10   ` Sverre Rabbelier
2010-11-26 19:16     ` Martin von Zweigbergk
2010-11-27  1:24       ` Sverre Rabbelier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1290715083-16919-1-git-send-email-martin.von.zweigbergk@gmail.com \
    --to=martin.von.zweigbergk@gmail.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=chriscool@tuxfamily.org \
    --cc=git@vger.kernel.org \
    --cc=j.sixt@viscovery.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).