Commit reset

This commit is contained in:
womax
2024-06-03 15:01:52 +02:00
parent bd48b08294
commit 167e369004
2 changed files with 11 additions and 5 deletions

View File

@@ -162,16 +162,21 @@ void diff_commit_with_working_tree(struct commit *commit)
dump_tree(TMP"/a", &commit_tree); dump_tree(TMP"/a", &commit_tree);
FILE *p = popen("diff -ruN --exclude-from=.gitignore "TMP"/a ./ > "LOCAL_REPO"/diff", "w"); FILE *p = popen("diff -ru --exclude-from=.gitignore "TMP"/a ./ > "LOCAL_REPO"/last.diff", "w");
pclose(p);
p = popen("cat "LOCAL_REPO"/diff", "w");
pclose(p); pclose(p);
free_tree(&commit_tree); free_tree(&commit_tree);
free_object(&obj); free_object(&obj);
} }
void revert_to(struct commit *commit)
{
diff_commit_with_working_tree(commit);
FILE *p = popen("patch -p0 -R < "LOCAL_REPO"/last.diff", "r");
pclose(p);
}
void diff_commit(struct commit *commit_a, struct commit *commit_b) void diff_commit(struct commit *commit_a, struct commit *commit_b)
{ {
struct object tree_obj_a, tree_obj_b; struct object tree_obj_a, tree_obj_b;
@@ -191,7 +196,7 @@ void diff_commit(struct commit *commit_a, struct commit *commit_b)
dump_tree(TMP"/a", &tree_a); dump_tree(TMP"/a", &tree_a);
dump_tree(TMP"/b", &tree_b); dump_tree(TMP"/b", &tree_b);
FILE *f = popen("diff -ruN "TMP"/a "TMP"/b ", "w"); FILE *f = popen("diff -ruN "TMP"/a "TMP"/b | less", "w");
pclose(f); pclose(f);
free_tree(&tree_a); free_tree(&tree_a);

View File

@@ -7,6 +7,7 @@ int commit_from_object(struct commit *commit, struct object *object);
void free_commit(struct commit *commit); void free_commit(struct commit *commit);
void diff_commit(struct commit *commit_a, struct commit *commit_b); void diff_commit(struct commit *commit_a, struct commit *commit_b);
void diff_commit_with_working_tree(struct commit *commit); void diff_commit_with_working_tree(struct commit *commit);
void revert_to(struct commit *commit);
int commit(); int commit();
#endif // COMMIT_H #endif // COMMIT_H