Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
lock_ref_sha1(): do not sometimes error() and sometimes die().
author
Junio C Hamano
<junkio@cox.net>
Sat, 30 Sep 2006 21:14:31 +0000
(14:14 -0700)
committer
Junio C Hamano
<junkio@cox.net>
Sat, 30 Sep 2006 22:07:58 +0000
(15:07 -0700)
This cleans up the error path in the function so it does not
die() itself sometimes while signalling an error with NULL some
other times which was inconsistent and confusing.
Signed-off-by: Junio C Hamano <junkio@cox.net>
refs.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
5e290ff
)
diff --git
a/refs.c
b/refs.c
index 6ee5f96943d59243871c4158c06795e978bb8d8d..157de432ced603cd27f6c181195fa8f72a023c8f 100644
(file)
--- a/
refs.c
+++ b/
refs.c
@@
-561,6
+561,7
@@
static struct ref_lock *lock_ref_sha1_basic(const char *ref, const unsigned char
const char *orig_ref = ref;
struct ref_lock *lock;
struct stat st;
const char *orig_ref = ref;
struct ref_lock *lock;
struct stat st;
+ int last_errno = 0;
int mustexist = (old_sha1 && !is_null_sha1(old_sha1));
lock = xcalloc(1, sizeof(struct ref_lock));
int mustexist = (old_sha1 && !is_null_sha1(old_sha1));
lock = xcalloc(1, sizeof(struct ref_lock));
@@
-574,17
+575,18
@@
static struct ref_lock *lock_ref_sha1_basic(const char *ref, const unsigned char
* to remain.
*/
ref_file = git_path("%s", orig_ref);
* to remain.
*/
ref_file = git_path("%s", orig_ref);
- if (remove_empty_directories(ref_file))
- die("there are still refs under '%s'", orig_ref);
+ if (remove_empty_directories(ref_file)) {
+ last_errno = errno;
+ error("there are still refs under '%s'", orig_ref);
+ goto error_return;
+ }
ref = resolve_ref(orig_ref, lock->old_sha1, mustexist, NULL);
}
if (!ref) {
ref = resolve_ref(orig_ref, lock->old_sha1, mustexist, NULL);
}
if (!ref) {
-
int
last_errno = errno;
+ last_errno = errno;
error("unable to resolve reference %s: %s",
orig_ref, strerror(errno));
error("unable to resolve reference %s: %s",
orig_ref, strerror(errno));
- unlock_ref(lock);
- errno = last_errno;
- return NULL;
+ goto error_return;
}
lock->lk = xcalloc(1, sizeof(struct lock_file));
}
lock->lk = xcalloc(1, sizeof(struct lock_file));
@@
-593,11
+595,19
@@
static struct ref_lock *lock_ref_sha1_basic(const char *ref, const unsigned char
ref_file = git_path("%s", ref);
lock->force_write = lstat(ref_file, &st) && errno == ENOENT;
ref_file = git_path("%s", ref);
lock->force_write = lstat(ref_file, &st) && errno == ENOENT;
- if (safe_create_leading_directories(ref_file))
- die("unable to create directory for %s", ref_file);
+ if (safe_create_leading_directories(ref_file)) {
+ last_errno = errno;
+ error("unable to create directory for %s", ref_file);
+ goto error_return;
+ }
lock->lock_fd = hold_lock_file_for_update(lock->lk, ref_file, 1);
return old_sha1 ? verify_lock(lock, old_sha1, mustexist) : lock;
lock->lock_fd = hold_lock_file_for_update(lock->lk, ref_file, 1);
return old_sha1 ? verify_lock(lock, old_sha1, mustexist) : lock;
+
+ error_return:
+ unlock_ref(lock);
+ errno = last_errno;
+ return NULL;
}
struct ref_lock *lock_ref_sha1(const char *ref, const unsigned char *old_sha1)
}
struct ref_lock *lock_ref_sha1(const char *ref, const unsigned char *old_sha1)