summaryrefslogtreecommitdiff
path: root/include/git2/rebase.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/git2/rebase.h')
-rw-r--r--include/git2/rebase.h74
1 files changed, 68 insertions, 6 deletions
diff --git a/include/git2/rebase.h b/include/git2/rebase.h
index d9cf2318e..3b4f44709 100644
--- a/include/git2/rebase.h
+++ b/include/git2/rebase.h
@@ -39,9 +39,67 @@ typedef struct {
const char *rewrite_notes_ref;
} git_rebase_options;
+/** Type of rebase operation in-progress after calling `git_rebase_next`. */
+typedef enum {
+ /**
+ * The given commit is to be cherry-picked. The client should commit
+ * the changes and continue if there are no conflicts.
+ */
+ GIT_REBASE_OPERATION_PICK = 0,
+
+ /**
+ * The given commit is to be cherry-picked, but the client should prompt
+ * the user to provide an updated commit message.
+ */
+ GIT_REBASE_OPERATION_REWORD,
+
+ /**
+ * The given commit is to be cherry-picked, but the client should stop
+ * to allow the user to edit the changes before committing them.
+ */
+ GIT_REBASE_OPERATION_EDIT,
+
+ /**
+ * The given commit is to be squashed into the previous commit. The
+ * commit message will be merged with the previous message.
+ */
+ GIT_REBASE_OPERATION_SQUASH,
+
+ /**
+ * The given commit is to be squashed into the previous commit. The
+ * commit message from this commit will be discarded.
+ */
+ GIT_REBASE_OPERATION_FIXUP,
+
+ /**
+ * No commit will be cherry-picked. The client should run the given
+ * command and (if successful) continue.
+ */
+ GIT_REBASE_OPERATION_EXEC,
+} git_rebase_operation_t;
+
#define GIT_REBASE_OPTIONS_VERSION 1
#define GIT_REBASE_OPTIONS_INIT {GIT_REBASE_OPTIONS_VERSION}
+typedef struct {
+ /** The type of rebase operation. */
+ unsigned int type;
+
+ union {
+ /**
+ * The commit ID being cherry-picked. This will be populated for
+ * all operations except those of type `GIT_REBASE_OPERATION_EXEC`.
+ */
+ git_oid id;
+
+ /**
+ * The executable the user has requested be run. This will only
+ * be populated for operations of type `GIT_REBASE_OPERATION_EXEC`.
+ */
+ const char *exec;
+ };
+} git_rebase_operation;
+
/**
* Initializes a `git_rebase_options` with default values. Equivalent to
* creating an instance with GIT_REBASE_OPTIONS_INIT.
@@ -78,15 +136,19 @@ GIT_EXTERN(int) git_rebase(
const git_rebase_options *opts);
/**
- * Applies the next patch, updating the index and working directory with the
- * changes. If there are conflicts, you will need to address those before
- * committing the changes.
+ * Performs the next rebase operation and returns the information about it.
+ * If the operation is one that applies a patch (which is any operation except
+ * GIT_REBASE_OPERATION_EXEC) then the patch will be applied and the index and
+ * working directory will be updated with the changes. If there are conflicts,
+ * you will need to address those before committing the changes.
*
+ * @param out The rebase operation that is to be performed next
* @param repo The repository with a rebase in progress
* @param checkout_opts Options to specify how the patch should be checked out
* @return Zero on success; -1 on failure.
*/
GIT_EXTERN(int) git_rebase_next(
+ git_rebase_operation *operation,
git_repository *repo,
git_checkout_options *checkout_opts);
@@ -94,7 +156,7 @@ GIT_EXTERN(int) git_rebase_next(
* Commits the current patch. You must have resolved any conflicts that
* were introduced during the patch application from the `git_rebase_next`
* invocation.
- *
+ *
* @param id Pointer in which to store the OID of the newly created commit
* @param repo The repository with the in-progress rebase
* @param author The author of the updated commit, or NULL to keep the
@@ -105,8 +167,8 @@ GIT_EXTERN(int) git_rebase_next(
* this should also be NULL, and the encoding from the original
* commit will be maintained. If message is specified, this may be
* NULL to indicate that "UTF-8" is to be used.
- * @param message The message for this commit, or NULL to keep the message
- * from the original commit
+ * @param message The message for this commit, or NULL to use the message
+ * from the original commit.
* @return Zero on success, GIT_EUNMERGED if there are unmerged changes in
* the index, GIT_EAPPLIED if the current commit has already
* been applied to the upstream and there is nothing to commit,