feat(cli): added the diff command to display the difference of two files
This commit is contained in:
parent
190aa7cc76
commit
c8b4d93c89
2 changed files with 76 additions and 8 deletions
62
src/main.c
62
src/main.c
|
|
@ -1,16 +1,62 @@
|
|||
#include "action_list.h"
|
||||
#include "file.h"
|
||||
#include "myers.h"
|
||||
#include "utilities.h"
|
||||
// main.c
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
|
||||
int main() {
|
||||
Action act1 = (Action){.type=INSERT, .line_original=0, .line_changed=1};
|
||||
Action act2 = (Action){.type=DELETE, .line_original=1, .line_changed=2};
|
||||
static void usage(int exitcode) {
|
||||
printf("usage: merk <command> [<args>]\n\n diff Displays the difference between the given two files\n");
|
||||
exit(exitcode);
|
||||
}
|
||||
|
||||
ActionList* list1 = new_list();
|
||||
add_action(list1, act1);
|
||||
int main(int argc, char **argv) {
|
||||
if (argc == 2 && (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help"))) {
|
||||
usage(0);
|
||||
}
|
||||
|
||||
ActionList* list2 = new_list();
|
||||
add_action(list2, act2);
|
||||
const char* subcmd = argv[1];
|
||||
|
||||
append_list(list1, list2);
|
||||
if (strcmp(subcmd, "diff") != 0) {
|
||||
fprintf(stderr, "ERROR: Unknown subcommand: '%s'\n", subcmd);
|
||||
usage(2);
|
||||
}
|
||||
|
||||
if (strcmp(subcmd, "diff") == 0) {
|
||||
if (argc != 4) {
|
||||
printf("ERROR: too many/too little arguments given!\n");
|
||||
printf("Usage: merk diff <PATH> <PATH>");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
File* file1;
|
||||
switch (get_path_type(argv[2])) {
|
||||
case PT_FILE: file1 = new_file(argv[2]); break;
|
||||
case PT_DIR: file1 = NULL; printf("ERROR: first path is a directory and no file!"); break;
|
||||
case PT_NOEXIST: file1 = NULL; printf("ERROR: first path does not exist!"); break;
|
||||
default: file1 = NULL; printf("ERROR: unknown first path!");
|
||||
}
|
||||
if (!file1) exit(1);
|
||||
File* file2;
|
||||
switch (get_path_type(argv[3])) {
|
||||
case PT_FILE: file2 = new_file(argv[3]); break;
|
||||
case PT_DIR: file2 = NULL; printf("ERROR: second path is a directory and no file!"); break;
|
||||
case PT_NOEXIST: file2 = NULL; printf("ERROR: second path does not exist!"); break;
|
||||
default: file2 = NULL; printf("ERROR: unknown second path!");
|
||||
}
|
||||
if (!file2) exit(1);
|
||||
|
||||
ActionList* actions = myers_diff(file1, file2, 0, 0);
|
||||
if (!actions) printf("ERROR: something went wrong while taking the diff!");
|
||||
else visualize_diff(file1, file2, actions);
|
||||
}
|
||||
else {
|
||||
usage(1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue