commit f29503c149da6bec13915f2e9baa98bd70b2edb4
parent 2cc9252c7c5d8b6f2068f1fdf6f5b3f76a0e6ed7
Author: Mohamed Aslan <maslan@sce.carleton.ca>
Date:   Mon,  6 Oct 2014 15:18:23 -0600
add support in cmd-diff for one command line argument
Diffstat:
| M | cmd-diff.c |  |  | 43 | ++++++++++++++++++++++++++----------------- | 
1 file changed, 26 insertions(+), 17 deletions(-)
diff --git a/cmd-diff.c b/cmd-diff.c
@@ -341,27 +341,39 @@ diff_r(struct session *s, struct dir *d1, struct dir *d2, const char *p, const c
 int
 cmd_diff(int argc, char **argv)
 {
-	char *old, *new;
+	char *old = NULL, *new = NULL;
 	char *tmpdir = NULL;
 	struct session s;
 	struct commit *comm_old, *comm_new;
 	struct dir *dir_old, *dir_new;
 
-	if (argc != 3) {
+	baseline_session_begin(&s, 0);
+
+	if (argc == 2) {
+		new = strdup(argv[1]);
+	}
+	else if (argc == 3) {
+		old = strdup(argv[1]);
+		new = strdup(argv[2]);
+	}
+	else {
 		errx(EXIT_FAILURE, "wrong number of arguments (%d)\n", argc);
 	}
-	old = strdup(argv[1]);
-	new = strdup(argv[2]);
-
-	baseline_session_begin(&s, 0);
 
 	tmpdir = make_tmpdir();
 
-	/*
-	s.db_ops->branch_get_head(s.db_ctx, s.branch, &head);
-	if (head == NULL)
-		goto ret;
-	*/
+	comm_new = baseline_commit_new();
+	s.db_ops->select_commit(s.db_ctx, new, comm_new);
+
+	dir_new = baseline_dir_new();
+	s.db_ops->select_dir(s.db_ctx, comm_new->dir, dir_new);
+
+	if (old == NULL) {
+		if (comm_new->n_parents > 0)
+			old = comm_new->parents[0];
+		else
+			goto ret;
+	}
 
 	comm_old = baseline_commit_new();
 	s.db_ops->select_commit(s.db_ctx, old, comm_old);
@@ -369,19 +381,16 @@ cmd_diff(int argc, char **argv)
 	dir_old = baseline_dir_new();
 	s.db_ops->select_dir(s.db_ctx, comm_old->dir, dir_old);
 
-	comm_new = baseline_commit_new();
-	s.db_ops->select_commit(s.db_ctx, new, comm_new);
-
-	dir_new = baseline_dir_new();
-	s.db_ops->select_dir(s.db_ctx, comm_new->dir, dir_new);
-
 	diff_r(&s, dir_old, dir_new, "", tmpdir);
 
 	baseline_dir_free(dir_old);
 	baseline_dir_free(dir_new);
 
+ret:
 	remove(tmpdir);
 	free(tmpdir);
+	free(old);
+	free(new);
 	baseline_session_end(&s);
 	return EXIT_SUCCESS;
 }