diff options
| author | schu <schu-github@schulog.org> | 2011-11-21 11:56:00 +0100 |
|---|---|---|
| committer | schu <schu-github@schulog.org> | 2011-11-21 16:38:30 +0100 |
| commit | a5cd086dffbc07ad839f3a9c320dda6970594126 (patch) | |
| tree | e0a18df76f3ecc8b3cf1b36ac2fce12dc5a9a87a | |
| parent | b7c93a66e2410298fe846b9ed18a70b4d0ace45e (diff) | |
| download | libgit2-a5cd086dffbc07ad839f3a9c320dda6970594126.tar.gz | |
reference_rename: don't delete the reflog
reference_rename used to delete an old reflog file when renaming a
reference to not confuse git.git. Don't do this anymore but let the user
take care of writing a reflog entry.
Signed-off-by: schu <schu-github@schulog.org>
| -rw-r--r-- | include/git2/refs.h | 5 | ||||
| -rw-r--r-- | src/refs.c | 31 |
2 files changed, 14 insertions, 22 deletions
diff --git a/include/git2/refs.h b/include/git2/refs.h index 82c5d8881..32671aa66 100644 --- a/include/git2/refs.h +++ b/include/git2/refs.h @@ -183,6 +183,11 @@ GIT_EXTERN(int) git_reference_set_oid(git_reference *ref, const git_oid *id); * If the `force` flag is not enabled, and there's already * a reference with the given name, the renaming will fail. * + * IMPORTANT: + * The user needs to write a proper reflog entry if the + * reflog is enabled for the repository. We only rename + * the reflog if it exists. + * * @param ref The reference to rename * @param new_name The new name for the reference * @param force Overwrite an existing reference diff --git a/src/refs.c b/src/refs.c index d7396f203..dfdde080f 100644 --- a/src/refs.c +++ b/src/refs.c @@ -10,6 +10,7 @@ #include "repository.h" #include "fileops.h" #include "pack.h" +#include "reflog.h" #include <git2/tag.h> #include <git2/object.h> @@ -1319,28 +1320,6 @@ int git_reference_rename(git_reference *ref, const char *new_name, int force) } /* - * Crude hack: delete any logs till we support proper reflogs. - * Otherwise git.git will possibly fail and leave a mess. git.git - * writes reflogs by default in any repo with a working directory: - * - * "We only enable reflogs in repositories that have a working directory - * associated with them, as shared/bare repositories do not have - * an easy means to prune away old log entries, or may fail logging - * entirely if the user's gecos information is not valid during a push. - * This heuristic was suggested on the mailing list by Junio." - * - * Shawn O. Pearce - 0bee59186976b1d9e6b2dd77332480c9480131d5 - * - * TODO - * - */ - git_path_join_n(aux_path, 3, ref->owner->path_repository, "logs", ref->name); - if (git_futils_isfile(aux_path) == GIT_SUCCESS) { - if ((error = p_unlink(aux_path)) < GIT_SUCCESS) - goto rollback; - } - - /* * Finally we can create the new reference. */ if (ref->flags & GIT_REF_SYMBOLIC) { @@ -1372,6 +1351,14 @@ int git_reference_rename(git_reference *ref, const char *new_name, int force) } /* + * Rename the reflog file. + */ + git_path_join_n(aux_path, 3, ref->owner->path_repository, + GIT_REFLOG_DIR, ref->name); + if (git_futils_exists(aux_path) == GIT_SUCCESS) + error = git_reflog_rename(ref, new_name); + + /* * Change the name of the reference given by the user. */ git__free(ref->name); |
