]> gitweb.ps.run Git - ps-cgit/commitdiff
Merge branch 'stable'
authorLars Hjemli <hjemli@gmail.com>
Sun, 2 Dec 2007 21:28:37 +0000 (22:28 +0100)
committerLars Hjemli <hjemli@gmail.com>
Sun, 2 Dec 2007 21:28:37 +0000 (22:28 +0100)
* stable:
  Handle missing timestamp in commit/tag objects
  Set commit date on snapshot contents

1  2 
parsing.c
ui-shared.c

diff --combined parsing.c
index e8c7ab986ae563424c98d1d21fe3549e2f27b22f,55a485da0411b442034e217d43e6180f7568c1da..5093b8b491eb9cf6e0100c29c75e9e0a075623f8
+++ b/parsing.c
@@@ -199,7 -199,6 +199,7 @@@ struct commitinfo *cgit_parse_commit(st
        ret->committer_email = NULL;
        ret->subject = NULL;
        ret->msg = NULL;
 +      ret->msg_encoding = NULL;
  
        if (p == NULL)
                return ret;
                p = t;
                t = strchr(t, '>') + 1;
                ret->author_email = substr(p, t);
-               ret->author_date = atol(++t);
+               ret->author_date = atol(t+1);
                p = strchr(t, '\n') + 1;
        }
  
                p = t;
                t = strchr(t, '>') + 1;
                ret->committer_email = substr(p, t);
-               ret->committer_date = atol(++t);
+               ret->committer_date = atol(t+1);
                p = strchr(t, '\n') + 1;
        }
  
 +      if (!strncmp(p, "encoding ", 9)) {
 +              p += 9;
 +              t = strchr(p, '\n') + 1;
 +              ret->msg_encoding = substr(p, t);
 +              p = t;
 +      } else
 +              ret->msg_encoding = xstrdup(PAGE_ENCODING);
 +
        while (*p && (*p != '\n'))
                p = strchr(p, '\n') + 1; // skip unknown header fields
  
        } else
                ret->subject = substr(p, p+strlen(p));
  
 +      if(strcmp(ret->msg_encoding, PAGE_ENCODING)) {
 +              t = reencode_string(ret->subject, PAGE_ENCODING,
 +                                  ret->msg_encoding);
 +              if(t) {
 +                      free(ret->subject);
 +                      ret->subject = t;
 +              }
 +
 +              t = reencode_string(ret->msg, PAGE_ENCODING,
 +                                  ret->msg_encoding);
 +              if(t) {
 +                      free(ret->msg);
 +                      ret->msg = t;
 +              }
 +      }
 +
        return ret;
  }
  
@@@ -315,7 -290,7 +315,7 @@@ struct taginfo *cgit_parse_tag(struct t
                        p = t;
                        t = strchr(t, '>') + 1;
                        ret->tagger_email = substr(p, t);
-                       ret->tagger_date = atol(++t);
+                       ret->tagger_date = atol(t+1);
                }
                p = strchr(p, '\n') + 1;
        }
diff --combined ui-shared.c
index be2c75d2c6ee554979b84a277d02f27d7d346bf8,4944dfd2e9676dfadbd0ba916c347af1b1751e08..3e13c8602a6804839d302a9bd415467240c74785
@@@ -304,6 -304,8 +304,8 @@@ void cgit_print_date(time_t secs, char 
        char buf[64];
        struct tm *time;
  
+       if (!secs)
+               return;
        time = gmtime(&secs);
        strftime(buf, sizeof(buf)-1, format, time);
        html_txt(buf);
@@@ -313,6 -315,8 +315,8 @@@ void cgit_print_age(time_t t, time_t ma
  {
        time_t now, secs;
  
+       if (!t)
+               return;
        time(&now);
        secs = now - t;
  
  
  void cgit_print_docstart(char *title, struct cacheitem *item)
  {
 -      html("Content-Type: text/html; charset=utf-8\n");
 +      html("Content-Type: text/html; charset=" PAGE_ENCODING "\n");
        htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime));
        htmlf("Expires: %s\n", http_date(item->st.st_mtime +
                                         ttl_seconds(item->ttl)));
        html("\n");
        html(cgit_doctype);
 -      html("<html>\n");
 +      html("<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>\n");
        html("<head>\n");
        html("<title>");
        html_txt(title);
        html("</title>\n");
        htmlf("<meta name='generator' content='cgit %s'/>\n", cgit_version);
 +      if (cgit_robots && *cgit_robots)
 +              htmlf("<meta name='robots' content='%s'/>\n", cgit_robots);
        html("<link rel='stylesheet' type='text/css' href='");
        html_attr(cgit_css);
        html("'/>\n");
  
  void cgit_print_docend()
  {
 -      html("</td>\n</tr>\n<table>\n</body>\n</html>\n");
 +      html("</td>\n</tr>\n</table>\n</body>\n</html>\n");
  }
  
  int print_branch_option(const char *refname, const unsigned char *sha1,
@@@ -413,7 -415,7 +417,7 @@@ int print_archive_ref(const char *refna
                hashcpy(fileid, sha1);
        }
        if (!*header) {
 -              html("<p><h1>download</h1>");
 +              html("<h1>download</h1>\n");
                *header = 1;
        }
        url = cgit_pageurl(cgit_query_repo, "blob",
@@@ -457,24 -459,22 +461,24 @@@ void cgit_print_pageheader(char *title
        static const char *default_info = "This is cgit, a fast webinterface for git repositories";
        int header = 0;
  
 -      html("<div id='sidebar'>\n");
 -      html("<a href='");
 +      html("<table id='layout' summary=''>\n");
 +      html("<tr><td id='sidebar'>\n");
 +      html("<table class='sidebar' cellspacing='0' summary=''>\n");
 +      html("<tr><td class='sidebar'>\n<a href='");
        html_attr(cgit_rooturl());
 -      htmlf("'><div id='logo'><img src='%s' alt='cgit'/></div></a>\n",
 +      htmlf("'><img src='%s' alt='cgit'/></a>\n",
              cgit_logo);
 -      html("<div class='infobox'>");
 +      html("</td></tr>\n<tr><td class='sidebar'>\n");
        if (cgit_query_repo) {
 -              html("<h1>");
 +              html("<h1 class='first'>");
                html_txt(strrpart(cgit_repo->name, 20));
                html("</h1>\n");
                html_txt(cgit_repo->desc);
                if (cgit_repo->owner) {
 -                      html("<p>\n<h1>owner</h1>\n");
 +                      html("<h1>owner</h1>\n");
                        html_txt(cgit_repo->owner);
                }
 -              html("<p>\n<h1>navigate</h1>\n");
 +              html("<h1>navigate</h1>\n");
                reporevlink(NULL, "summary", NULL, "menu", cgit_query_head,
                            NULL, NULL);
                cgit_log_link("log", NULL, "menu", cgit_query_head, NULL, NULL,
  
                for_each_ref(print_archive_ref, &header);
  
 -              html("<p>\n<h1>branch</h1>\n");
 +              html("<h1>branch</h1>\n");
                html("<form method='get' action=''>\n");
                add_hidden_formfields(0, 1, cgit_query_page);
 -              html("<table class='grid'><tr><td id='branch-dropdown-cell'>");
 +//            html("<table summary='branch selector' class='grid'><tr><td id='branch-dropdown-cell'>");
                html("<select name='h' onchange='this.form.submit();'>\n");
                for_each_branch_ref(print_branch_option, cgit_query_head);
                html("</select>\n");
 -              html("</td><td>");
 -              html("<noscript><input type='submit' id='switch-btn' value='..'></noscript>\n");
 -              html("</td></tr></table>");
 +//            html("</td><td>");
 +              html("<noscript><input type='submit' id='switch-btn' value='switch'/></noscript>\n");
 +//            html("</td></tr></table>");
                html("</form>\n");
  
 -              html("<p>\n<h1>search</h1>\n");
 +              html("<h1>search</h1>\n");
                html("<form method='get' action='");
                if (cgit_virtual_root)
                        html_attr(cgit_fileurl(cgit_query_repo, "log",
                        html(default_info);
        }
  
 -      html("</div>\n");
 +      html("</td></tr></table></td>\n");
  
 -      html("</div>\n<table class='grid'><tr><td id='content'>\n");
 +      html("<td id='content'>\n");
  }