Merge branch 'nd/lockfile-absolute'
The lockfile API can get confused which file to clean up when the process moved the $cwd after creating a lockfile. * nd/lockfile-absolute: lockfile.c: store absolute path
This commit is contained in:
		
							
								
								
									
										14
									
								
								lockfile.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								lockfile.c
									
									
									
									
									
								
							@ -128,9 +128,17 @@ static int lock_file(struct lock_file *lk, const char *path, int flags)
 | 
			
		||||
		    path);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	strbuf_add(&lk->filename, path, pathlen);
 | 
			
		||||
	if (!(flags & LOCK_NO_DEREF))
 | 
			
		||||
		resolve_symlink(&lk->filename);
 | 
			
		||||
	if (flags & LOCK_NO_DEREF) {
 | 
			
		||||
		strbuf_add_absolute_path(&lk->filename, path);
 | 
			
		||||
	} else {
 | 
			
		||||
		struct strbuf resolved_path = STRBUF_INIT;
 | 
			
		||||
 | 
			
		||||
		strbuf_add(&resolved_path, path, pathlen);
 | 
			
		||||
		resolve_symlink(&resolved_path);
 | 
			
		||||
		strbuf_add_absolute_path(&lk->filename, resolved_path.buf);
 | 
			
		||||
		strbuf_release(&resolved_path);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	strbuf_addstr(&lk->filename, LOCK_SUFFIX);
 | 
			
		||||
	lk->fd = open(lk->filename.buf, O_RDWR | O_CREAT | O_EXCL, 0666);
 | 
			
		||||
	if (lk->fd < 0) {
 | 
			
		||||
 | 
			
		||||
@ -65,4 +65,19 @@ test_expect_success '--cacheinfo mode,sha1,path (new syntax)' '
 | 
			
		||||
	test_cmp expect actual
 | 
			
		||||
'
 | 
			
		||||
 | 
			
		||||
test_expect_success '.lock files cleaned up' '
 | 
			
		||||
	mkdir cleanup &&
 | 
			
		||||
	(
 | 
			
		||||
	cd cleanup &&
 | 
			
		||||
	mkdir worktree &&
 | 
			
		||||
	git init repo &&
 | 
			
		||||
	cd repo &&
 | 
			
		||||
	git config core.worktree ../../worktree &&
 | 
			
		||||
	# --refresh triggers late setup_work_tree,
 | 
			
		||||
	# active_cache_changed is zero, rollback_lock_file fails
 | 
			
		||||
	git update-index --refresh &&
 | 
			
		||||
	! test -f .git/index.lock
 | 
			
		||||
	)
 | 
			
		||||
'
 | 
			
		||||
 | 
			
		||||
test_done
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user