diff options
| author | Carlos Martín Nieto <cmn@dwim.me> | 2014-01-29 14:07:18 +0100 |
|---|---|---|
| committer | Carlos Martín Nieto <cmn@dwim.me> | 2014-02-05 12:07:56 +0100 |
| commit | fc4728e3e2a4094b202a63319232f25adbd55fed (patch) | |
| tree | ad320fc0824b3e924c529da0d9ef461b8be90672 /src/refdb_fs.c | |
| parent | 5d96fe8828505db852671175d5895dfd275f3d06 (diff) | |
| download | libgit2-fc4728e3e2a4094b202a63319232f25adbd55fed.tar.gz | |
refs: return GIT_EMODIFIED if the ref target moved
In case we loose the race to update the reference, return GIT_EMODIFIED
to let the user distinguish it from other types of errors.
Diffstat (limited to 'src/refdb_fs.c')
| -rw-r--r-- | src/refdb_fs.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/refdb_fs.c b/src/refdb_fs.c index fd6d61e1d..0a2a33a51 100644 --- a/src/refdb_fs.c +++ b/src/refdb_fs.c @@ -941,7 +941,7 @@ static int refdb_fs_backend__write( refdb_fs_backend *backend = (refdb_fs_backend *)_backend; git_filebuf file = GIT_FILEBUF_INIT; git_reference *old_ref; - int error; + int error = 0; assert(backend); @@ -961,12 +961,14 @@ static int refdb_fs_backend__write( if (old_ref->type == GIT_REF_SYMBOLIC) { giterr_set(GITERR_REFERENCE, "cannot compare id to symbolic reference target"); + error = -1; goto on_error; } /* Finally we can compare the ids */ if (git_oid_cmp(old_id, &old_ref->target.oid)) { giterr_set(GITERR_REFERENCE, "old reference value does not match"); + error = GIT_EMODIFIED; goto on_error; } } @@ -982,7 +984,7 @@ static int refdb_fs_backend__write( on_error: git_filebuf_cleanup(&file); git_reference_free(old_ref); - return -1; + return error; } static int refdb_fs_backend__delete( |
