import subprocess import pytest def test_stash_push(repo_init_with_commit, commit_env_config, git2cpp_path, tmp_path): assert (tmp_path / "initial.txt").exists() p = tmp_path / "mook_file.txt" p.write_text("blabla") cmd_add = [git2cpp_path, "add", "mook_file.txt"] p_add = subprocess.run(cmd_add, cwd=tmp_path, text=True) assert p_add.returncode == 0 stash_path = tmp_path / ".git/refs/stash" assert not stash_path.exists() cmd_stash = [git2cpp_path, "stash"] p_stash = subprocess.run(cmd_stash, capture_output=True, cwd=tmp_path, text=True) assert p_stash.returncode == 0 assert stash_path.exists() def test_stash_list(repo_init_with_commit, commit_env_config, git2cpp_path, tmp_path): assert (tmp_path / "initial.txt").exists() p = tmp_path / "mook_file.txt" p.write_text("blabla") cmd_add = [git2cpp_path, "add", "mook_file.txt"] p_add = subprocess.run(cmd_add, cwd=tmp_path, text=True) assert p_add.returncode == 0 cmd_list = [git2cpp_path, "stash", "list"] p_list = subprocess.run(cmd_list, capture_output=True, cwd=tmp_path, text=True) assert p_list.returncode == 0 assert "stash@{0}" not in p_list.stdout cmd_stash = [git2cpp_path, "stash"] p_stash = subprocess.run(cmd_stash, capture_output=True, cwd=tmp_path, text=True) assert p_stash.returncode == 0 p_list_2 = subprocess.run(cmd_list, capture_output=True, cwd=tmp_path, text=True) assert p_list_2.returncode == 0 assert "stash@{0}" in p_list_2.stdout @pytest.mark.parametrize("index_flag", ["", "--index"]) def test_stash_pop(repo_init_with_commit, commit_env_config, git2cpp_path, tmp_path, index_flag): assert (tmp_path / "initial.txt").exists() index = 0 if index_flag == "" else 1 for i in range(index + 1): p = tmp_path / f"mook_file_{i}.txt" p.write_text(f"blabla{i}") cmd_add = [git2cpp_path, "add", f"mook_file_{i}.txt"] p_add = subprocess.run(cmd_add, cwd=tmp_path, text=True) assert p_add.returncode == 0 cmd_stash = [git2cpp_path, "stash"] p_stash = subprocess.run(cmd_stash, capture_output=True, cwd=tmp_path, text=True) assert p_stash.returncode == 0 cmd_status = [git2cpp_path, "status"] p_status = subprocess.run(cmd_status, capture_output=True, cwd=tmp_path, text=True) assert p_status.returncode == 0 assert "mook_file" not in p_status.stdout cmd_pop = [git2cpp_path, "stash", "pop"] if index_flag != "": cmd_pop.append(index_flag) cmd_pop.append("1") p_pop = subprocess.run(cmd_pop, capture_output=True, cwd=tmp_path, text=True) assert p_pop.returncode == 0 assert "mook_file_0" in p_pop.stdout assert "Dropped refs/stash@{" + str(index) + "}" in p_pop.stdout cmd_list = [git2cpp_path, "stash", "list"] p_list = subprocess.run(cmd_list, capture_output=True, cwd=tmp_path, text=True) assert p_list.returncode == 0 if index_flag == "": assert p_list.stdout == "" else: assert "stash@{0}" in p_list.stdout assert "stash@{1}" not in p_list.stdout @pytest.mark.parametrize("index_flag", ["", "--index"]) def test_stash_apply(repo_init_with_commit, commit_env_config, git2cpp_path, tmp_path, index_flag): assert (tmp_path / "initial.txt").exists() index = 0 if index_flag == "" else 1 for i in range(index + 1): p = tmp_path / f"mook_file_{i}.txt" p.write_text(f"blabla{i}") cmd_add = [git2cpp_path, "add", f"mook_file_{i}.txt"] p_add = subprocess.run(cmd_add, cwd=tmp_path, text=True) assert p_add.returncode == 0 cmd_stash = [git2cpp_path, "stash"] p_stash = subprocess.run(cmd_stash, capture_output=True, cwd=tmp_path, text=True) assert p_stash.returncode == 0 cmd_status = [git2cpp_path, "status"] p_status = subprocess.run(cmd_status, capture_output=True, cwd=tmp_path, text=True) assert p_status.returncode == 0 assert "mook_file" not in p_status.stdout cmd_apply = [git2cpp_path, "stash", "apply"] if index_flag != "": cmd_apply.append(index_flag) cmd_apply.append("1") p_apply = subprocess.run(cmd_apply, capture_output=True, cwd=tmp_path, text=True) assert p_apply.returncode == 0 assert "mook_file_0" in p_apply.stdout cmd_list = [git2cpp_path, "stash", "list"] p_list = subprocess.run(cmd_list, capture_output=True, cwd=tmp_path, text=True) assert p_list.returncode == 0 assert "stash@{0}" in p_list.stdout if index_flag != "": assert "stash@{1}" in p_list.stdout def test_stash_show(repo_init_with_commit, commit_env_config, git2cpp_path, tmp_path): assert (tmp_path / "initial.txt").exists() filename = "mook_show.txt" p = tmp_path / filename p.write_text("Hello") cmd_add = [git2cpp_path, "add", filename] p_add = subprocess.run(cmd_add, cwd=tmp_path, text=True) assert p_add.returncode == 0 cmd_stash = [git2cpp_path, "stash"] p_stash = subprocess.run(cmd_stash, capture_output=True, cwd=tmp_path, text=True) assert p_stash.returncode == 0 cmd_show = [git2cpp_path, "stash", "show", "--stat"] p_show = subprocess.run(cmd_show, capture_output=True, cwd=tmp_path, text=True) assert p_show.returncode == 0 # A diffstat should mention the file and summary "file changed" assert filename in p_show.stdout assert "1 file changed" in p_show.stdout