Expose the cherry-picking machinery through a public sequencer_pick_revisions() (renamed from pick_revisions() in builtin/revert.c), so that cherry-picking and reverting are special cases of a general sequencer operation. The cherry-pick builtin is now a thin wrapper that does command-line argument parsing before calling into sequencer_pick_revisions(). In the future, we can write a new "foo" builtin that calls into the sequencer like: memset(&opts, 0, sizeof(opts)); opts.action = REPLAY_FOO; opts.revisions = xmalloc(sizeof(*opts.revs)); parse_args_populate_opts(argc, argv, &opts); init_revisions(opts.revs); sequencer_pick_revisions(&opts); This patch does not intend to make any functional changes. Check with: $ git blame -s -C HEAD^..HEAD -- sequencer.c | grep -C3 '^[^^]' Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com> Reviewed-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
		
			
				
	
	
		
			50 lines
		
	
	
		
			856 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			856 B
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef SEQUENCER_H
 | 
						|
#define SEQUENCER_H
 | 
						|
 | 
						|
#define SEQ_DIR		"sequencer"
 | 
						|
#define SEQ_HEAD_FILE	"sequencer/head"
 | 
						|
#define SEQ_TODO_FILE	"sequencer/todo"
 | 
						|
#define SEQ_OPTS_FILE	"sequencer/opts"
 | 
						|
 | 
						|
enum replay_action {
 | 
						|
	REPLAY_REVERT,
 | 
						|
	REPLAY_PICK
 | 
						|
};
 | 
						|
 | 
						|
enum replay_subcommand {
 | 
						|
	REPLAY_NONE,
 | 
						|
	REPLAY_REMOVE_STATE,
 | 
						|
	REPLAY_CONTINUE,
 | 
						|
	REPLAY_ROLLBACK
 | 
						|
};
 | 
						|
 | 
						|
struct replay_opts {
 | 
						|
	enum replay_action action;
 | 
						|
	enum replay_subcommand subcommand;
 | 
						|
 | 
						|
	/* Boolean options */
 | 
						|
	int edit;
 | 
						|
	int record_origin;
 | 
						|
	int no_commit;
 | 
						|
	int signoff;
 | 
						|
	int allow_ff;
 | 
						|
	int allow_rerere_auto;
 | 
						|
 | 
						|
	int mainline;
 | 
						|
 | 
						|
	/* Merge strategy */
 | 
						|
	const char *strategy;
 | 
						|
	const char **xopts;
 | 
						|
	size_t xopts_nr, xopts_alloc;
 | 
						|
 | 
						|
	/* Only used by REPLAY_NONE */
 | 
						|
	struct rev_info *revs;
 | 
						|
};
 | 
						|
 | 
						|
/* Removes SEQ_DIR. */
 | 
						|
extern void remove_sequencer_state(void);
 | 
						|
 | 
						|
int sequencer_pick_revisions(struct replay_opts *opts);
 | 
						|
 | 
						|
#endif
 |