diff options
author | Edward Thomson <ethomson@microsoft.com> | 2014-10-04 20:17:26 -0400 |
---|---|---|
committer | Edward Thomson <ethomson@microsoft.com> | 2014-10-26 22:59:50 -0400 |
commit | 979645a7195b8ce9895c18ee00c8913ea38f93eb (patch) | |
tree | 8b894001847a82bb24d6d0484980ae26fc6b7efa | |
parent | 18b00406c6427eb8c9d96864448474e1d85017de (diff) | |
download | libgit2-979645a7195b8ce9895c18ee00c8913ea38f93eb.tar.gz |
rebase: updates based on PR comments
-rw-r--r-- | include/git2.h | 1 | ||||
-rw-r--r-- | include/git2/rebase.h | 32 | ||||
-rw-r--r-- | src/rebase.c | 48 |
3 files changed, 47 insertions, 34 deletions
diff --git a/include/git2.h b/include/git2.h index 5e032b2bf..41adbbad2 100644 --- a/include/git2.h +++ b/include/git2.h @@ -40,6 +40,7 @@ #include "git2/patch.h" #include "git2/pathspec.h" #include "git2/push.h" +#include "git2/rebase.h" #include "git2/refdb.h" #include "git2/reflog.h" #include "git2/refs.h" diff --git a/include/git2/rebase.h b/include/git2/rebase.h index 24d8fcf71..095975edb 100644 --- a/include/git2/rebase.h +++ b/include/git2/rebase.h @@ -84,21 +84,19 @@ typedef enum { typedef struct { /** The type of rebase operation. */ - unsigned int type; + git_rebase_operation_t type; - union { - /** - * The commit ID being cherry-picked. This will be populated for - * all operations except those of type `GIT_REBASE_OPERATION_EXEC`. - */ - const git_oid id; + /** + * The commit ID being cherry-picked. This will be populated for + * all operations except those of type `GIT_REBASE_OPERATION_EXEC`. + */ + const 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; - }; + /** + * 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; /** @@ -115,7 +113,7 @@ GIT_EXTERN(int) git_rebase_init_options( unsigned int version); /** - * Initializes a rebase operation to rebase the changes in `ours` + * Initializes a rebase operation to rebase the changes in `branch` * relative to `upstream` onto another branch. To begin the rebase * process, call `git_rebase_next`. When you have finished with this * object, call `git_rebase_free`. @@ -127,7 +125,7 @@ GIT_EXTERN(int) git_rebase_init_options( * reachable commits * @param onto The branch to rebase onto, or NULL to rebase onto the given * upstream - * @param signature The signature of the rebaser + * @param signature The signature of the rebaser (optional) * @param opts Options to specify how rebase is performed * @return Zero on success; -1 on failure. */ @@ -242,7 +240,7 @@ GIT_EXTERN(int) git_rebase_abort( * been applied. * * @param rebase The rebase that is in-progress - * @param signature The identity that is finishing the rebase + * @param signature The identity that is finishing the rebase (optional) * @param opts Options to specify how rebase is finished * @param Zero on success; -1 on error */ @@ -254,7 +252,7 @@ GIT_EXTERN(int) git_rebase_finish( /** * Frees the `git_rebase` object. * - * @param rebase The rebase that is in-progress + * @param rebase The rebase object */ GIT_EXTERN(void) git_rebase_free(git_rebase *rebase); diff --git a/src/rebase.c b/src/rebase.c index 6905d17dd..6453ecc67 100644 --- a/src/rebase.c +++ b/src/rebase.c @@ -23,28 +23,28 @@ #include <git2/revwalk.h> #include <git2/notes.h> -#define REBASE_APPLY_DIR "rebase-apply" -#define REBASE_MERGE_DIR "rebase-merge" +#define REBASE_APPLY_DIR "rebase-apply" +#define REBASE_MERGE_DIR "rebase-merge" -#define HEAD_NAME_FILE "head-name" -#define ORIG_HEAD_FILE "orig-head" -#define HEAD_FILE "head" -#define ONTO_FILE "onto" -#define ONTO_NAME_FILE "onto_name" -#define QUIET_FILE "quiet" +#define HEAD_NAME_FILE "head-name" +#define ORIG_HEAD_FILE "orig-head" +#define HEAD_FILE "head" +#define ONTO_FILE "onto" +#define ONTO_NAME_FILE "onto_name" +#define QUIET_FILE "quiet" -#define MSGNUM_FILE "msgnum" -#define END_FILE "end" -#define CMT_FILE_FMT "cmt.%" PRIuZ -#define CURRENT_FILE "current" -#define REWRITTEN_FILE "rewritten" +#define MSGNUM_FILE "msgnum" +#define END_FILE "end" +#define CMT_FILE_FMT "cmt.%" PRIuZ +#define CURRENT_FILE "current" +#define REWRITTEN_FILE "rewritten" -#define ORIG_DETACHED_HEAD "detached HEAD" +#define ORIG_DETACHED_HEAD "detached HEAD" -#define NOTES_DEFAULT_REF NULL +#define NOTES_DEFAULT_REF NULL -#define REBASE_DIR_MODE 0777 -#define REBASE_FILE_MODE 0666 +#define REBASE_DIR_MODE 0777 +#define REBASE_FILE_MODE 0666 typedef enum { GIT_REBASE_TYPE_NONE = 0, @@ -948,6 +948,7 @@ static int rebase_copy_note( { git_note *note = NULL; git_oid note_id; + git_signature *who = NULL; int error; if ((error = git_note_read(¬e, rebase->repo, opts->rewrite_notes_ref, from)) < 0) { @@ -959,11 +960,24 @@ static int rebase_copy_note( goto done; } + if (!committer) { + if((error = git_signature_default(&who, rebase->repo)) < 0) { + if (error != GIT_ENOTFOUND || + (error = git_signature_now(&who, "unknown", "unknown")) < 0) + goto done; + + giterr_clear(); + } + + committer = who; + } + error = git_note_create(¬e_id, rebase->repo, git_note_author(note), committer, opts->rewrite_notes_ref, to, git_note_message(note), 0); done: git_note_free(note); + git_signature_free(who); return error; } |