]> gitweb.ps.run Git - ps-cgit/commitdiff
Merge branch 'master' of git://git.klever.net/patchwork/cgit
authorLars Hjemli <hjemli@gmail.com>
Sun, 22 Jul 2007 21:57:48 +0000 (23:57 +0200)
committerLars Hjemli <hjemli@gmail.com>
Sun, 22 Jul 2007 21:57:56 +0000 (23:57 +0200)
* 'master' of git://git.klever.net/patchwork/cgit:
  link raw blob from tree file view
  fix: changed view link to blob in summary.
  allow selective enabling of snapshots
  shorten snapshot names to repo basename
  introduce cgit_repobasename
  added snapshot filename to the link
  add plain uncompressed tar snapshort format
  introduced .tar.bz2 snapshots
  compress .tar.gz using gzip as a filter
  added a chk_non_negative check
  css: adjust vertical-align of commit info th cells
  add support for snapshot tarballs

Conflicts:

ui-summary.c

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
1  2 
cgit.c
cgit.h
shared.c
ui-shared.c

diff --combined cgit.c
index 4b9182920636796eef838c8a0915b5f44c6ba942,8795bbc261fbd6d7bb570aac94b36392e39cfdd7..6597529219d48871202048a95421f1aaa7de9bbe
--- 1/cgit.c
--- 2/cgit.c
+++ b/cgit.c
@@@ -68,8 -68,10 +68,10 @@@ static void cgit_print_repo_page(struc
        setenv("GIT_DIR", cgit_repo->path, 1);
  
        if ((cgit_cmd == CMD_SNAPSHOT) && cgit_repo->snapshots) {
-               cgit_print_snapshot(item, cgit_query_sha1, "zip",
-                                   cgit_repo->url, cgit_query_name);
+               cgit_print_snapshot(item, cgit_query_sha1,
+                                   cgit_repobasename(cgit_repo->url),
+                                   cgit_query_name,
+                                   cgit_repo->snapshots );
                return;
        }
  
        case CMD_COMMIT:
                cgit_print_commit(cgit_query_sha1);
                break;
 +      case CMD_TAG:
 +              cgit_print_tag(cgit_query_sha1);
 +              break;
        case CMD_DIFF:
                cgit_print_diff(cgit_query_sha1, cgit_query_sha2);
                break;
diff --combined cgit.h
index 610a16db18a55728d93823c94c54fd28b1608f21,ea61be7446e0b005c2c6161dae6e35f949e4d687..eddcaa310006a386829dd054046a64502bfd5dbf
--- 1/cgit.h
--- 2/cgit.h
+++ b/cgit.h
@@@ -27,7 -27,7 +27,7 @@@
  #define CMD_TREE     4
  #define CMD_BLOB     5
  #define CMD_SNAPSHOT 6
 -
 +#define CMD_TAG      7
  
  /*
   * Dateformats used on misc. pages
@@@ -157,6 -157,7 +157,7 @@@ extern void cgit_querystring_cb(const c
  
  extern int chk_zero(int result, char *msg);
  extern int chk_positive(int result, char *msg);
+ extern int chk_non_negative(int result, char *msg);
  
  extern int hextoint(char c);
  extern char *trim_end(const char *str, char c);
@@@ -200,9 -201,13 +201,13 @@@ extern int cache_exist(struct cacheite
  extern int cache_expired(struct cacheitem *item);
  
  extern char *cgit_repourl(const char *reponame);
+ extern char *cgit_fileurl(const char *reponame, const char *pagename,
+                         const char *filename, const char *query);
  extern char *cgit_pageurl(const char *reponame, const char *pagename,
                          const char *query);
  
+ extern const char *cgit_repobasename(const char *reponame);
  extern void cgit_tree_link(char *name, char *title, char *class, char *head,
                           char *rev, char *path);
  extern void cgit_log_link(char *name, char *title, char *class, char *head,
@@@ -212,8 -217,6 +217,8 @@@ extern void cgit_commit_link(char *name
  extern void cgit_diff_link(char *name, char *title, char *class, char *head,
                           char *new_rev, char *old_rev, char *path);
  
 +extern void cgit_object_link(struct object *obj);
 +
  extern void cgit_print_error(char *msg);
  extern void cgit_print_date(time_t secs, char *format);
  extern void cgit_print_age(time_t t, time_t max_relative, char *format);
@@@ -230,10 -233,11 +235,12 @@@ extern void cgit_print_log(const char *
  extern void cgit_print_blob(struct cacheitem *item, const char *hex, char *path);
  extern void cgit_print_tree(const char *rev, char *path);
  extern void cgit_print_commit(char *hex);
 +extern void cgit_print_tag(char *revname);
  extern void cgit_print_diff(const char *new_hex, const char *old_hex);
  extern void cgit_print_snapshot(struct cacheitem *item, const char *hex,
-                               const char *format, const char *prefix,
-                               const char *filename);
+                               const char *prefix, const char *filename,
+                               int snapshot);
+ extern void cgit_print_snapshot_links(const char *repo, const char *hex,int snapshots);
+ extern int cgit_parse_snapshots_mask(const char *str);
  
  #endif /* CGIT_H */
diff --combined shared.c
index 06693b0cdc2f5fd9c1455dee56e660be0c8062e3,ccbde27af849f257ff7bdaa166297c01e49e4efc..077934f7ad7a51359d64d92407647232e83904f2
+++ b/shared.c
@@@ -63,7 -63,7 +63,7 @@@ int htmlfd = 0
  int cgit_get_cmd_index(const char *cmd)
  {
        static char *cmds[] = {"log", "commit", "diff", "tree", "blob",
 -                             "snapshot", NULL};
 +                             "snapshot", "tag", NULL};
        int i;
  
        for(i = 0; cmds[i]; i++)
@@@ -86,6 -86,13 +86,13 @@@ int chk_positive(int result, char *msg
        return result;
  }
  
+ int chk_non_negative(int result, char *msg)
+ {
+       if (result < 0)
+               die("%s: %s",msg, strerror(errno));
+       return result;
+ }
  struct repoinfo *add_repo(const char *url)
  {
        struct repoinfo *ret;
@@@ -148,7 -155,7 +155,7 @@@ void cgit_global_config_cb(const char *
        else if (!strcmp(name, "nocache"))
                cgit_nocache = atoi(value);
        else if (!strcmp(name, "snapshots"))
-               cgit_snapshots = atoi(value);
+               cgit_snapshots = cgit_parse_snapshots_mask(value);
        else if (!strcmp(name, "enable-index-links"))
                cgit_enable_index_links = atoi(value);
        else if (!strcmp(name, "enable-log-filecount"))
        else if (cgit_repo && !strcmp(name, "repo.defbranch"))
                cgit_repo->defbranch = xstrdup(value);
        else if (cgit_repo && !strcmp(name, "repo.snapshots"))
-               cgit_repo->snapshots = cgit_snapshots * atoi(value);
+               cgit_repo->snapshots = cgit_snapshots & cgit_parse_snapshots_mask(value); /* XXX: &? */
        else if (cgit_repo && !strcmp(name, "repo.enable-log-filecount"))
                cgit_repo->enable_log_filecount = cgit_enable_log_filecount * atoi(value);
        else if (cgit_repo && !strcmp(name, "repo.enable-log-linecount"))
diff --combined ui-shared.c
index fd71c1269e646e9f81dc07a684208e554fc0be2b,3e378a48246d944f771fd05b31bd1209b58eb5d7..ca2ee822da6a37173b3ef9852fe2b3ce6c220c85
@@@ -57,13 -57,13 +57,13 @@@ char *cgit_repourl(const char *reponame
        }
  }
  
- char *cgit_pageurl(const char *reponame, const char *pagename,
-                  const char *query)
+ char *cgit_fileurl(const char *reponame, const char *pagename,
+                  const char *filename, const char *query)
  {
        if (cgit_virtual_root) {
                if (query)
-                       return fmt("%s/%s/%s/?%s", cgit_virtual_root, reponame,
-                                  pagename, query);
+                       return fmt("%s/%s/%s/%s?%s", cgit_virtual_root, reponame,
+                                  pagename, filename?filename:"", query);
                else
                        return fmt("%s/%s/%s/", cgit_virtual_root, reponame,
                                   pagename);
        }
  }
  
+ char *cgit_pageurl(const char *reponame, const char *pagename,
+                  const char *query)
+ {
+       return cgit_fileurl(reponame,pagename,0,query);
+ }
+ const char *cgit_repobasename(const char *reponame)
+ {
+       /* I assume we don't need to store more than one repo basename */
+       static char rvbuf[1024];
+       int p;
+       const char *rv;
+       strncpy(rvbuf,reponame,sizeof(rvbuf));
+       if(rvbuf[sizeof(rvbuf)-1])
+               die("cgit_repobasename: truncated repository name '%s'", reponame);
+       p = strlen(rvbuf)-1;
+       /* strip trailing slashes */
+       while(p && rvbuf[p]=='/') rvbuf[p--]=0;
+       /* strip trailing .git */
+       if(p>=3 && !strncmp(&rvbuf[p-3],".git",4)) {
+               p -= 3; rvbuf[p--] = 0;
+       }
+       /* strip more trailing slashes if any */
+       while( p && rvbuf[p]=='/') rvbuf[p--]=0;
+       /* find last slash in the remaining string */
+       rv = strrchr(rvbuf,'/');
+       if(rv)
+               return ++rv;
+       return rvbuf;
+ }
  char *cgit_currurl()
  {
        if (!cgit_virtual_root)
@@@ -218,30 -249,6 +249,30 @@@ void cgit_diff_link(char *name, char *t
        html("</a>");
  }
  
 +void cgit_object_link(struct object *obj)
 +{
 +      char *page, *arg, *url;
 +
 +      if (obj->type == OBJ_COMMIT) {
 +                cgit_commit_link(fmt("commit %s", sha1_to_hex(obj->sha1)), NULL, NULL,
 +                               cgit_query_head, sha1_to_hex(obj->sha1));
 +              return;
 +      } else if (obj->type == OBJ_TREE) {
 +              page = "tree";
 +              arg = "id";
 +      } else {
 +              page = "blob";
 +              arg = "id";
 +      }
 +
 +      url = cgit_pageurl(cgit_query_repo, page,
 +                         fmt("%s=%s", arg, sha1_to_hex(obj->sha1)));
 +      html_link_open(url, NULL, NULL);
 +      htmlf("%s %s", typename(obj->type),
 +            sha1_to_hex(obj->sha1));
 +      html_link_close();
 +}
 +
  void cgit_print_date(time_t secs, char *format)
  {
        char buf[64];
@@@ -392,3 -399,5 +423,5 @@@ void cgit_print_snapshot_start(const ch
                                         ttl_seconds(item->ttl)));
        html("\n");
  }
+ /* vim:set sw=8: */