Add a whole lore of new query parameters for handling edits
authorChristian Thaeter <ct@pipapo.org>
Wed, 20 Feb 2008 19:05:40 +0000 (20:05 +0100)
committerChristian Thaeter <ct@pipapo.org>
Wed, 20 Feb 2008 19:05:40 +0000 (20:05 +0100)
src/edit.c
src/query.c
src/query.h
src/webgit.h

index 772040c..7e4c9f6 100644 (file)
@@ -49,7 +49,6 @@ static Html
 webgit_edit_blob_content_action (struct webgit_repo_info* repo, unsigned char* sha1, void* buf, unsigned long size)
 {
   (void) sha1;
-
   struct webgit_query* query = repo->query;
 
   return html (
@@ -63,8 +62,7 @@ webgit_edit_blob_content_action (struct webgit_repo_info* repo, unsigned char* s
                            html_hidden ("repo", query->repo),
                            html_hidden ("ref", query->head),
                            html_hidden ("commit", query->commit),
-                           html_hidden ("path", query->path),
-                           html_hidden ("action", "edit"),
+                           html_hidden ("oldpath", query->path),
                            html (html_tag ("input",
                                            html_attr ("name", "path"),
                                            html_attr ("type", "text"),
@@ -135,7 +133,6 @@ webgit_edit_blob_content_action (struct webgit_repo_info* repo, unsigned char* s
                                                    html_attr ("name", "file"),
                                                    html_attr ("size", "50"),
                                                    html_attr ("maxlen", html_fmt ("%d", PATH_MAX)),
-                                                   html_attr ("value", ""),
                                                    html_attr ("type", "file")
                                                    )
                                          )
@@ -155,7 +152,7 @@ webgit_edit_blob_content_action (struct webgit_repo_info* repo, unsigned char* s
                                            )
                                  ),
                            html (html_tag ("input",
-                                           html_attr ("name", "commit"),
+                                           html_attr ("name", "docommit"),
                                            html_attr ("type", "submit"),
                                            html_attr ("value", "Commit ...")
                                            )
@@ -175,12 +172,11 @@ webgit_edit_blob_action (struct webgit_repo_info* repo, unsigned char* sha1)
 
   buf = read_object_with_reference (sha1, "blob", &size, NULL);
 
-  return html(
-              html(html_tag("div", html_attr("id", "sub-menu")),
-                   webgit_edit_blob_menu_action (repo, sha1, buf, size)), html_nl (),
-              html(html_tag("div", html_attr("id", "content")),
-                   webgit_edit_blob_content_action (repo, sha1, buf, size)), html_nl ()
-              );
+  return html (html (html_tag ("div", html_attr("id", "sub-menu")),
+                     webgit_edit_blob_menu_action (repo, sha1, buf, size)), html_nl (),
+               html (html_tag ("div", html_attr("id", "content")),
+                     webgit_edit_blob_content_action (repo, sha1, buf, size)), html_nl ()
+               );
 }
 
 /*
index f5a3100..a0d1899 100644 (file)
@@ -38,6 +38,7 @@ webgit_query_init (struct webgit_query* q)
   q->login_cookie = NULL;
   q->prefs_cookie = NULL;
   q->cookie_expire = 365UL * 86400UL; /*1 year*/
+  q->current_repo = NULL;
 
   q->count_def = 100;
   q->rxpd = NULL;
@@ -56,6 +57,11 @@ webgit_query_init (struct webgit_query* q)
   q->path = NULL;
   q->blob = NULL;
   q->blob_size = 0;
+  q->file = NULL;
+  q->file_size = 0;
+  q->oldpath = NULL;
+  q->comment = NULL;
+  q->mode = NULL;
   q->user = NULL;
   q->name = NULL;
   q->email = NULL;
@@ -88,12 +94,16 @@ webgit_query_destroy (struct webgit_query* q)
   free (q->head);
   free (q->commit);
   free (q->path);
+  free (q->comment);
+  free (q->oldpath);
+  free (q->mode);
   free (q->user);
   free (q->name);
   free (q->email);
   free (q->ssign);
   free (q->skin);
   free (q->blob);
+  free (q->file);
 
   LLIST_WHILE_HEAD (&q->repos, head)
     webgit_repoinfo_free ((struct webgit_repo_info*) head);
@@ -226,6 +236,36 @@ webgit_path_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
 }
 
 
+static void
+webgit_oldpath_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
+{
+  (void) self;
+  struct webgit_query* q = (struct webgit_query*) u_dat;
+
+  /* TODO validate that v is a probably legal reference (alnum() || one of '_/.') */
+  if (webgit_validate_string (v, v_sz))
+    {
+      free (q->oldpath);
+      q->oldpath = cwa_strndup (v, v_sz);
+    }
+}
+
+
+static void
+webgit_mode_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
+{
+  (void) self;
+  struct webgit_query* q = (struct webgit_query*) u_dat;
+
+  /* TODO validate that v is a probably legal reference (alnum() || one of '_/.') */
+  if (webgit_validate_string (v, v_sz))
+    {
+      free (q->mode);
+      q->mode = cwa_strndup (v, v_sz);
+    }
+}
+
+
 static void
 webgit_blob_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
 {
@@ -240,6 +280,31 @@ webgit_blob_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
 }
 
 
+static void
+webgit_file_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
+{
+  (void) self;
+  struct webgit_query* q = (struct webgit_query*) u_dat;
+
+  free (q->file);
+  q->file = cwa_malloc (v_sz + 1);
+  q->file_size = v_sz;
+  memcpy (q->file, v, v_sz);
+  q->file[v_sz] = '\0';
+}
+
+
+static void
+webgit_comment_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
+{
+  (void) self;
+  struct webgit_query* q = (struct webgit_query*) u_dat;
+
+  free (q->comment);
+  q->comment = cwa_strndup (v, v_sz);
+}
+
+
 static void
 webgit_skin_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
 {
@@ -340,6 +405,45 @@ webgit_ssign_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
 }
 
 
+static void
+webgit_cancel_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
+{
+  (void) self;
+  (void) v;
+  (void) v_sz;
+  struct webgit_query* q = (struct webgit_query*) u_dat;
+
+  free (q->action);
+  q->action = cwa_strndup ("cancel", SIZE_MAX);
+}
+
+
+static void
+webgit_stage_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
+{
+  (void) self;
+  (void) v;
+  (void) v_sz;
+  struct webgit_query* q = (struct webgit_query*) u_dat;
+
+  free (q->action);
+  q->action = cwa_strndup ("stage", SIZE_MAX);
+}
+
+
+static void
+webgit_docommit_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
+{
+  (void) self;
+  (void) v;
+  (void) v_sz;
+  struct webgit_query* q = (struct webgit_query*) u_dat;
+
+  free (q->action);
+  q->action = cwa_strndup ("commit", SIZE_MAX);
+}
+
+
 static void
 webgit_recover_param (const Cgi self, const char* v, size_t v_sz, void* u_dat)
 {
index d695ccf..bd85e76 100644 (file)
  WEBGIT_PARAM(path, "Path and filename for the queried object")         \
  WEBGIT_PARAM(object, "Object to perform on")                           \
  WEBGIT_PARAM(blob, "Data recieved from an edit")                       \
+ WEBGIT_PARAM(file, "File upload")                                      \
+ WEBGIT_PARAM(oldpath, "Old path and filename renamed/copied object")   \
+ WEBGIT_PARAM(comment, "Comment describing changes")                    \
+ WEBGIT_PARAM(mode, "Rename, copy or delete object")                    \
  WEBGIT_PARAM(user, "Account name for the editing user")                \
  WEBGIT_PARAM(name, "Real name of the editing user")                    \
  WEBGIT_PARAM(email, "Email of the editing user")                       \
@@ -44,6 +48,9 @@
  WEBGIT_PARAM(recover, "Email login token to user")                     \
  WEBGIT_PARAM(skin, "Set skin")                                         \
  WEBGIT_PARAM(maxage, "Age in days to hide inactive repositories")      \
+ WEBGIT_PARAM(cancel, "User canceled editing")                          \
+ WEBGIT_PARAM(stage, "Stage blob or file")                              \
+ WEBGIT_PARAM(docommit, "prepare a commit")                             \
  WEBGIT_PARAM(login, "Login cookie")                                    \
  WEBGIT_PARAM(prefs, "Preferences cookie")                              \
  WEBGIT_PARAM(count, "How many things to display")
index 6675629..1ebafd3 100644 (file)
@@ -55,6 +55,7 @@ struct webgit_query
   int account_validated;
 
   char* content_type;
+  struct webgit_repo_info* current_repo;
 
   char* login_cookie;
   char* prefs_cookie;
@@ -81,6 +82,11 @@ struct webgit_query
   char* path;
   char* blob;
   size_t blob_size;
+  char* file;
+  size_t file_size;
+  char* oldpath;
+  char* comment;
+  char* mode;
   char* user;
   char* name;
   char* email;