]> gitweb.ps.run Git - ps-cgit/blobdiff - shared.c
Merge branch 'master' of git://git.klever.net/patchwork/cgit
[ps-cgit] / shared.c
index e3123a80d818ab308aba02009a34734d0895815b..077934f7ad7a51359d64d92407647232e83904f2 100644 (file)
--- a/shared.c
+++ b/shared.c
@@ -12,6 +12,8 @@ struct repolist cgit_repolist;
 struct repoinfo *cgit_repo;
 int cgit_cmd;
 
+const char *cgit_version = CGIT_VERSION;
+
 char *cgit_root_title   = "Git repository browser";
 char *cgit_css          = "/cgit.css";
 char *cgit_logo         = "/git-logo.png";
@@ -26,6 +28,7 @@ char *cgit_repo_group   = NULL;
 
 int cgit_nocache               =  0;
 int cgit_snapshots             =  0;
+int cgit_enable_index_links    =  0;
 int cgit_enable_log_filecount  =  0;
 int cgit_enable_log_linecount  =  0;
 int cgit_max_lock_attempts     =  5;
@@ -34,6 +37,7 @@ int cgit_cache_repo_ttl        =  5;
 int cgit_cache_dynamic_ttl     =  5;
 int cgit_cache_static_ttl      = -1;
 int cgit_cache_max_create_time =  5;
+int cgit_summary_log           =  0;
 
 int cgit_max_msg_len = 60;
 int cgit_max_repodesc_len = 60;
@@ -58,7 +62,8 @@ int htmlfd = 0;
 
 int cgit_get_cmd_index(const char *cmd)
 {
-       static char *cmds[] = {"log", "commit", "diff", "tree", "view", "blob", "snapshot", NULL};
+       static char *cmds[] = {"log", "commit", "diff", "tree", "blob",
+                              "snapshot", "tag", NULL};
        int i;
 
        for(i = 0; cmds[i]; i++)
@@ -81,6 +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;
@@ -143,7 +155,9 @@ void cgit_global_config_cb(const char *name, const char *value)
        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"))
                cgit_enable_log_filecount = atoi(value);
        else if (!strcmp(name, "enable-log-linecount"))
@@ -164,6 +178,8 @@ void cgit_global_config_cb(const char *name, const char *value)
                cgit_max_repodesc_len = atoi(value);
        else if (!strcmp(name, "max-commit-count"))
                cgit_max_commit_count = atoi(value);
+       else if (!strcmp(name, "summary-log"))
+               cgit_summary_log = atoi(value);
        else if (!strcmp(name, "agefile"))
                cgit_agefile = xstrdup(value);
        else if (!strcmp(name, "repo.group"))
@@ -181,7 +197,7 @@ void cgit_global_config_cb(const char *name, const char *value)
        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"))
@@ -221,7 +237,7 @@ void cgit_querystring_cb(const char *name, const char *value)
        } else if (!strcmp(name, "ofs")) {
                cgit_query_ofs = atoi(value);
        } else if (!strcmp(name, "path")) {
-               cgit_query_path = xstrdup(value);
+               cgit_query_path = trim_end(value, '/');
        } else if (!strcmp(name, "name")) {
                cgit_query_name = xstrdup(value);
        }
@@ -250,6 +266,28 @@ int hextoint(char c)
                return -1;
 }
 
+char *trim_end(const char *str, char c)
+{
+       int len;
+       char *s, *t;
+
+       if (str == NULL)
+               return NULL;
+       t = (char *)str;
+       len = strlen(t);
+       while(len > 0 && t[len - 1] == c)
+               len--;
+
+       if (len == 0)
+               return NULL;
+
+       c = t[len];
+       t[len] = '\0';
+       s = xstrdup(t);
+       t[len] = c;
+       return s;
+}
+
 void cgit_diff_tree_cb(struct diff_queue_struct *q,
                       struct diff_options *options, void *data)
 {
@@ -356,7 +394,7 @@ void cgit_diff_tree(const unsigned char *old_sha1,
        opt.format_callback_data = fn;
        diff_setup_done(&opt);
 
-       if (old_sha1)
+       if (old_sha1 && !is_null_sha1(old_sha1))
                ret = diff_tree_sha1(old_sha1, new_sha1, "", &opt);
        else
                ret = diff_root_tree_sha1(new_sha1, "", &opt);