mirror of
https://github.com/git/git.git
synced 2026-02-01 05:20:15 +00:00
The sequencer is our attempt to lib-ify cherry-pick. Yet it behaves
like a one-shot command when it reads its configuration: memory is
allocated and released only when the command exits.
This is kind of okay for git-cherry-pick, which *is* a one-shot
command. All the work to make the sequencer its work horse was
done to allow using the functionality as a library function, though,
including proper clean-up after use.
This patch introduces an API to pass the responsibility of releasing
certain memory to the sequencer. Example:
const char *label =
sequencer_entrust(opts, xstrfmt("From: %s", email));
The entrusted memory will remain valid until sequencer_remove_state() is
called, or the program exits, whichever comes first.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
67 lines
1.3 KiB
C
67 lines
1.3 KiB
C
#ifndef SEQUENCER_H
|
|
#define SEQUENCER_H
|
|
|
|
const char *git_path_seq_dir(void);
|
|
|
|
#define APPEND_SIGNOFF_DEDUP (1u << 0)
|
|
|
|
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 allow_empty;
|
|
int allow_empty_message;
|
|
int keep_redundant_commits;
|
|
|
|
int mainline;
|
|
|
|
const char *gpg_sign;
|
|
|
|
/* Merge strategy */
|
|
const char *strategy;
|
|
const char **xopts;
|
|
size_t xopts_nr, xopts_alloc;
|
|
|
|
/* Only used by REPLAY_NONE */
|
|
struct rev_info *revs;
|
|
|
|
/* malloc()ed data entrusted to the sequencer */
|
|
void **owned;
|
|
int owned_nr, owned_alloc;
|
|
};
|
|
#define REPLAY_OPTS_INIT { -1, -1 }
|
|
|
|
/*
|
|
* Make it the duty of sequencer_remove_state() to release the memory;
|
|
* For ease of use, return the same pointer.
|
|
*/
|
|
void *sequencer_entrust(struct replay_opts *opts, void *to_free);
|
|
|
|
int sequencer_pick_revisions(struct replay_opts *opts);
|
|
|
|
extern const char sign_off_header[];
|
|
|
|
void append_signoff(struct strbuf *msgbuf, int ignore_footer, unsigned flag);
|
|
void append_conflicts_hint(struct strbuf *msgbuf);
|
|
|
|
#endif
|