Christian Couder <chriscool@xxxxxxxxxxxxx> writes: > From: Stephan Beyer <s-beyer@xxxxxxx> > > This commit is made of code from the sequencer GSoC project: > > git://repo.or.cz/git/sbeyer.git > > (commit e7b8dab0c2a73ade92017a52bb1405ea1534ef20) > > The goal of this commit is to abstract out pick functionnality > into a new pick() function made of code from "builtin-revert.c". > > The new pick() function is in a new "pick.c" file with an > associated "pick.h". > > "pick.h" and "pick.c" are strictly the same as on the sequencer repo, > but a few changes were needed on "builtin-revert.c" to keep it up to > date with changes on git.git. > > Mentored-by: Daniel Barkalow <barkalow@xxxxxxxxxxxx> > Mentored-by: Christian Couder <chriscool@xxxxxxxxxxxxx> > Signed-off-by: Christian Couder <chriscool@xxxxxxxxxxxxx> > > --- > > This patch is part of trying to port git-rebase--interactive.sh > to C using code from the sequencer GSoC project. But maybe it can > be seen as a clean up too. Thanks. Why doesn't this have Stephan's sign-off? The new "pick.c" file seems to be a nicer implementation of the main logic of builtin-revert.c and its primary niceness comes from the use of strbuf. A few minor points and comments. * error() returns -1. error("message"); => return error("message"); return -1; * pick() might be a bit too short and abstract name for a generic library function. * REVERSE is made to imply ADD_NOTE but the codepath that acts on ADD_NOTE never seems to be reached if REVERSE is set. The intent of pick() funtion looks like it starts from the current index (not HEAD), and allow the effect of one commit replayed (either forward or backward) to that state, leaving the result in the index. You do not have to start from a commit, so you can replay many commits to the index in sequence without commiting in between to squash multiple steps if you wanted to. I think that makes sense as a nice general interface. The "if (no_commit)" codepath in the original code did things very differently from the usual "start from HEAD and replay the effect" codepath and it warranted the big "We do not intend to commit immediately" comment. For pick() function, however, the "start from index" is the normal and only mode of operation. Keeping the big comment is misleading. When it replays another commit on HEAD, the new code does not read "HEAD" by hand into head anymore, but it still has the check between the index and "HEAD" and refuses to run if the index is dirty, which means the tree you get from write_cache_as_tree() is guaranteed to be the same as "HEAD", so this conversion looks correct. -- 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