Commit Diff


commit - 3962e86afd3ac8e3cd0d102c91b7fb4bc436fea4
commit + e350ead34f47da102e6936f902c68f38131d315a
blob - 621a020293d6051bf22facd02ba75e02d422ba59
blob + 3d6209819562b277b9a1e0894932474a4270b345
--- lib/got_worktree_priv.h
+++ lib/got_worktree_priv.h
@@ -36,6 +36,7 @@ struct got_worktree {
 #define GOT_WORKTREE_FILE_INDEX		"fileindex"
 #define GOT_WORKTREE_REPOSITORY		"repository"
 #define GOT_WORKTREE_PATH_PREFIX	"path-prefix"
+#define GOT_WORKTREE_BASE_COMMIT	"base-commit"
 #define GOT_WORKTREE_LOCK		"lock"
 #define GOT_WORKTREE_FORMAT		"format"
 
blob - cdfcd000a8660c94d153db4902677bbfc283eafa
blob + d4385a5b8e1514fa9e72dbff1f8d43cf442aacab
--- lib/worktree.c
+++ lib/worktree.c
@@ -173,6 +173,11 @@ got_worktree_init(const char *path, struct got_referen
 	if (err)
 		goto done;
 
+	/* Create an empty base commit file. */
+	err = create_meta_file(gotpath, GOT_WORKTREE_BASE_COMMIT, NULL);
+	if (err)
+		goto done;
+
 	/* Write the HEAD reference. */
 	refstr = got_ref_to_str(head_ref);
 	if (refstr == NULL) {
blob - 280103eade2f9a6bb4b039407d36286b71588f0c
blob + fc196217ddd8038adaa56e6ce10ad4fb6ff9a239
--- regress/worktree/worktree_test.c
+++ regress/worktree/worktree_test.c
@@ -89,6 +89,8 @@ remove_worktree(const char *worktree_path)
 		return 0;
 	if (!remove_meta_file(worktree_path, GOT_WORKTREE_PATH_PREFIX))
 		return 0;
+	if (!remove_meta_file(worktree_path, GOT_WORKTREE_BASE_COMMIT))
+		return 0;
 	if (!remove_meta_file(worktree_path, GOT_WORKTREE_LOCK))
 		return 0;
 	if (!remove_meta_file(worktree_path, GOT_WORKTREE_FORMAT))
@@ -172,6 +174,8 @@ worktree_init(const char *repo_path)
 		goto done;
 	if (!check_meta_file_exists(worktree_path, GOT_WORKTREE_LOCK))
 		goto done;
+	if (!check_meta_file_exists(worktree_path, GOT_WORKTREE_BASE_COMMIT))
+		goto done;
 	if (!check_meta_file_exists(worktree_path, GOT_WORKTREE_FILE_INDEX))
 		goto done;
 	if (!check_meta_file_exists(worktree_path, GOT_WORKTREE_REPOSITORY))
@@ -276,6 +280,9 @@ worktree_init_exists(const char *repo_path)
 	    GOT_WORKTREE_LOCK))
 		goto done;
 	if (!obstruct_meta_file_and_init(&ok, repo, worktree_path,
+	    GOT_WORKTREE_BASE_COMMIT))
+		goto done;
+	if (!obstruct_meta_file_and_init(&ok, repo, worktree_path,
 	    GOT_WORKTREE_FILE_INDEX))
 		goto done;
 	if (!obstruct_meta_file_and_init(&ok, repo, worktree_path,
@@ -292,9 +299,9 @@ done:
 	if (repo)
 		got_repo_close(repo);
 	free(gotpath);
-	if (ok == 6)
+	if (ok == 7)
 		remove_worktree(worktree_path);
-	return (ok == 6);
+	return (ok == 7);
 }
 
 #define RUN_TEST(expr, name) \