| #ifndef REPLAY_H |
| #define REPLAY_H |
| |
| #include "hash.h" |
| |
| struct repository; |
| struct rev_info; |
| |
| /* |
| * A set of options that can be passed to `replay_revisions()`. |
| */ |
| struct replay_revisions_options { |
| /* |
| * Starting point at which to create the new commits; must be a branch |
| * name. The branch will be updated to point to the rewritten commits. |
| * This option is mutually exclusive with `onto`. |
| */ |
| const char *advance; |
| |
| /* |
| * Starting point at which to create the new commits; must be a |
| * committish. References pointing at decendants of `onto` will be |
| * updated to point to the new commits. |
| */ |
| const char *onto; |
| |
| /* |
| * Update branches that point at commits in the given revision range. |
| * Requires `onto` to be set. |
| */ |
| int contained; |
| }; |
| |
| /* This struct is used as an out-parameter by `replay_revisions()`. */ |
| struct replay_result { |
| /* |
| * The set of reference updates that are caused by replaying the |
| * commits. |
| */ |
| struct replay_ref_update { |
| char *refname; |
| struct object_id old_oid; |
| struct object_id new_oid; |
| } *updates; |
| size_t updates_nr, updates_alloc; |
| }; |
| |
| void replay_result_release(struct replay_result *result); |
| |
| /* |
| * Replay a set of commits onto a new location. Leaves both the working tree, |
| * index and references untouched. Reference updates caused by the replay will |
| * be recorded in the `updates` out pointer. |
| * |
| * Returns 0 on success, 1 on conflict and a negative error code otherwise. |
| */ |
| int replay_revisions(struct rev_info *revs, |
| struct replay_revisions_options *opts, |
| struct replay_result *out); |
| |
| #endif |