Next iteration of my lockfile fixes and refactoring. Thanks to
Torsten Bögershausen, Junio, Peff, Ronnie Sahlberg, and Johannes Sixt
for their comments about v4.
I believe that this series addresses all of the comments from v1 [1],
v2 [2], v3 [3], and v4 [4].
Changes since v4:
* Rebase to current master.
* Explain lock_file ownership and the point of its pid field.
* Correct the log message for
"delete_ref_loose(): don't muck around in the lock_file's filename"
* Replace an assert() with a die("BUG:").
* Add a sanity check that lk->filename is empty before reusing a
lock_file object.
* Initialize the length of lk->filename more intelligently.
* Rename trim_last_path_elm() to trim_last_path_component().
* Make some die() messages more informative.
* Add some sanity checks to commit_lock_file().
* Rename REF_NODEREF to REF_NO_DEREF.
* Rename some static functions:
* remove_lock_file() -> remove_lock_files()
* remove_lock_file_on_signal() -> remove_lock_files_on_signal()
* Add a function get_locked_file_path(), to isolate callers a bit more
from the innards of lock_file.
There are some conflicts with branch rs/ref-transaction; I pushed my
proposed merge of these two branches to
https://github.com/mhagger/git.git lock-correctness-v5-rs-ref-transaction
[1] http://thread.gmane.org/gmane.comp.version-control.git/245609
[2] http://thread.gmane.org/gmane.comp.version-control.git/245801
[3] http://thread.gmane.org/gmane.comp.version-control.git/246222
[4] http://thread.gmane.org/gmane.comp.version-control.git/256564
Michael Haggerty (35):
unable_to_lock_die(): rename function from unable_to_lock_index_die()
api-lockfile: expand the documentation
rollback_lock_file(): do not clear filename redundantly
rollback_lock_file(): exit early if lock is not active
rollback_lock_file(): set fd to -1
lockfile: unlock file if lockfile permissions cannot be adjusted
hold_lock_file_for_append(): release lock on errors
lock_file(): always add lock_file object to lock_file_list
lockfile.c: document the various states of lock_file objects
cache.h: define constants LOCK_SUFFIX and LOCK_SUFFIX_LEN
delete_ref_loose(): don't muck around in the lock_file's filename
prepare_index(): declare return value to be (const char *)
write_packed_entry_fn(): convert cb_data into a (const int *)
lock_file(): exit early if lockfile cannot be opened
remove_lock_file(): call rollback_lock_file()
commit_lock_file(): inline temporary variable
commit_lock_file(): die() if called for unlocked lockfile object
commit_lock_file(): if close fails, roll back
commit_lock_file(): rollback lock file on failure to rename
api-lockfile: document edge cases
dump_marks(): remove a redundant call to rollback_lock_file()
git_config_set_multivar_in_file(): avoid call to rollback_lock_file()
lockfile: avoid transitory invalid states
struct lock_file: declare some fields volatile
try_merge_strategy(): remove redundant lock_file allocation
try_merge_strategy(): use a statically-allocated lock_file object
commit_lock_file(): use a strbuf to manage temporary space
Change lock_file::filename into a strbuf
resolve_symlink(): use a strbuf for internal scratch space
resolve_symlink(): take a strbuf parameter
trim_last_path_component(): replace last_path_elm()
Extract a function commit_lock_file_to()
Rename LOCK_NODEREF to LOCK_NO_DEREF
lockfile.c: rename static functions
get_locked_file_path(): new function
Documentation/technical/api-lockfile.txt | 72 +++++--
builtin/commit.c | 16 +-
builtin/merge.c | 15 +-
builtin/reflog.c | 2 +-
builtin/update-index.c | 2 +-
cache.h | 19 +-
config.c | 28 +--
fast-import.c | 4 +-
lockfile.c | 334 +++++++++++++++++++------------
read-cache.c | 12 +-
refs.c | 29 +--
shallow.c | 6 +-
12 files changed, 334 insertions(+), 205 deletions(-)
--
2.1.0
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html