Fixed staging
[webgit] / src / actions.c
index 7ca657d..6e796c1 100644 (file)
@@ -667,8 +667,24 @@ webgit_stage_action (struct webgit_query* query)
 static Html
 webgit_commit_action (struct webgit_query* query)
 {
-  (void) query;
-  return html("TODO: commit");
+  query->current_repo =  webgit_repo_enter (query);
+
+  /* stage pending changes */
+  webgit_worktree_stage (query->current_repo);
+
+  /* create diff head->worktree */
+  unsigned char sha1_worktree[20];
+  if (query->current_repo->worktree)
+    get_sha1_hex (query->current_repo->worktree, sha1_worktree);
+  else
+    webgit_err ("no worktree");
+
+  unsigned char sha1_head[20];
+  get_sha1 (query->head, sha1_head);
+  struct commit* head_commit = lookup_commit (sha1_head);
+  parse_commit (head_commit);
+
+  return webgit_diff_table_trees (query, head_commit->tree->object.sha1, sha1_worktree);
 }