{"schema":"libjg2-1",
"vpath":"/git/",
"avatar":"/git/avatar/",
"alang":"en-US,en;q\u003d0.5",
"gen_ut":1680293332,
"reponame":"cgit",
"desc":"CGI gitweb",
"owner": { "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },"url":"https://warmcat.com/repo/cgit",
"f":3,
"items": [
{"schema":"libjg2-1",
"cid":"62c68e44aa961be1d6a4b5c3af160f72",
"oid":{ "oid": "d1bb699526842f656f7afa799431003ab285dac2", "alias": [ "refs/heads/decruft","refs/heads/master"]},"blobname": "ui-shared.c", "blob": "/* ui-shared.c: common web output functions\n *\n * Copyright (C) 2006-2017 cgit Development Team \u003ccgit@lists.zx2c4.com\u003e\n *\n * Licensed under GNU General Public License v2\n * (see COPYING for full license text)\n */\n\n#include \u0022cgit.h\u0022\n#include \u0022ui-shared.h\u0022\n#include \u0022cmd.h\u0022\n#include \u0022html.h\u0022\n#include \u0022version.h\u0022\n\nstatic const char cgit_doctype[] \u003d\n\u0022\u003c!DOCTYPE html\u003e\u005cn\u0022;\n\nstatic char *http_date(time_t t)\n{\n\tstatic char day[][4] \u003d\n\t\t{\u0022Sun\u0022, \u0022Mon\u0022, \u0022Tue\u0022, \u0022Wed\u0022, \u0022Thu\u0022, \u0022Fri\u0022, \u0022Sat\u0022};\n\tstatic char month[][4] \u003d\n\t\t{\u0022Jan\u0022, \u0022Feb\u0022, \u0022Mar\u0022, \u0022Apr\u0022, \u0022May\u0022, \u0022Jun\u0022,\n\t\t \u0022Jul\u0022, \u0022Aug\u0022, \u0022Sep\u0022, \u0022Oct\u0022, \u0022Nov\u0022, \u0022Dec\u0022};\n\tstruct tm *tm \u003d gmtime(\u0026t);\n\treturn fmt(\u0022%s, %02d %s %04d %02d:%02d:%02d GMT\u0022, day[tm-\u003etm_wday],\n\t\t tm-\u003etm_mday, month[tm-\u003etm_mon], 1900 + tm-\u003etm_year,\n\t\t tm-\u003etm_hour, tm-\u003etm_min, tm-\u003etm_sec);\n}\n\nvoid cgit_print_error(const char *fmt, ...)\n{\n\tva_list ap;\n\tva_start(ap, fmt);\n\tcgit_vprint_error(fmt, ap);\n\tva_end(ap);\n}\n\nvoid cgit_vprint_error(const char *fmt, va_list ap)\n{\n\tva_list cp;\n\thtml(\u0022\u003cdiv class\u003d'error'\u003e\u0022);\n\tva_copy(cp, ap);\n\thtml_vtxtf(fmt, cp);\n\tva_end(cp);\n\thtml(\u0022\u003c/div\u003e\u005cn\u0022);\n}\n\nconst char *cgit_httpscheme(void)\n{\n\tif (ctx.env.https \u0026\u0026 !strcmp(ctx.env.https, \u0022on\u0022))\n\t\treturn \u0022https://\u0022;\n\telse\n\t\treturn \u0022http://\u0022;\n}\n\nchar *cgit_hosturl(void)\n{\n\tif (ctx.env.http_host)\n\t\treturn xstrdup(ctx.env.http_host);\n\tif (!ctx.env.server_name)\n\t\treturn NULL;\n\tif (!ctx.env.server_port || atoi(ctx.env.server_port) \u003d\u003d 80)\n\t\treturn xstrdup(ctx.env.server_name);\n\treturn fmtalloc(\u0022%s:%s\u0022, ctx.env.server_name, ctx.env.server_port);\n}\n\nchar *cgit_currenturl(void)\n{\n\tconst char *root \u003d cgit_rooturl();\n\tsize_t len \u003d strlen(root);\n\n\tif (!ctx.qry.url)\n\t\treturn xstrdup(root);\n\tif (len \u0026\u0026 root[len - 1] \u003d\u003d '/')\n\t\treturn fmtalloc(\u0022%s%s\u0022, root, ctx.qry.url);\n\treturn fmtalloc(\u0022%s/%s\u0022, root, ctx.qry.url);\n}\n\nconst char *cgit_rooturl(void)\n{\n\tif (ctx.cfg.virtual_root)\n\t\treturn ctx.cfg.virtual_root;\n\telse\n\t\treturn ctx.cfg.script_name;\n}\n\nconst char *cgit_loginurl(void)\n{\n\tstatic const char *login_url;\n\tif (!login_url)\n\t\tlogin_url \u003d fmtalloc(\u0022%s?p\u003dlogin\u0022, cgit_rooturl());\n\treturn login_url;\n}\n\nchar *cgit_repourl(const char *reponame)\n{\n\tif (ctx.cfg.virtual_root)\n\t\treturn fmtalloc(\u0022%s%s/\u0022, ctx.cfg.virtual_root, reponame);\n\telse\n\t\treturn fmtalloc(\u0022?r\u003d%s\u0022, reponame);\n}\n\nchar *cgit_fileurl(const char *reponame, const char *pagename,\n\t\t const char *filename, const char *query)\n{\n\tstruct strbuf sb \u003d STRBUF_INIT;\n\tchar *delim;\n\n\tif (ctx.cfg.virtual_root) {\n\t\tstrbuf_addf(\u0026sb, \u0022%s%s/%s/%s\u0022, ctx.cfg.virtual_root, reponame,\n\t\t\t pagename, (filename ? filename:\u0022\u0022));\n\t\tdelim \u003d \u0022?\u0022;\n\t} else {\n\t\tstrbuf_addf(\u0026sb, \u0022?url\u003d%s/%s/%s\u0022, reponame, pagename,\n\t\t\t (filename ? filename : \u0022\u0022));\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (query)\n\t\tstrbuf_addf(\u0026sb, \u0022%s%s\u0022, delim, query);\n\treturn strbuf_detach(\u0026sb, NULL);\n}\n\nchar *cgit_pageurl(const char *reponame, const char *pagename,\n\t\t const char *query)\n{\n\treturn cgit_fileurl(reponame, pagename, NULL, query);\n}\n\n/* result is NULL or must be freed */\nstatic char *cgit_repobasename(const char *reponame)\n{\n\tint last \u003d strlen(reponame) - 1, n;\n\tchar *rv;\n\n\tif (last \u003c 1)\n\t\treturn NULL;\n\n\twhile (last \u0026\u0026 reponame[last] \u003d\u003d '/')\n\t\tlast--;\n\n\tif (last \u003e\u003d 3 \u0026\u0026 !strncmp(\u0026reponame[last - 3], \u0022.git\u0022, 3))\n\t\tlast -\u003d 3;\n\n\twhile (last \u0026\u0026 reponame[last] \u003d\u003d '/')\n\t\tlast--;\n\n\tn \u003d last;\n\twhile (n \u0026\u0026 reponame[n] !\u003d '/')\n\t\tn--;\n\n\trv \u003d xmalloc(last - n + 2);\n\tstrncpy(rv, \u0026reponame[n], last - n + 1);\n\trv[last - n + 1] \u003d '\u005c0';\n\n\treturn rv;\n}\n\n/* result is NULL or must be freed */\nchar *cgit_snapshot_prefix(const struct cgit_repo *repo)\n{\n\tif (repo-\u003esnapshot_prefix)\n\t\treturn xstrdup(repo-\u003esnapshot_prefix);\n\n\treturn cgit_repobasename(repo-\u003eurl);\n}\n\nstatic void site_url(const char *page, const char *search, const char *sort, int ofs, int always_root)\n{\n\tchar *delim \u003d \u0022?\u0022;\n\n\tif (always_root || page)\n\t\thtml_attr(cgit_rooturl());\n\telse {\n\t\tchar *currenturl \u003d cgit_currenturl();\n\t\thtml_attr(currenturl);\n\t\tfree(currenturl);\n\t}\n\n\tif (page) {\n\t\thtmlf(\u0022?p\u003d%s\u0022, page);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (search) {\n\t\thtml(delim);\n\t\thtml(\u0022q\u003d\u0022);\n\t\thtml_attr(search);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (sort) {\n\t\thtml(delim);\n\t\thtml(\u0022s\u003d\u0022);\n\t\thtml_attr(sort);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (ofs) {\n\t\thtml(delim);\n\t\thtmlf(\u0022ofs\u003d%d\u0022, ofs);\n\t}\n}\n\nstatic void site_link(const char *page, const char *name, const char *title,\n\t\t const char *class, const char *search, const char *sort, int ofs, int always_root)\n{\n\thtml(\u0022\u003ca\u0022);\n\tif (title) {\n\t\thtml(\u0022 title\u003d'\u0022);\n\t\thtml_attr(title);\n\t\thtml(\u0022'\u0022);\n\t}\n\tif (class) {\n\t\thtml(\u0022 class\u003d'\u0022);\n\t\thtml_attr(class);\n\t\thtml(\u0022'\u0022);\n\t}\n\thtml(\u0022 href\u003d'\u0022);\n\tsite_url(page, search, sort, ofs, always_root);\n\thtml(\u0022'\u003e\u0022);\n\thtml_txt(name);\n\thtml(\u0022\u003c/a\u003e\u0022);\n}\n\nvoid cgit_index_link(const char *name, const char *title, const char *class,\n\t\t const char *pattern, const char *sort, int ofs, int always_root)\n{\n\tsite_link(NULL, name, title, class, pattern, sort, ofs, always_root);\n}\n\nconst char *cgit_repo_create_url(struct strbuf *sb, struct strbuf *sb_post,\n\t\t\t\t const char *page, const char *head,\n\t\t\t\t const char *path)\n{\n\tconst char *delim \u003d \u0022?\u0022;\n\n\tif (ctx.cfg.virtual_root) {\n\t\tstrbuf_addf(sb, \u0022%s%s\u0022, ctx.cfg.virtual_root, ctx.repo-\u003eurl);\n\t} else {\n\t\tstrbuf_addstr(sb, ctx.cfg.script_name);\n\t\tsb \u003d sb_post;\n\t\tstrbuf_addf(sb, \u0022?url\u003d%s\u0022, ctx.repo-\u003eurl);\n\t\tdelim \u003d \u0022\u0026\u0022;\n\t}\n\n\tif (ctx.repo-\u003eurl[strlen(ctx.repo-\u003eurl) - 1] !\u003d '/')\n\t\tstrbuf_addch(sb, '/');\n\n\tif (page) {\n\t\tstrbuf_addf(sb, \u0022%s/\u0022, page);\n\t\tif (path)\n\t\t\tstrbuf_addstr(sb, path);\n\t}\n\n\tif (head \u0026\u0026 ctx.repo-\u003edefbranch \u0026\u0026 strcmp(head, ctx.repo-\u003edefbranch)) {\n\t\tstrbuf_addf(sb_post, \u0022%sh\u003d%s\u0022, delim, head);\n\t\tdelim \u003d \u0022\u0026\u0022;\n\t}\n\n\treturn delim;\n}\n\nstatic char *repolink(const char *title, const char *class, const char *page,\n\t\t const char *head, const char *path)\n{\n\tchar *delim \u003d \u0022?\u0022;\n\n\thtml(\u0022\u003ca\u0022);\n\tif (title) {\n\t\thtml(\u0022 title\u003d'\u0022);\n\t\thtml_attr(title);\n\t\thtml(\u0022'\u0022);\n\t}\n\tif (class) {\n\t\thtml(\u0022 class\u003d'\u0022);\n\t\thtml_attr(class);\n\t\thtml(\u0022'\u0022);\n\t}\n\thtml(\u0022 href\u003d'\u0022);\n\tif (ctx.cfg.virtual_root) {\n\t\thtml_url_path(ctx.cfg.virtual_root);\n\t\thtml_url_path(ctx.repo-\u003eurl);\n\t\tif (ctx.repo-\u003eurl[strlen(ctx.repo-\u003eurl) - 1] !\u003d '/')\n\t\t\thtml(\u0022/\u0022);\n\t\tif (page) {\n\t\t\thtml_url_path(page);\n\t\t\thtml(\u0022/\u0022);\n\t\t\tif (path)\n\t\t\t\thtml_url_path(path);\n\t\t}\n\t} else {\n\t\thtml_url_path(ctx.cfg.script_name);\n\t\thtml(\u0022?url\u003d\u0022);\n\t\thtml_url_arg(ctx.repo-\u003eurl);\n\t\tif (ctx.repo-\u003eurl[strlen(ctx.repo-\u003eurl) - 1] !\u003d '/')\n\t\t\thtml(\u0022/\u0022);\n\t\tif (page) {\n\t\t\thtml_url_arg(page);\n\t\t\thtml(\u0022/\u0022);\n\t\t\tif (path)\n\t\t\t\thtml_url_arg(path);\n\t\t}\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (head \u0026\u0026 ctx.repo-\u003edefbranch \u0026\u0026 strcmp(head, ctx.repo-\u003edefbranch)) {\n\t\thtml(delim);\n\t\thtml(\u0022h\u003d\u0022);\n\t\thtml_url_arg(head);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\treturn fmt(\u0022%s\u0022, delim);\n}\n\nstatic void reporevlink(const char *page, const char *name, const char *title,\n\t\t\tconst char *class, const char *head, const char *rev,\n\t\t\tconst char *path)\n{\n\tchar *delim;\n\n\tdelim \u003d repolink(title, class, page, head, path);\n\tif (rev \u0026\u0026 ctx.qry.head !\u003d NULL \u0026\u0026 strcmp(rev, ctx.qry.head)) {\n\t\thtml(delim);\n\t\thtml(\u0022id\u003d\u0022);\n\t\thtml_url_arg(rev);\n\t}\n\thtml(\u0022'\u003e\u0022);\n\thtml_txt(name);\n\thtml(\u0022\u003c/a\u003e\u0022);\n}\n\nvoid cgit_summary_link(const char *name, const char *title, const char *class,\n\t\t const char *head)\n{\n\treporevlink(NULL, name, title, class, head, NULL, NULL);\n}\n\nvoid cgit_tag_link(const char *name, const char *title, const char *class,\n\t\t const char *tag)\n{\n\treporevlink(\u0022tag\u0022, name, title, class, tag, NULL, NULL);\n}\n\nvoid cgit_tree_link(const char *name, const char *title, const char *class,\n\t\t const char *head, const char *rev, const char *path)\n{\n\treporevlink(\u0022tree\u0022, name, title, class, head, rev, path);\n}\n\nvoid cgit_plain_link(const char *name, const char *title, const char *class,\n\t\t const char *head, const char *rev, const char *path)\n{\n\treporevlink(\u0022plain\u0022, name, title, class, head, rev, path);\n}\n\nvoid cgit_blame_link(const char *name, const char *title, const char *class,\n\t\t const char *head, const char *rev, const char *path)\n{\n\treporevlink(\u0022blame\u0022, name, title, class, head, rev, path);\n}\n\nvoid cgit_log_link(const char *name, const char *title, const char *class,\n\t\t const char *head, const char *rev, const char *path,\n\t\t int ofs, const char *grep, const char *pattern, int showmsg,\n\t\t int follow)\n{\n\tchar *delim;\n\n\tdelim \u003d repolink(title, class, \u0022log\u0022, head, path);\n\tif (rev \u0026\u0026 ctx.qry.head \u0026\u0026 strcmp(rev, ctx.qry.head)) {\n\t\thtml(delim);\n\t\thtml(\u0022id\u003d\u0022);\n\t\thtml_url_arg(rev);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (grep \u0026\u0026 pattern) {\n\t\thtml(delim);\n\t\thtml(\u0022qt\u003d\u0022);\n\t\thtml_url_arg(grep);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t\thtml(delim);\n\t\thtml(\u0022q\u003d\u0022);\n\t\thtml_url_arg(pattern);\n\t}\n\tif (ofs \u003e 0) {\n\t\thtml(delim);\n\t\thtml(\u0022ofs\u003d\u0022);\n\t\thtmlf(\u0022%d\u0022, ofs);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (showmsg) {\n\t\thtml(delim);\n\t\thtml(\u0022showmsg\u003d1\u0022);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (follow) {\n\t\thtml(delim);\n\t\thtml(\u0022follow\u003d1\u0022);\n\t}\n\thtml(\u0022'\u003e\u0022);\n\thtml_txt(name);\n\thtml(\u0022\u003c/a\u003e\u0022);\n}\n\nvoid cgit_commit_link(const char *name, const char *title, const char *class,\n\t\t const char *head, const char *rev, const char *path)\n{\n\tchar *delim;\n\n\tdelim \u003d repolink(title, class, \u0022commit\u0022, head, path);\n\tif (rev \u0026\u0026 ctx.qry.head \u0026\u0026 strcmp(rev, ctx.qry.head)) {\n\t\thtml(delim);\n\t\thtml(\u0022id\u003d\u0022);\n\t\thtml_url_arg(rev);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (ctx.qry.difftype) {\n\t\thtml(delim);\n\t\thtmlf(\u0022dt\u003d%d\u0022, ctx.qry.difftype);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (ctx.qry.context \u003e 0 \u0026\u0026 ctx.qry.context !\u003d 3) {\n\t\thtml(delim);\n\t\thtml(\u0022context\u003d\u0022);\n\t\thtmlf(\u0022%d\u0022, ctx.qry.context);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (ctx.qry.ignorews) {\n\t\thtml(delim);\n\t\thtml(\u0022ignorews\u003d1\u0022);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (ctx.qry.follow) {\n\t\thtml(delim);\n\t\thtml(\u0022follow\u003d1\u0022);\n\t}\n\thtml(\u0022'\u003e\u0022);\n\tif (name[0] !\u003d '\u005c0') {\n\t\tif (strlen(name) \u003e ctx.cfg.max_msg_len \u0026\u0026 ctx.cfg.max_msg_len \u003e\u003d 15) {\n\t\t\thtml_ntxt(name, ctx.cfg.max_msg_len - 3);\n\t\t\thtml(\u0022...\u0022);\n\t\t} else\n\t\t\thtml_txt(name);\n\t} else\n\t\thtml_txt(\u0022(no commit message)\u0022);\n\thtml(\u0022\u003c/a\u003e\u0022);\n}\n\nvoid cgit_refs_link(const char *name, const char *title, const char *class,\n\t\t const char *head, const char *rev, const char *path)\n{\n\treporevlink(\u0022refs\u0022, name, title, class, head, rev, path);\n}\n\nvoid cgit_snapshot_link(const char *name, const char *title, const char *class,\n\t\t\tconst char *head, const char *rev,\n\t\t\tconst char *archivename)\n{\n\treporevlink(\u0022snapshot\u0022, name, title, class, head, rev, archivename);\n}\n\nvoid cgit_diff_link(const char *name, const char *title, const char *class,\n\t\t const char *head, const char *new_rev, const char *old_rev,\n\t\t const char *path)\n{\n\tchar *delim;\n\n\tdelim \u003d repolink(title, class, \u0022diff\u0022, head, path);\n\tif (new_rev \u0026\u0026 ctx.qry.head !\u003d NULL \u0026\u0026 strcmp(new_rev, ctx.qry.head)) {\n\t\thtml(delim);\n\t\thtml(\u0022id\u003d\u0022);\n\t\thtml_url_arg(new_rev);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (old_rev) {\n\t\thtml(delim);\n\t\thtml(\u0022id2\u003d\u0022);\n\t\thtml_url_arg(old_rev);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (ctx.qry.difftype) {\n\t\thtml(delim);\n\t\thtmlf(\u0022dt\u003d%d\u0022, ctx.qry.difftype);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (ctx.qry.context \u003e 0 \u0026\u0026 ctx.qry.context !\u003d 3) {\n\t\thtml(delim);\n\t\thtml(\u0022context\u003d\u0022);\n\t\thtmlf(\u0022%d\u0022, ctx.qry.context);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (ctx.qry.ignorews) {\n\t\thtml(delim);\n\t\thtml(\u0022ignorews\u003d1\u0022);\n\t\tdelim \u003d \u0022\u0026amp;\u0022;\n\t}\n\tif (ctx.qry.follow) {\n\t\thtml(delim);\n\t\thtml(\u0022follow\u003d1\u0022);\n\t}\n\thtml(\u0022'\u003e\u0022);\n\thtml_txt(name);\n\thtml(\u0022\u003c/a\u003e\u0022);\n}\n\nvoid cgit_patch_link(const char *name, const char *title, const char *class,\n\t\t const char *head, const char *rev, const char *path)\n{\n\treporevlink(\u0022patch\u0022, name, title, class, head, rev, path);\n}\n\nvoid cgit_stats_link(const char *name, const char *title, const char *class,\n\t\t const char *head, const char *path)\n{\n\treporevlink(\u0022stats\u0022, name, title, class, head, NULL, path);\n}\n\nstatic void cgit_self_link(char *name, const char *title, const char *class)\n{\n\tif (!strcmp(ctx.qry.page, \u0022repolist\u0022))\n\t\tcgit_index_link(name, title, class, ctx.qry.search, ctx.qry.sort,\n\t\t\t\tctx.qry.ofs, 1);\n\telse if (!strcmp(ctx.qry.page, \u0022summary\u0022))\n\t\tcgit_summary_link(name, title, class, ctx.qry.head);\n\telse if (!strcmp(ctx.qry.page, \u0022tag\u0022))\n\t\tcgit_tag_link(name, title, class, ctx.qry.has_sha1 ?\n\t\t\t ctx.qry.sha1 : ctx.qry.head);\n\telse if (!strcmp(ctx.qry.page, \u0022tree\u0022))\n\t\tcgit_tree_link(name, title, class, ctx.qry.head,\n\t\t\t ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,\n\t\t\t ctx.qry.path);\n\telse if (!strcmp(ctx.qry.page, \u0022plain\u0022))\n\t\tcgit_plain_link(name, title, class, ctx.qry.head,\n\t\t\t\tctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,\n\t\t\t\tctx.qry.path);\n\telse if (!strcmp(ctx.qry.page, \u0022blame\u0022))\n\t\tcgit_blame_link(name, title, class, ctx.qry.head,\n\t\t\t\tctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,\n\t\t\t\tctx.qry.path);\n\telse if (!strcmp(ctx.qry.page, \u0022log\u0022))\n\t\tcgit_log_link(name, title, class, ctx.qry.head,\n\t\t\t ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,\n\t\t\t ctx.qry.path, ctx.qry.ofs,\n\t\t\t ctx.qry.grep, ctx.qry.search,\n\t\t\t ctx.qry.showmsg, ctx.qry.follow);\n\telse if (!strcmp(ctx.qry.page, \u0022commit\u0022))\n\t\tcgit_commit_link(name, title, class, ctx.qry.head,\n\t\t\t\t ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,\n\t\t\t\t ctx.qry.path);\n\telse if (!strcmp(ctx.qry.page, \u0022patch\u0022))\n\t\tcgit_patch_link(name, title, class, ctx.qry.head,\n\t\t\t\tctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,\n\t\t\t\tctx.qry.path);\n\telse if (!strcmp(ctx.qry.page, \u0022refs\u0022))\n\t\tcgit_refs_link(name, title, class, ctx.qry.head,\n\t\t\t ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,\n\t\t\t ctx.qry.path);\n\telse if (!strcmp(ctx.qry.page, \u0022snapshot\u0022))\n\t\tcgit_snapshot_link(name, title, class, ctx.qry.head,\n\t\t\t\t ctx.qry.has_sha1 ? ctx.qry.sha1 : NULL,\n\t\t\t\t ctx.qry.path);\n\telse if (!strcmp(ctx.qry.page, \u0022diff\u0022))\n\t\tcgit_diff_link(name, title, class, ctx.qry.head,\n\t\t\t ctx.qry.sha1, ctx.qry.sha2,\n\t\t\t ctx.qry.path);\n\telse if (!strcmp(ctx.qry.page, \u0022stats\u0022))\n\t\tcgit_stats_link(name, title, class, ctx.qry.head,\n\t\t\t\tctx.qry.path);\n\telse {\n\t\t/* Don't known how to make link for this page */\n\t\trepolink(title, class, ctx.qry.page, ctx.qry.head, ctx.qry.path);\n\t\thtml(\u0022\u003e\u003c!-- cgit_self_link() doesn't know how to make link for page '\u0022);\n\t\thtml_txt(ctx.qry.page);\n\t\thtml(\u0022' --\u003e\u0022);\n\t\thtml_txt(name);\n\t\thtml(\u0022\u003c/a\u003e\u0022);\n\t}\n}\n\nvoid cgit_object_link(struct object *obj)\n{\n\tchar *page, *shortrev, *fullrev, *name;\n\n\tfullrev \u003d oid_to_hex(\u0026obj-\u003eoid);\n\tshortrev \u003d xstrdup(fullrev);\n\tshortrev[10] \u003d '\u005c0';\n\tif (obj-\u003etype \u003d\u003d OBJ_COMMIT) {\n\t\tcgit_commit_link(fmt(\u0022commit %s...\u0022, shortrev), NULL, NULL,\n\t\t\t\t ctx.qry.head, fullrev, NULL);\n\t\treturn;\n\t} else if (obj-\u003etype \u003d\u003d OBJ_TREE)\n\t\tpage \u003d \u0022tree\u0022;\n\telse if (obj-\u003etype \u003d\u003d OBJ_TAG)\n\t\tpage \u003d \u0022tag\u0022;\n\telse\n\t\tpage \u003d \u0022blob\u0022;\n\tname \u003d fmt(\u0022%s %s...\u0022, type_name(obj-\u003etype), shortrev);\n\treporevlink(page, name, NULL, NULL, ctx.qry.head, fullrev, NULL);\n}\n\nstatic struct string_list_item *lookup_path(struct string_list *list,\n\t\t\t\t\t const char *path)\n{\n\tstruct string_list_item *item;\n\n\twhile (path \u0026\u0026 path[0]) {\n\t\tif ((item \u003d string_list_lookup(list, path)))\n\t\t\treturn item;\n\t\tif (!(path \u003d strchr(path, '/')))\n\t\t\tbreak;\n\t\tpath++;\n\t}\n\treturn NULL;\n}\n\nvoid cgit_submodule_link(const char *class, char *path, const char *rev)\n{\n\tstruct string_list *list;\n\tstruct string_list_item *item;\n\tchar tail, *dir;\n\tsize_t len;\n\n\tlen \u003d 0;\n\ttail \u003d 0;\n\tlist \u003d \u0026ctx.repo-\u003esubmodules;\n\titem \u003d lookup_path(list, path);\n\tif (!item) {\n\t\tlen \u003d strlen(path);\n\t\ttail \u003d path[len - 1];\n\t\tif (tail \u003d\u003d '/') {\n\t\t\tpath[len - 1] \u003d 0;\n\t\t\titem \u003d lookup_path(list, path);\n\t\t}\n\t}\n\tif (item || ctx.repo-\u003emodule_link) {\n\t\thtml(\u0022\u003ca \u0022);\n\t\tif (class)\n\t\t\thtmlf(\u0022class\u003d'%s' \u0022, class);\n\t\thtml(\u0022href\u003d'\u0022);\n\t\tif (item) {\n\t\t\thtml_attrf(item-\u003eutil, rev);\n\t\t} else {\n\t\t\tdir \u003d strrchr(path, '/');\n\t\t\tif (dir)\n\t\t\t\tdir++;\n\t\t\telse\n\t\t\t\tdir \u003d path;\n\t\t\thtml_attrf(ctx.repo-\u003emodule_link, dir, rev);\n\t\t}\n\t\thtml(\u0022'\u003e\u0022);\n\t\thtml_txt(path);\n\t\thtml(\u0022\u003c/a\u003e\u0022);\n\t} else {\n\t\thtml(\u0022\u003cspan\u0022);\n\t\tif (class)\n\t\t\thtmlf(\u0022 class\u003d'%s'\u0022, class);\n\t\thtml(\u0022\u003e\u0022);\n\t\thtml_txt(path);\n\t\thtml(\u0022\u003c/span\u003e\u0022);\n\t}\n\thtml_txtf(\u0022 @ %.7s\u0022, rev);\n\tif (item \u0026\u0026 tail)\n\t\tpath[len - 1] \u003d tail;\n}\n\nconst struct date_mode *cgit_date_mode(enum date_mode_type type)\n{\n\tstatic struct date_mode mode;\n\tmode.type \u003d type;\n\tmode.local \u003d ctx.cfg.local_time;\n\treturn \u0026mode;\n}\n\nstatic void print_rel_date(time_t t, int tz, double value,\n\tconst char *class, const char *suffix)\n{\n\thtmlf(\u0022\u003cspan class\u003d'%s' ut\u003d'%\u0022 PRIu64 \u0022' title\u003d'\u0022, class, (uint64_t)t);\n\thtml_attr(show_date(t, tz, cgit_date_mode(DATE_ISO8601)));\n\thtmlf(\u0022'\u003e%.0f %s\u003c/span\u003e\u0022, value, suffix);\n}\n\nvoid cgit_print_age(time_t t, int tz, time_t max_relative)\n{\n\ttime_t now, secs;\n\n\tif (!t)\n\t\treturn;\n\ttime(\u0026now);\n\tsecs \u003d now - t;\n\tif (secs \u003c 0)\n\t\tsecs \u003d 0;\n\n\tif (secs \u003e max_relative \u0026\u0026 max_relative \u003e\u003d 0) {\n\t\thtml(\u0022\u003cspan title\u003d'\u0022);\n\t\thtml_attr(show_date(t, tz, cgit_date_mode(DATE_ISO8601)));\n\t\thtml(\u0022'\u003e\u0022);\n\t\thtml_txt(show_date(t, tz, cgit_date_mode(DATE_SHORT)));\n\t\thtml(\u0022\u003c/span\u003e\u0022);\n\t\treturn;\n\t}\n\n\tif (secs \u003c TM_HOUR * 2) {\n\t\tprint_rel_date(t, tz, secs * 1.0 / TM_MIN, \u0022age-mins\u0022, \u0022min.\u0022);\n\t\treturn;\n\t}\n\tif (secs \u003c TM_DAY * 2) {\n\t\tprint_rel_date(t, tz, secs * 1.0 / TM_HOUR, \u0022age-hours\u0022, \u0022hours\u0022);\n\t\treturn;\n\t}\n\tif (secs \u003c TM_WEEK * 2) {\n\t\tprint_rel_date(t, tz, secs * 1.0 / TM_DAY, \u0022age-days\u0022, \u0022days\u0022);\n\t\treturn;\n\t}\n\tif (secs \u003c TM_MONTH * 2) {\n\t\tprint_rel_date(t, tz, secs * 1.0 / TM_WEEK, \u0022age-weeks\u0022, \u0022weeks\u0022);\n\t\treturn;\n\t}\n\tif (secs \u003c TM_YEAR * 2) {\n\t\tprint_rel_date(t, tz, secs * 1.0 / TM_MONTH, \u0022age-months\u0022, \u0022months\u0022);\n\t\treturn;\n\t}\n\tprint_rel_date(t, tz, secs * 1.0 / TM_YEAR, \u0022age-years\u0022, \u0022years\u0022);\n}\n\nvoid cgit_print_http_headers(void)\n{\n\tif (ctx.env.no_http \u0026\u0026 !strcmp(ctx.env.no_http, \u00221\u0022))\n\t\treturn;\n\n\tif (ctx.page.status)\n\t\thtmlf(\u0022Status: %d %s\u005cn\u0022, ctx.page.status, ctx.page.statusmsg);\n\tif (ctx.page.mimetype \u0026\u0026 ctx.page.charset)\n\t\thtmlf(\u0022Content-Type: %s; charset\u003d%s\u005cn\u0022, ctx.page.mimetype,\n\t\t ctx.page.charset);\n\telse if (ctx.page.mimetype)\n\t\thtmlf(\u0022Content-Type: %s\u005cn\u0022, ctx.page.mimetype);\n\tif (ctx.page.size)\n\t\thtmlf(\u0022Content-Length: %zd\u005cn\u0022, ctx.page.size);\n\tif (ctx.page.filename) {\n\t\thtml(\u0022Content-Disposition: inline; filename\u003d\u005c\u0022\u0022);\n\t\thtml_header_arg_in_quotes(ctx.page.filename);\n\t\thtml(\u0022\u005c\u0022\u005cn\u0022);\n\t}\n\tif (!ctx.env.authenticated)\n\t\thtml(\u0022Cache-Control: no-cache, no-store\u005cn\u0022);\n\thtmlf(\u0022Last-Modified: %s\u005cn\u0022, http_date(ctx.page.modified));\n\thtmlf(\u0022Expires: %s\u005cn\u0022, http_date(ctx.page.expires));\n\tif (ctx.page.etag)\n\t\thtmlf(\u0022ETag: \u005c\u0022%s\u005c\u0022\u005cn\u0022, ctx.page.etag);\n\thtml(\u0022\u005cn\u0022);\n\tif (ctx.env.request_method \u0026\u0026 !strcmp(ctx.env.request_method, \u0022HEAD\u0022))\n\t\texit(0);\n}\n\nvoid cgit_redirect(const char *url, bool permanent)\n{\n\thtmlf(\u0022Status: %d %s\u005cn\u0022, permanent ? 301 : 302, permanent ? \u0022Moved\u0022 : \u0022Found\u0022);\n\thtml(\u0022Location: \u0022);\n\thtml_url_path(url);\n\thtml(\u0022\u005cn\u005cn\u0022);\n}\n\nstatic void print_rel_vcs_link(const char *url)\n{\n\thtml(\u0022\u003clink rel\u003d'vcs-git' href\u003d'\u0022);\n\thtml_attr(url);\n\thtml(\u0022' title\u003d'\u0022);\n\thtml_attr(ctx.repo-\u003ename);\n\thtml(\u0022 Git repository'/\u003e\u005cn\u0022);\n}\n\nstatic int emit_css_link(struct string_list_item *s, void *arg)\n{\n\thtml(\u0022\u003clink rel\u003d'stylesheet' type\u003d'text/css' href\u003d'\u0022);\n\tif (s)\n\t\thtml_attr(s-\u003estring);\n\telse\n\t\thtml_attr((const char *)arg);\n\thtml(\u0022'/\u003e\u005cn\u0022);\n\n\treturn 0;\n}\n\t\nstatic int emit_js_link(struct string_list_item *s, void *arg)\n{\n\thtml(\u0022\u003cscript type\u003d'text/javascript' src\u003d'\u0022);\n\thtml_attr(s-\u003estring);\n\thtml(\u0022'\u003e\u003c/script\u003e\u005cn\u0022);\n\n\treturn 0;\n}\n\nvoid cgit_print_docstart(void)\n{\n\tchar *host \u003d cgit_hosturl();\n\n\tif (ctx.cfg.embedded) {\n\t\tif (ctx.cfg.header)\n\t\t\thtml_include(ctx.cfg.header);\n\t\treturn;\n\t}\n\n\thtml(cgit_doctype);\n\thtml(\u0022\u003chtml lang\u003d'en'\u003e\u005cn\u0022);\n\thtml(\u0022\u003chead\u003e\u005cn\u0022);\n\thtml(\u0022\u003ctitle\u003e\u0022);\n\thtml_txt(ctx.page.title);\n\thtml(\u0022\u003c/title\u003e\u005cn\u0022);\n\thtmlf(\u0022\u003cmeta name\u003d'generator' content\u003d'cgit %s'/\u003e\u005cn\u0022, cgit_version);\n\tif (ctx.cfg.robots \u0026\u0026 *ctx.cfg.robots)\n\t\thtmlf(\u0022\u003cmeta name\u003d'robots' content\u003d'%s'/\u003e\u005cn\u0022, ctx.cfg.robots);\n\n\tif (ctx.cfg.css.items)\n\t\tfor_each_string_list(\u0026ctx.cfg.css, emit_css_link, NULL);\n\telse\n\t\temit_css_link(NULL, \u0022/cgit.css\u0022);\n\n\tfor_each_string_list(\u0026ctx.cfg.js, emit_js_link, NULL);\n\n\tif (ctx.cfg.favicon) {\n\t\thtml(\u0022\u003clink rel\u003d'shortcut icon' href\u003d'\u0022);\n\t\thtml_attr(ctx.cfg.favicon);\n\t\thtml(\u0022'/\u003e\u005cn\u0022);\n\t}\n\tif (host \u0026\u0026 ctx.repo \u0026\u0026 ctx.qry.head) {\n\t\tchar *fileurl;\n\t\tstruct strbuf sb \u003d STRBUF_INIT;\n\t\tstrbuf_addf(\u0026sb, \u0022h\u003d%s\u0022, ctx.qry.head);\n\n\t\thtml(\u0022\u003clink rel\u003d'alternate' title\u003d'Atom feed' href\u003d'\u0022);\n\t\thtml(cgit_httpscheme());\n\t\thtml_attr(host);\n\t\tfileurl \u003d cgit_fileurl(ctx.repo-\u003eurl, \u0022atom\u0022, ctx.qry.vpath,\n\t\t\t\t sb.buf);\n\t\thtml_attr(fileurl);\n\t\thtml(\u0022' type\u003d'application/atom+xml'/\u003e\u005cn\u0022);\n\t\tstrbuf_release(\u0026sb);\n\t\tfree(fileurl);\n\t}\n\tif (ctx.repo)\n\t\tcgit_add_clone_urls(print_rel_vcs_link);\n\tif (ctx.cfg.head_include)\n\t\thtml_include(ctx.cfg.head_include);\n\thtml(\u0022\u003c/head\u003e\u005cn\u0022);\n\thtml(\u0022\u003cbody\u003e\u005cn\u0022);\n\tif (ctx.cfg.header)\n\t\thtml_include(ctx.cfg.header);\n\tfree(host);\n}\n\nvoid cgit_print_docend(void)\n{\n\thtml(\u0022\u003c/div\u003e \u003c!-- class\u003dcontent --\u003e\u005cn\u0022);\n\tif (ctx.cfg.embedded) {\n\t\thtml(\u0022\u003c/div\u003e \u003c!-- id\u003dcgit --\u003e\u005cn\u0022);\n\t\tif (ctx.cfg.footer)\n\t\t\thtml_include(ctx.cfg.footer);\n\t\treturn;\n\t}\n\tif (ctx.cfg.footer)\n\t\thtml_include(ctx.cfg.footer);\n\telse {\n\t\thtmlf(\u0022\u003cdiv class\u003d'footer'\u003egenerated by \u003ca href\u003d'https://git.zx2c4.com/cgit/about/'\u003ecgit %s\u003c/a\u003e \u0022\n\t\t\t\u0022(\u003ca href\u003d'https://git-scm.com/'\u003egit %s\u003c/a\u003e) at \u0022, cgit_version, git_version_string);\n\t\thtml_txt(show_date(time(NULL), 0, cgit_date_mode(DATE_ISO8601)));\n\t\thtml(\u0022 (\u0022);\n\t\tcgit_print_age(time(NULL), 0, -1);\n\t\thtml(\u0022 ago)\u003c/div\u003e\u005cn\u0022);\n\t}\n\thtml(\u0022\u003c/div\u003e \u003c!-- id\u003dcgit --\u003e\u005cn\u0022);\n\thtml(\u0022\u003c/body\u003e\u005cn\u003c/html\u003e\u005cn\u0022);\n}\n\nvoid cgit_print_error_page(int code, const char *msg, const char *fmt, ...)\n{\n\tva_list ap;\n\tctx.page.expires \u003d ctx.cfg.cache_dynamic_ttl;\n\tctx.page.status \u003d code;\n\tctx.page.statusmsg \u003d msg;\n\tcgit_print_layout_start();\n\tva_start(ap, fmt);\n\tcgit_vprint_error(fmt, ap);\n\tva_end(ap);\n\tcgit_print_layout_end();\n}\n\nvoid cgit_print_layout_start(void)\n{\n\tcgit_print_http_headers();\n\tcgit_print_docstart();\n\tcgit_print_pageheader();\n}\n\nvoid cgit_print_layout_end(void)\n{\n\tcgit_print_docend();\n}\n\nstatic void add_clone_urls(void (*fn)(const char *), char *txt, char *suffix)\n{\n\tstruct strbuf **url_list \u003d strbuf_split_str(txt, ' ', 0);\n\tint i;\n\n\tfor (i \u003d 0; url_list[i]; i++) {\n\t\tstrbuf_rtrim(url_list[i]);\n\t\tif (url_list[i]-\u003elen \u003d\u003d 0)\n\t\t\tcontinue;\n\t\tif (suffix \u0026\u0026 *suffix)\n\t\t\tstrbuf_addf(url_list[i], \u0022/%s\u0022, suffix);\n\t\tfn(url_list[i]-\u003ebuf);\n\t}\n\n\tstrbuf_list_free(url_list);\n}\n\nvoid cgit_add_clone_urls(void (*fn)(const char *))\n{\n\tif (ctx.repo-\u003eclone_url)\n\t\tadd_clone_urls(fn, expand_macros(ctx.repo-\u003eclone_url), NULL);\n\telse if (ctx.cfg.clone_prefix)\n\t\tadd_clone_urls(fn, ctx.cfg.clone_prefix, ctx.repo-\u003eurl);\n}\n\nstatic int print_branch_option(const char *refname, const struct object_id *oid,\n\t\t\t int flags, void *cb_data)\n{\n\tchar *name \u003d (char *)refname;\n\thtml_option(name, name, ctx.qry.head);\n\treturn 0;\n}\n\nvoid cgit_add_hidden_formfields(int incl_head, int incl_search,\n\t\t\t\tconst char *page)\n{\n\tif (!ctx.cfg.virtual_root) {\n\t\tstruct strbuf url \u003d STRBUF_INIT;\n\n\t\tstrbuf_addf(\u0026url, \u0022%s/%s\u0022, ctx.qry.repo, page);\n\t\tif (ctx.qry.vpath)\n\t\t\tstrbuf_addf(\u0026url, \u0022/%s\u0022, ctx.qry.vpath);\n\t\thtml_hidden(\u0022url\u0022, url.buf);\n\t\tstrbuf_release(\u0026url);\n\t}\n\n\tif (incl_head \u0026\u0026 ctx.qry.head \u0026\u0026 ctx.repo-\u003edefbranch \u0026\u0026\n\t strcmp(ctx.qry.head, ctx.repo-\u003edefbranch))\n\t\thtml_hidden(\u0022h\u0022, ctx.qry.head);\n\n\tif (ctx.qry.sha1)\n\t\thtml_hidden(\u0022id\u0022, ctx.qry.sha1);\n\tif (ctx.qry.sha2)\n\t\thtml_hidden(\u0022id2\u0022, ctx.qry.sha2);\n\tif (ctx.qry.showmsg)\n\t\thtml_hidden(\u0022showmsg\u0022, \u00221\u0022);\n\n\tif (incl_search) {\n\t\tif (ctx.qry.grep)\n\t\t\thtml_hidden(\u0022qt\u0022, ctx.qry.grep);\n\t\tif (ctx.qry.search)\n\t\t\thtml_hidden(\u0022q\u0022, ctx.qry.search);\n\t}\n}\n\nstatic const char *hc(const char *page)\n{\n\tif (!ctx.qry.page)\n\t\treturn NULL;\n\n\treturn strcmp(ctx.qry.page, page) ? NULL : \u0022active\u0022;\n}\n\nstatic void cgit_print_path_crumbs(char *path)\n{\n\tchar *old_path \u003d ctx.qry.path;\n\tchar *p \u003d path, *q, *end \u003d path + strlen(path);\n\n\tctx.qry.path \u003d NULL;\n\tcgit_self_link(\u0022root\u0022, NULL, NULL);\n\tctx.qry.path \u003d p \u003d path;\n\twhile (p \u003c end) {\n\t\tif (!(q \u003d strchr(p, '/')))\n\t\t\tq \u003d end;\n\t\t*q \u003d '\u005c0';\n\t\thtml_txt(\u0022/\u0022);\n\t\tcgit_self_link(p, NULL, NULL);\n\t\tif (q \u003c end)\n\t\t\t*q \u003d '/';\n\t\tp \u003d q + 1;\n\t}\n\tctx.qry.path \u003d old_path;\n}\n\nstatic void print_branch_combo_form(void)\n{\n\thtml(\u0022\u003cform method\u003d'get'\u003e\u005cn\u0022);\n\tcgit_add_hidden_formfields(0, 1, ctx.qry.page);\n\thtml(\u0022\u003cselect name\u003d'h' onchange\u003d'this.form.submit();'\u003e\u005cn\u0022);\n\tfor_each_branch_ref(print_branch_option, ctx.qry.head);\n\tif (ctx.repo-\u003eenable_remote_branches)\n\t\tfor_each_remote_ref(print_branch_option, ctx.qry.head);\n\thtml(\u0022\u003c/select\u003e \u0022);\n\thtml(\u0022\u003cinput type\u003d'submit' value\u003d'switch'/\u003e\u0022);\n\thtml(\u0022\u003c/form\u003e\u0022);\n}\n\nstatic void print_header(void)\n{\n\tchar *logo \u003d NULL, *logo_link \u003d NULL;\n\n\thtml(\u0022\u003ctable id\u003d'header'\u003e\u005cn\u0022);\n\thtml(\u0022\u003ctr\u003e\u005cn\u0022);\n\n\tif (ctx.repo \u0026\u0026 ctx.repo-\u003elogo \u0026\u0026 *ctx.repo-\u003elogo)\n\t\tlogo \u003d ctx.repo-\u003elogo;\n\telse\n\t\tlogo \u003d ctx.cfg.logo;\n\tif (ctx.repo \u0026\u0026 ctx.repo-\u003elogo_link \u0026\u0026 *ctx.repo-\u003elogo_link)\n\t\tlogo_link \u003d ctx.repo-\u003elogo_link;\n\telse\n\t\tlogo_link \u003d ctx.cfg.logo_link;\n\tif (logo \u0026\u0026 *logo) {\n\t\thtml(\u0022\u003ctd class\u003d'logo' rowspan\u003d'2'\u003e\u003ca href\u003d'\u0022);\n\t\tif (logo_link \u0026\u0026 *logo_link)\n\t\t\thtml_attr(logo_link);\n\t\telse\n\t\t\thtml_attr(cgit_rooturl());\n\t\thtml(\u0022'\u003e\u003cimg src\u003d'\u0022);\n\t\thtml_attr(logo);\n\t\thtml(\u0022' alt\u003d'cgit logo'/\u003e\u003c/a\u003e\u003c/td\u003e\u005cn\u0022);\n\t}\n\n\thtml(\u0022\u003ctd class\u003d'main'\u003e\u0022);\n\tif (ctx.repo) {\n\t\tcgit_index_link(\u0022index\u0022, NULL, NULL, NULL, NULL, 0, 1);\n\t\thtml(\u0022 : \u0022);\n\t\tcgit_summary_link(ctx.repo-\u003ename, ctx.repo-\u003ename, NULL, NULL);\n\t\tif (ctx.env.authenticated) {\n\t\t\thtml(\u0022\u003c/td\u003e\u003ctd class\u003d'form'\u003e\u0022);\n\t\t\tprint_branch_combo_form();\n\t\t}\n\t} else\n\t\thtml_txt(ctx.cfg.root_title);\n\thtml(\u0022\u003c/td\u003e\u003c/tr\u003e\u005cn\u0022);\n\n\thtml(\u0022\u003ctr\u003e\u003ctd class\u003d'sub'\u003e\u0022);\n\tif (ctx.repo) {\n\t\tif (ctx.repo-\u003edesc \u0026\u0026\n\t\t (ctx.repo-\u003edesc !\u003d cgit_default_repo_desc ||\n\t\t !ctx.repo-\u003edesc_html))\n\t\t\thtml_txt(ctx.repo-\u003edesc);\n\t\tif (ctx.repo-\u003edesc_html)\n\t\t\thtml(ctx.repo-\u003edesc_html);\n\t\thtml(\u0022\u003c/td\u003e\u003ctd class\u003d'sub right'\u003e\u0022);\n\t\thtml_txt(ctx.repo-\u003eowner);\n\t} else {\n\t\tif (ctx.cfg.root_desc)\n\t\t\thtml_txt(ctx.cfg.root_desc);\n\t\tif (ctx.cfg.root_desc_html)\n\t\t\thtml(ctx.cfg.root_desc_html);\n\t}\n\thtml(\u0022\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u005cn\u0022);\n}\n\nvoid cgit_print_pageheader(void)\n{\n\thtml(\u0022\u003cdiv id\u003d'cgit'\u003e\u0022);\n\tif (!ctx.env.authenticated || !ctx.cfg.noheader)\n\t\tprint_header();\n\n\thtml(\u0022\u003ctable class\u003d'tabs'\u003e\u003ctr\u003e\u005cn\u0022);\n\tif (ctx.env.authenticated \u0026\u0026 ctx.repo) {\n\t\tif (ctx.cfg.noheader) {\n\t\t\thtml(\u0022\u003ctd class\u003d'form' style\u003d'text-align:left'\u003e\u0022);\n\t\t\tprint_branch_combo_form();\n\t\t\thtml(\u0022\u003c/td\u003e\u003ctd style\u003d'text-align:center'\u003e\u0022);\n\t\t}\n\t\thtml(\u0022\u003ctd\u003e\u0022);\n\n\t\tcgit_summary_link(\u0022summary\u0022, NULL, hc(\u0022summary\u0022),\n\t\t\t\t ctx.qry.head);\n\t\tcgit_refs_link(\u0022refs\u0022, NULL, hc(\u0022refs\u0022), ctx.qry.head,\n\t\t\t ctx.qry.sha1, NULL);\n\t\tcgit_log_link(\u0022log\u0022, NULL, hc(\u0022log\u0022), ctx.qry.head,\n\t\t\t NULL, ctx.qry.vpath, 0, NULL, NULL,\n\t\t\t ctx.qry.showmsg, ctx.qry.follow);\n\t\tif (ctx.qry.page \u0026\u0026 !strcmp(ctx.qry.page, \u0022blame\u0022))\n\t\t\tcgit_blame_link(\u0022blame\u0022, NULL, hc(\u0022blame\u0022), ctx.qry.head,\n\t\t\t\t ctx.qry.sha1, ctx.qry.vpath);\n\t\telse\n\t\t\tcgit_tree_link(\u0022tree\u0022, NULL, hc(\u0022tree\u0022), ctx.qry.head,\n\t\t\t\t ctx.qry.sha1, ctx.qry.vpath);\n\t\tcgit_commit_link(\u0022commit\u0022, NULL, hc(\u0022commit\u0022),\n\t\t\t\t ctx.qry.head, ctx.qry.sha1, ctx.qry.vpath);\n\t\tcgit_diff_link(\u0022diff\u0022, NULL, hc(\u0022diff\u0022), ctx.qry.head,\n\t\t\t ctx.qry.sha1, ctx.qry.sha2, ctx.qry.vpath);\n\t\tif (ctx.repo-\u003emax_stats)\n\t\t\tcgit_stats_link(\u0022stats\u0022, NULL, hc(\u0022stats\u0022),\n\t\t\t\t\tctx.qry.head, ctx.qry.vpath);\n\t\tif (ctx.repo-\u003ehomepage) {\n\t\t\thtml(\u0022\u003ca href\u003d'\u0022);\n\t\t\thtml_attr(ctx.repo-\u003ehomepage);\n\t\t\thtml(\u0022'\u003ehomepage\u003c/a\u003e\u0022);\n\t\t}\n\t\thtml(\u0022\u003c/td\u003e\u003ctd class\u003d'form'\u003e\u0022);\n\t\thtml(\u0022\u003cform class\u003d'right' method\u003d'get' action\u003d'\u0022);\n\t\tif (ctx.cfg.virtual_root) {\n\t\t\tchar *fileurl \u003d cgit_fileurl(ctx.qry.repo, \u0022log\u0022,\n\t\t\t\t\t\t ctx.qry.vpath, NULL);\n\t\t\thtml_url_path(fileurl);\n\t\t\tfree(fileurl);\n\t\t}\n\t\thtml(\u0022'\u003e\u005cn\u0022);\n\t\tcgit_add_hidden_formfields(1, 0, \u0022log\u0022);\n\t\thtml(\u0022\u003cselect name\u003d'qt'\u003e\u005cn\u0022);\n\t\thtml_option(\u0022grep\u0022, \u0022log msg\u0022, ctx.qry.grep);\n\t\thtml_option(\u0022author\u0022, \u0022author\u0022, ctx.qry.grep);\n\t\thtml_option(\u0022committer\u0022, \u0022committer\u0022, ctx.qry.grep);\n\t\thtml_option(\u0022range\u0022, \u0022range\u0022, ctx.qry.grep);\n\t\thtml(\u0022\u003c/select\u003e\u005cn\u0022);\n\t\thtml(\u0022\u003cinput class\u003d'txt' type\u003d'search' size\u003d'10' name\u003d'q' value\u003d'\u0022);\n\t\thtml_attr(ctx.qry.search);\n\t\thtml(\u0022'/\u003e\u005cn\u0022);\n\t\thtml(\u0022\u003cinput type\u003d'submit' value\u003d'search'/\u003e\u005cn\u0022);\n\t\thtml(\u0022\u003c/form\u003e\u005cn\u0022);\n\t} else if (ctx.env.authenticated) {\n\t\tchar *currenturl \u003d cgit_currenturl();\n\n\t\thtml(\u0022\u003ctd\u003e\u0022);\n\t\tsite_link(NULL, \u0022index\u0022, NULL, hc(\u0022repolist\u0022), NULL, NULL, 0, 1);\n\t\thtml(\u0022\u003c/td\u003e\u003ctd class\u003d'form'\u003e\u0022);\n\t\thtml(\u0022\u003cform method\u003d'get' action\u003d'\u0022);\n\t\thtml_attr(currenturl);\n\t\thtml(\u0022'\u003e\u005cn\u0022);\n\t\thtml(\u0022\u003cinput type\u003d'search' name\u003d'q' size\u003d'10' value\u003d'\u0022);\n\t\thtml_attr(ctx.qry.search);\n\t\thtml(\u0022'/\u003e\u005cn\u0022);\n\t\thtml(\u0022\u003cinput type\u003d'submit' value\u003d'search'/\u003e\u005cn\u0022);\n\t\thtml(\u0022\u003c/form\u003e\u0022);\n\t\tfree(currenturl);\n\t}\n\thtml(\u0022\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u005cn\u0022);\n\tif (ctx.env.authenticated \u0026\u0026 ctx.repo \u0026\u0026 ctx.qry.vpath) {\n\t\thtml(\u0022\u003cdiv class\u003d'path'\u003e\u0022);\n\t\thtml(\u0022path: \u0022);\n\t\tcgit_print_path_crumbs(ctx.qry.vpath);\n\t\tif (ctx.cfg.enable_follow_links \u0026\u0026 !strcmp(ctx.qry.page, \u0022log\u0022)) {\n\t\t\thtml(\u0022 (\u0022);\n\t\t\tctx.qry.follow \u003d !ctx.qry.follow;\n\t\t\tcgit_self_link(ctx.qry.follow ? \u0022follow\u0022 : \u0022unfollow\u0022,\n\t\t\t\t\tNULL, NULL);\n\t\t\tctx.qry.follow \u003d !ctx.qry.follow;\n\t\t\thtml(\u0022)\u0022);\n\t\t}\n\t\thtml(\u0022\u003c/div\u003e\u0022);\n\t}\n\thtml(\u0022\u003cdiv class\u003d'content'\u003e\u0022);\n}\n\nvoid cgit_print_filemode(unsigned short mode)\n{\n\tif (S_ISDIR(mode))\n\t\thtml(\u0022d\u0022);\n\telse if (S_ISLNK(mode))\n\t\thtml(\u0022l\u0022);\n\telse if (S_ISGITLINK(mode))\n\t\thtml(\u0022m\u0022);\n\telse\n\t\thtml(\u0022-\u0022);\n\thtml_fileperm(mode \u003e\u003e 6);\n\thtml_fileperm(mode \u003e\u003e 3);\n\thtml_fileperm(mode);\n}\n\nvoid cgit_compose_snapshot_prefix(struct strbuf *filename, const char *base,\n\t\t\t\t const char *ref)\n{\n\tstruct object_id oid;\n\n\t/*\n\t * Prettify snapshot names by stripping leading \u0022v\u0022 or \u0022V\u0022 if the tag\n\t * name starts with {v,V}[0-9] and the prettify mapping is injective,\n\t * i.e. each stripped tag can be inverted without ambiguities.\n\t */\n\tif (get_oid(fmt(\u0022refs/tags/%s\u0022, ref), \u0026oid) \u003d\u003d 0 \u0026\u0026\n\t (ref[0] \u003d\u003d 'v' || ref[0] \u003d\u003d 'V') \u0026\u0026 isdigit(ref[1]) \u0026\u0026\n\t ((get_oid(fmt(\u0022refs/tags/%s\u0022, ref + 1), \u0026oid) \u003d\u003d 0) +\n\t (get_oid(fmt(\u0022refs/tags/v%s\u0022, ref + 1), \u0026oid) \u003d\u003d 0) +\n\t (get_oid(fmt(\u0022refs/tags/V%s\u0022, ref + 1), \u0026oid) \u003d\u003d 0) \u003d\u003d 1))\n\t\tref++;\n\n\tstrbuf_addf(filename, \u0022%s-%s\u0022, base, ref);\n}\n\nvoid cgit_print_snapshot_links(const struct cgit_repo *repo, const char *ref,\n\t\t\t const char *separator)\n{\n\tconst struct cgit_snapshot_format* f;\n\tstruct strbuf filename \u003d STRBUF_INIT;\n\tconst char *basename;\n\tsize_t prefixlen;\n\n\tbasename \u003d cgit_snapshot_prefix(repo);\n\tif (starts_with(ref, basename))\n\t\tstrbuf_addstr(\u0026filename, ref);\n\telse\n\t\tcgit_compose_snapshot_prefix(\u0026filename, basename, ref);\n\n\tprefixlen \u003d filename.len;\n\tfor (f \u003d cgit_snapshot_formats; f-\u003esuffix; f++) {\n\t\tif (!(repo-\u003esnapshots \u0026 cgit_snapshot_format_bit(f)))\n\t\t\tcontinue;\n\t\tstrbuf_setlen(\u0026filename, prefixlen);\n\t\tstrbuf_addstr(\u0026filename, f-\u003esuffix);\n\t\tcgit_snapshot_link(filename.buf, NULL, NULL, NULL, NULL,\n\t\t\t\t filename.buf);\n\t\tif (cgit_snapshot_get_sig(ref, f)) {\n\t\t\tstrbuf_addstr(\u0026filename, \u0022.asc\u0022);\n\t\t\thtml(\u0022 (\u0022);\n\t\t\tcgit_snapshot_link(\u0022sig\u0022, NULL, NULL, NULL, NULL,\n\t\t\t\t\t filename.buf);\n\t\t\thtml(\u0022)\u0022);\n\t\t}\n\t\thtml(separator);\n\t}\n\tstrbuf_release(\u0026filename);\n}\n\nvoid cgit_set_title_from_path(const char *path)\n{\n\tsize_t path_len, path_index, path_last_end;\n\tchar *new_title;\n\n\tif (!path)\n\t\treturn;\n\n\tpath_len \u003d strlen(path);\n\tnew_title \u003d xmalloc(path_len + 3 + strlen(ctx.page.title) + 1);\n\tnew_title[0] \u003d '\u005c0';\n\n\tfor (path_index \u003d path_len, path_last_end \u003d path_len; path_index-- \u003e 0;) {\n\t\tif (path[path_index] \u003d\u003d '/') {\n\t\t\tif (path_index \u003d\u003d path_len - 1) {\n\t\t\t\tpath_last_end \u003d path_index - 1;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tstrncat(new_title, \u0026path[path_index + 1], path_last_end - path_index - 1);\n\t\t\tstrcat(new_title, \u0022\u005c\u005c\u0022);\n\t\t\tpath_last_end \u003d path_index;\n\t\t}\n\t}\n\tif (path_last_end)\n\t\tstrncat(new_title, path, path_last_end);\n\n\tstrcat(new_title, \u0022 - \u0022);\n\tstrcat(new_title, ctx.page.title);\n\tctx.page.title \u003d new_title;\n}\n","s":{"c":1678287425,"u": 995}}
,{"schema":"libjg2-1",
"cid":"62c68e44aa961be1d6a4b5c3af160f72",
"oid":{ "oid": "d1bb699526842f656f7afa799431003ab285dac2", "alias": [ "refs/heads/decruft","refs/heads/master"]},"blame": [
{"ord":0,"orig_oid":{ "oid": "5a106eb09b9b5e189b96cc736046a92b054f6c7f", "alias": []},
"final_oid":{ "oid": "5a106eb09b9b5e189b96cc736046a92b054f6c7f", "alias": []},
"sig_orig": { "git_time": { "time": 1165851510, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Move common output-functions into ui-shared.c",
"sig_final": { "git_time": { "time": 1165851510, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Move common output-functions into ui-shared.c",
"ranges": [
{"l": 2,"o": 1,"f": 1},
{"l": 6,"o": 4,"f": 4},
{"l": 1,"o": 10,"f": 14},
{"l": 3,"o": 14,"f": 17},
{"l": 1,"o": 18,"f": 21},
{"l": 1,"o": 20,"f": 23},
{"l": 2,"o": 22,"f": 25},
{"l": 3,"o": 25,"f": 28},
{"l": 1,"o": 37,"f": 32},
{"l": 1,"o": 38,"f": 42},
{"l": 2,"o": 40,"f": 46},
{"l": 1,"o": 43,"f": 723},
{"l": 1,"o": 48,"f": 747},
{"l": 1,"o": 49,"f": 800},
{"l": 2,"o": 51,"f": 802},
{"l": 1,"o": 54,"f": 805},
{"l": 2,"o": 59,"f": 841},
{"l": 2,"o": 61,"f": 846},
{"l": 1,"o": 64,"f": 849},
{"l": 2,"o": 66,"f": 959},
{"l": 1,"o": 69,"f": 1004},
{"l": 1,"o": 76,"f": 1154}]},
{"ord":1,"orig_oid":{ "oid": "74620f12e4f7e91cb0a0b4ca731e07272d1b65f6", "alias": []},
"final_oid":{ "oid": "74620f12e4f7e91cb0a0b4ca731e07272d1b65f6", "alias": []},
"sig_orig": { "git_time": { "time": 1165852083, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Move functions for repolist output into ui-repolist.c",
"sig_final": { "git_time": { "time": 1165852083, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Move functions for repolist output into ui-repolist.c",
"ranges": [
{"l": 1,"o": 42,"f": 48},
{"l": 2,"o": 43,"f": 96},
{"l": 2,"o": 50,"f": 102},
{"l": 1,"o": 54,"f": 106},
{"l": 1,"o": 58,"f": 114},
{"l": 1,"o": 60,"f": 118},
{"l": 2,"o": 61,"f": 122}]},
{"ord":2,"orig_oid":{ "oid": "148fb9622c6a96021e572d1a372e38896506031f", "alias": []},
"final_oid":{ "oid": "148fb9622c6a96021e572d1a372e38896506031f", "alias": []},
"sig_orig": { "git_time": { "time": 1166225608, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Move cgit_print_date into ui-shared, reuse in ui-summary",
"sig_final": { "git_time": { "time": 1166225608, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Move cgit_print_date into ui-shared, reuse in ui-summary",
"ranges": [
{"l": 1,"o": 63,"f": 328}]},
{"ord":3,"orig_oid":{ "oid": "e39d738c39d37cdef115c145027f3eec85a62272", "alias": []},
"final_oid":{ "oid": "e39d738c39d37cdef115c145027f3eec85a62272", "alias": []},
"sig_orig": { "git_time": { "time": 1167267709, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add generic support for search box in page header",
"sig_final": { "git_time": { "time": 1167267709, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add generic support for search box in page header",
"ranges": [
{"l": 1,"o": 132,"f": 1137}]},
{"ord":4,"orig_oid":{ "oid": "ab2ab95f09994560f62fd631f07d3b6e3577aa6e", "alias": []},
"final_oid":{ "oid": "ab2ab95f09994560f62fd631f07d3b6e3577aa6e", "alias": []},
"sig_orig": { "git_time": { "time": 1170939193, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add support for snapshots",
"sig_final": { "git_time": { "time": 1170939193, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add support for snapshots",
"ranges": [
{"l": 1,"o": 147,"f": 1155}]},
{"ord":5,"orig_oid":{ "oid": "66cacd053ba900c8eb3b7962027370c84a97f990", "alias": []},
"final_oid":{ "oid": "66cacd053ba900c8eb3b7962027370c84a97f990", "alias": []},
"sig_orig": { "git_time": { "time": 1171716378, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Layout update",
"sig_final": { "git_time": { "time": 1171716378, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Layout update",
"ranges": [
{"l": 1,"o": 44,"f": 81},
{"l": 1,"o": 47,"f": 84},
{"l": 2,"o": 49,"f": 86}]},
{"ord":6,"orig_oid":{ "oid": "6fb7d09fea94b3dd6932469283358cb24f1e7e29", "alias": []},
"final_oid":{ "oid": "6fb7d09fea94b3dd6932469283358cb24f1e7e29", "alias": []},
"sig_orig": { "git_time": { "time": 1179181323, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "ui-shared.c: fix whitespace breakage",
"sig_final": { "git_time": { "time": 1179181323, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "ui-shared.c: fix whitespace breakage",
"ranges": [
{"l": 1,"o": 17,"f": 20},
{"l": 1,"o": 19,"f": 22}]},
{"ord":7,"orig_oid":{ "oid": "5db39170b6c979655a0238dcd627e206febed88b", "alias": []},
"final_oid":{ "oid": "5db39170b6c979655a0238dcd627e206febed88b", "alias": []},
"sig_orig": { "git_time": { "time": 1179868126, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add cgit_print_age() function",
"sig_final": { "git_time": { "time": 1179868126, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add cgit_print_age() function",
"ranges": [
{"l": 3,"o": 102,"f": 680},
{"l": 2,"o": 105,"f": 685},
{"l": 2,"o": 107,"f": 689},
{"l": 4,"o": 110,"f": 696},
{"l": 3,"o": 116,"f": 701},
{"l": 3,"o": 121,"f": 705},
{"l": 3,"o": 126,"f": 709},
{"l": 3,"o": 131,"f": 713},
{"l": 2,"o": 136,"f": 717},
{"l": 2,"o": 140,"f": 720}]},
{"ord":8,"orig_oid":{ "oid": "44947bfcdc0d6e8c7d673bea0538cbf2a182f289", "alias": []},
"final_oid":{ "oid": "44947bfcdc0d6e8c7d673bea0538cbf2a182f289", "alias": []},
"sig_orig": { "git_time": { "time": 1182036188, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add and use cgit_tree_link()",
"sig_final": { "git_time": { "time": 1182036188, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add and use cgit_tree_link()",
"ranges": [
{"l": 15,"o": 92,"f": 263},
{"l": 1,"o": 113,"f": 282},
{"l": 1,"o": 118,"f": 289},
{"l": 1,"o": 120,"f": 291},
{"l": 1,"o": 123,"f": 294},
{"l": 2,"o": 128,"f": 301},
{"l": 2,"o": 131,"f": 304},
{"l": 5,"o": 134,"f": 307},
{"l": 3,"o": 141,"f": 315},
{"l": 2,"o": 146,"f": 320},
{"l": 5,"o": 149,"f": 323}]},
{"ord":9,"orig_oid":{ "oid": "48c487d72daef7e71683a85f775db8d36ab20341", "alias": []},
"final_oid":{ "oid": "48c487d72daef7e71683a85f775db8d36ab20341", "alias": []},
"sig_orig": { "git_time": { "time": 1182081471, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add git_log_link() and fix bug in generic repolink function",
"sig_final": { "git_time": { "time": 1182081471, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add git_log_link() and fix bug in generic repolink function",
"ranges": [
{"l": 1,"o": 144,"f": 318},
{"l": 4,"o": 157,"f": 343},
{"l": 1,"o": 163,"f": 363},
{"l": 2,"o": 165,"f": 400}]},
{"ord":10,"orig_oid":{ "oid": "42a7eb9c73457319a3fd5441ff26046fc9b31dad", "alias": []},
"final_oid":{ "oid": "42a7eb9c73457319a3fd5441ff26046fc9b31dad", "alias": []},
"sig_orig": { "git_time": { "time": 1182084782, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add cgit_commit_link() + support for id\u003dsha1 to commit view",
"sig_final": { "git_time": { "time": 1182084782, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add cgit_commit_link() + support for id\u003dsha1 to commit view",
"ranges": [
{"l": 1,"o": 169,"f": 404},
{"l": 2,"o": 177,"f": 444}]},
{"ord":11,"orig_oid":{ "oid": "4a0be586662843382ecfa53af34a13b291312bc0", "alias": []},
"final_oid":{ "oid": "4a0be586662843382ecfa53af34a13b291312bc0", "alias": []},
"sig_orig": { "git_time": { "time": 1182096723, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add cgit_diff_link()",
"sig_final": { "git_time": { "time": 1182096723, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add cgit_diff_link()",
"ranges": [
{"l": 4,"o": 181,"f": 462},
{"l": 2,"o": 186,"f": 467},
{"l": 5,"o": 189,"f": 470},
{"l": 1,"o": 195,"f": 488},
{"l": 5,"o": 196,"f": 498}]},
{"ord":12,"orig_oid":{ "oid": "b8be028a309381b83abe924f5e8e01cf02b121a2", "alias": []},
"final_oid":{ "oid": "b8be028a309381b83abe924f5e8e01cf02b121a2", "alias": []},
"sig_orig": { "git_time": { "time": 1182118722, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add more menuitems on repo pages",
"sig_final": { "git_time": { "time": 1182118722, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add more menuitems on repo pages",
"ranges": [
{"l": 1,"o": 114,"f": 283},
{"l": 2,"o": 116,"f": 285},
{"l": 1,"o": 119,"f": 288},
{"l": 1,"o": 126,"f": 295},
{"l": 2,"o": 128,"f": 297},
{"l": 1,"o": 131,"f": 300}]},
{"ord":13,"orig_oid":{ "oid": "f69250358a74efa5d7d9c562b2cdd80fad1430f1", "alias": []},
"final_oid":{ "oid": "f69250358a74efa5d7d9c562b2cdd80fad1430f1", "alias": []},
"sig_orig": { "git_time": { "time": 1182152530, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add version info from git-describe",
"sig_final": { "git_time": { "time": 1182152530, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add version info from git-describe",
"ranges": [
{"l": 1,"o": 265,"f": 806}]},
{"ord":14,"orig_oid":{ "oid": "103940fe6b0914dc42b8b033d1d328f38135ca5f", "alias": []},
"final_oid":{ "oid": "103940fe6b0914dc42b8b033d1d328f38135ca5f", "alias": []},
"sig_orig": { "git_time": { "time": 1183141661, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add ofs argument to cgit_log_link and use it in ui-log.c",
"sig_final": { "git_time": { "time": 1183141661, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add ofs argument to cgit_log_link and use it in ui-log.c",
"ranges": [
{"l": 3,"o": 168,"f": 364},
{"l": 2,"o": 172,"f": 368},
{"l": 1,"o": 176,"f": 372},
{"l": 4,"o": 177,"f": 382},
{"l": 4,"o": 181,"f": 396}]},
{"ord":15,"orig_oid":{ "oid": "0df096f6e146187e55e2203ea1c017442cc2c8c6", "alias": []},
"final_oid":{ "oid": "0df096f6e146187e55e2203ea1c017442cc2c8c6", "alias": []},
"sig_orig": { "git_time": { "time": 1185016420, "offset": 120 }, "name": "Michael Krelin", "email": "hacker@klever.net", "md5": "96e6a2a376fd5c88e7453a5f17728cb2" },
"log_orig": "added snapshot filename to the link",
"sig_final": { "git_time": { "time": 1185016420, "offset": 120 }, "name": "Michael Krelin", "email": "hacker@klever.net", "md5": "96e6a2a376fd5c88e7453a5f17728cb2" },
"log_final": "added snapshot filename to the link",
"ranges": [
{"l": 2,"o": 60,"f": 104},
{"l": 3,"o": 78,"f": 124},
{"l": 2,"o": 82,"f": 128},
{"l": 1,"o": 84,"f": 158}]},
{"ord":16,"orig_oid":{ "oid": "1cb8bedf1e0a4aa73bb8ad3f96bfa7eda50919b3", "alias": []},
"final_oid":{ "oid": "1cb8bedf1e0a4aa73bb8ad3f96bfa7eda50919b3", "alias": []},
"sig_orig": { "git_time": { "time": 1185024247, "offset": 120 }, "name": "Michael Krelin", "email": "hacker@klever.net", "md5": "96e6a2a376fd5c88e7453a5f17728cb2" },
"log_orig": "introduce cgit_repobasename",
"sig_final": { "git_time": { "time": 1185024247, "offset": 120 }, "name": "Michael Krelin", "email": "hacker@klever.net", "md5": "96e6a2a376fd5c88e7453a5f17728cb2" },
"log_final": "introduce cgit_repobasename",
"ranges": [
{"l": 1,"o": 85,"f": 132},
{"l": 1,"o": 107,"f": 157}]},
{"ord":17,"orig_oid":{ "oid": "4e9107abfe8d3edff17826875b417bcf40dc7390", "alias": []},
"final_oid":{ "oid": "4e9107abfe8d3edff17826875b417bcf40dc7390", "alias": []},
"sig_orig": { "git_time": { "time": 1185140575, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add ui-tag.c",
"sig_final": { "git_time": { "time": 1185140575, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add ui-tag.c",
"ranges": [
{"l": 2,"o": 221,"f": 577},
{"l": 1,"o": 224,"f": 580},
{"l": 1,"o": 225,"f": 584},
{"l": 1,"o": 228,"f": 587},
{"l": 1,"o": 230,"f": 589},
{"l": 1,"o": 233,"f": 593},
{"l": 2,"o": 243,"f": 596}]},
{"ord":18,"orig_oid":{ "oid": "eb45342e735818b3c68cbab9b61b23e79ae74418", "alias": []},
"final_oid":{ "oid": "eb45342e735818b3c68cbab9b61b23e79ae74418", "alias": []},
"sig_orig": { "git_time": { "time": 1185142275, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "cgit_print_snapshot_links: use url to specify snapshot name",
"sig_final": { "git_time": { "time": 1185142275, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "cgit_print_snapshot_links: use url to specify snapshot name",
"ranges": [
{"l": 4,"o": 232,"f": 455}]},
{"ord":19,"orig_oid":{ "oid": "ac1f493b6bbc589327e9ba3303f112fcd323c6b6", "alias": []},
"final_oid":{ "oid": "ac1f493b6bbc589327e9ba3303f112fcd323c6b6", "alias": []},
"sig_orig": { "git_time": { "time": 1193474864, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add links to the new refs page from summary page",
"sig_final": { "git_time": { "time": 1193474864, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add links to the new refs page from summary page",
"ranges": [
{"l": 4,"o": 232,"f": 448}]},
{"ord":20,"orig_oid":{ "oid": "fc5880fab8b9afc589aaadd1299c34a6ef2a3c2d", "alias": []},
"final_oid":{ "oid": "fc5880fab8b9afc589aaadd1299c34a6ef2a3c2d", "alias": []},
"sig_orig": { "git_time": { "time": 1193582447, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Teach cgit_object_link() about tag objects",
"sig_final": { "git_time": { "time": 1193582447, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Teach cgit_object_link() about tag objects",
"ranges": [
{"l": 1,"o": 276,"f": 591}]},
{"ord":21,"orig_oid":{ "oid": "0c8e184e9cbf4d3a1e907de9125f6d8210c169d6", "alias": []},
"final_oid":{ "oid": "0c8e184e9cbf4d3a1e907de9125f6d8210c169d6", "alias": []},
"sig_orig": { "git_time": { "time": 1193737658, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Change the cgit layout",
"sig_final": { "git_time": { "time": 1193737658, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Change the cgit layout",
"ranges": [
{"l": 2,"o": 366,"f": 869},
{"l": 2,"o": 370,"f": 923},
{"l": 3,"o": 373,"f": 926},
{"l": 1,"o": 416,"f": 931},
{"l": 2,"o": 422,"f": 940},
{"l": 1,"o": 426,"f": 945},
{"l": 2,"o": 431,"f": 952},
{"l": 1,"o": 437,"f": 958}]},
{"ord":22,"orig_oid":{ "oid": "51140311bb3b0d4d0e859d5045ffe4c74478f5fe", "alias": []},
"final_oid":{ "oid": "51140311bb3b0d4d0e859d5045ffe4c74478f5fe", "alias": []},
"sig_orig": { "git_time": { "time": 1194082957, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add search parameters to cgit_log_link",
"sig_final": { "git_time": { "time": 1194082957, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add search parameters to cgit_log_link",
"ranges": [
{"l": 3,"o": 208,"f": 373},
{"l": 2,"o": 213,"f": 378},
{"l": 1,"o": 216,"f": 381}]},
{"ord":23,"orig_oid":{ "oid": "68cf9b4f853177544a5d1c7b4a9eea4d2f5749d5", "alias": []},
"final_oid":{ "oid": "68cf9b4f853177544a5d1c7b4a9eea4d2f5749d5", "alias": []},
"sig_orig": { "git_time": { "time": 1194084956, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Fix search form action/hidden fields",
"sig_final": { "git_time": { "time": 1194084956, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Fix search form action/hidden fields",
"ranges": [
{"l": 2,"o": 64,"f": 108},
{"l": 1,"o": 69,"f": 113},
{"l": 1,"o": 75,"f": 119}]},
{"ord":24,"orig_oid":{ "oid": "fc4c4ba3a99f4fe4bd8a42caca902269d2e0b678", "alias": []},
"final_oid":{ "oid": "fc4c4ba3a99f4fe4bd8a42caca902269d2e0b678", "alias": []},
"sig_orig": { "git_time": { "time": 1196629895, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Handle missing timestamp in commit/tag objects",
"sig_final": { "git_time": { "time": 1196629895, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Handle missing timestamp in commit/tag objects",
"ranges": [
{"l": 2,"o": 318,"f": 683}]},
{"ord":25,"orig_oid":{ "oid": "620bb3e5e4ff87da740fe7232ba74330b5f862d4", "alias": []},
"final_oid":{ "oid": "620bb3e5e4ff87da740fe7232ba74330b5f862d4", "alias": []},
"sig_orig": { "git_time": { "time": 1197319649, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add plain patch view",
"sig_final": { "git_time": { "time": 1197319649, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add plain patch view",
"ranges": [
{"l": 1,"o": 277,"f": 505},
{"l": 2,"o": 279,"f": 507}]},
{"ord":26,"orig_oid":{ "oid": "d14d77fe95c3b6224b40df9b101dded0deea913c", "alias": []},
"final_oid":{ "oid": "d14d77fe95c3b6224b40df9b101dded0deea913c", "alias": []},
"sig_orig": { "git_time": { "time": 1203159220, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Introduce struct cgit_context",
"sig_final": { "git_time": { "time": 1203159220, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Introduce struct cgit_context",
"ranges": [
{"l": 1,"o": 395,"f": 925},
{"l": 1,"o": 450,"f": 944},
{"l": 4,"o": 452,"f": 946},
{"l": 4,"o": 458,"f": 954}]},
{"ord":27,"orig_oid":{ "oid": "b228d4ff82a65fdcd4a7364759fe36a0bdda5978", "alias": []},
"final_oid":{ "oid": "b228d4ff82a65fdcd4a7364759fe36a0bdda5978", "alias": []},
"sig_orig": { "git_time": { "time": 1203163633, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add all config variables into struct cgit_context",
"sig_final": { "git_time": { "time": 1203163633, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add all config variables into struct cgit_context",
"ranges": [
{"l": 1,"o": 45,"f": 82},
{"l": 1,"o": 48,"f": 85},
{"l": 1,"o": 66,"f": 110},
{"l": 1,"o": 140,"f": 278},
{"l": 1,"o": 442,"f": 932}]},
{"ord":28,"orig_oid":{ "oid": "d1f3bbe9d22029f45a77bb938c176ccc0c827d46", "alias": []},
"final_oid":{ "oid": "d1f3bbe9d22029f45a77bb938c176ccc0c827d46", "alias": []},
"sig_orig": { "git_time": { "time": 1203166569, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Move cgit_repo into cgit_context",
"sig_final": { "git_time": { "time": 1203166569, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Move cgit_repo into cgit_context",
"ranges": [
{"l": 1,"o": 145,"f": 281},
{"l": 1,"o": 157,"f": 293}]},
{"ord":29,"orig_oid":{ "oid": "b1f9b9c1459cb9a30ebf80721aff6ef788d1f891", "alias": []},
"final_oid":{ "oid": "b1f9b9c1459cb9a30ebf80721aff6ef788d1f891", "alias": []},
"sig_orig": { "git_time": { "time": 1203803133, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Introduce html.h",
"sig_final": { "git_time": { "time": 1203803133, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Introduce html.h",
"ranges": [
{"l": 1,"o": 10,"f": 12},
{"l": 15,"o": 571,"f": 1156}]},
{"ord":30,"orig_oid":{ "oid": "f3c1a187fe2bc33f8423cd535d5045899699995b", "alias": []},
"final_oid":{ "oid": "f3c1a187fe2bc33f8423cd535d5045899699995b", "alias": []},
"sig_orig": { "git_time": { "time": 1206316279, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add struct cgit_page to cgit_context",
"sig_final": { "git_time": { "time": 1206316279, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add struct cgit_page to cgit_context",
"ranges": [
{"l": 2,"o": 369,"f": 750},
{"l": 1,"o": 372,"f": 791}]},
{"ord":31,"orig_oid":{ "oid": "f34478cbe0214a201e7ecef3e79ed6c957b7beee", "alias": []},
"final_oid":{ "oid": "f34478cbe0214a201e7ecef3e79ed6c957b7beee", "alias": []},
"sig_orig": { "git_time": { "time": 1206370827, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Refactor snapshot support",
"sig_final": { "git_time": { "time": 1206370827, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Refactor snapshot support",
"ranges": [
{"l": 2,"o": 578,"f": 1193},
{"l": 1,"o": 581,"f": 1198},
{"l": 1,"o": 582,"f": 1206},
{"l": 1,"o": 584,"f": 1208},
{"l": 1,"o": 590,"f": 1221},
{"l": 1,"o": 591,"f": 1223}]},
{"ord":32,"orig_oid":{ "oid": "f135569b2be3fb1816f802f9a162b3743b735d1c", "alias": []},
"final_oid":{ "oid": "f135569b2be3fb1816f802f9a162b3743b735d1c", "alias": []},
"sig_orig": { "git_time": { "time": 1208008411, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Replace sidebar/logo",
"sig_final": { "git_time": { "time": 1208008411, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Replace sidebar/logo",
"ranges": [
{"l": 1,"o": 10,"f": 11},
{"l": 1,"o": 470,"f": 962},
{"l": 2,"o": 472,"f": 967},
{"l": 2,"o": 478,"f": 1007},
{"l": 1,"o": 485,"f": 1029},
{"l": 1,"o": 498,"f": 1066},
{"l": 1,"o": 520,"f": 1138},
{"l": 1,"o": 521,"f": 1153}]},
{"ord":33,"orig_oid":{ "oid": "7c0d2d9fbd3a29d295c8067f7798507853759eae", "alias": []},
"final_oid":{ "oid": "7c0d2d9fbd3a29d295c8067f7798507853759eae", "alias": []},
"sig_orig": { "git_time": { "time": 1208023181, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add fixed link to index page from repo header",
"sig_final": { "git_time": { "time": 1208023181, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add fixed link to index page from repo header",
"ranges": [
{"l": 1,"o": 494,"f": 1038}]},
{"ord":34,"orig_oid":{ "oid": "931fc6d1e4986a4566647dda16af09bf69a28b89", "alias": []},
"final_oid":{ "oid": "931fc6d1e4986a4566647dda16af09bf69a28b89", "alias": []},
"sig_orig": { "git_time": { "time": 1208077031, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "More layout fixes",
"sig_final": { "git_time": { "time": 1208077031, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "More layout fixes",
"ranges": [
{"l": 1,"o": 488,"f": 1028},
{"l": 1,"o": 511,"f": 1041},
{"l": 1,"o": 524,"f": 1057},
{"l": 2,"o": 546,"f": 1101},
{"l": 1,"o": 551,"f": 1109},
{"l": 1,"o": 553,"f": 1111},
{"l": 1,"o": 557,"f": 1116},
{"l": 3,"o": 560,"f": 1119}]},
{"ord":35,"orig_oid":{ "oid": "536b0541fcfea2169e4df33043cd9ff14c657bce", "alias": []},
"final_oid":{ "oid": "536b0541fcfea2169e4df33043cd9ff14c657bce", "alias": []},
"sig_orig": { "git_time": { "time": 1208080630, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Implement minimal freetext search in the repolist",
"sig_final": { "git_time": { "time": 1208080630, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Implement minimal freetext search in the repolist",
"ranges": [
{"l": 2,"o": 567,"f": 1127},
{"l": 1,"o": 570,"f": 1130},
{"l": 3,"o": 573,"f": 1133}]},
{"ord":36,"orig_oid":{ "oid": "3cfcb086abfc2e94426623b487a47a8b5cc57b7e", "alias": []},
"final_oid":{ "oid": "3cfcb086abfc2e94426623b487a47a8b5cc57b7e", "alias": []},
"sig_orig": { "git_time": { "time": 1208210411, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Cleanup page header",
"sig_final": { "git_time": { "time": 1208210411, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Cleanup page header",
"ranges": [
{"l": 1,"o": 505,"f": 1040},
{"l": 1,"o": 511,"f": 1052},
{"l": 1,"o": 515,"f": 1058}]},
{"ord":37,"orig_oid":{ "oid": "71adba1f1678914063fc109cf3805afde2c68f75", "alias": []},
"final_oid":{ "oid": "71adba1f1678914063fc109cf3805afde2c68f75", "alias": []},
"sig_orig": { "git_time": { "time": 1209424181, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add 'about site' and 'about repo' pages",
"sig_final": { "git_time": { "time": 1209424181, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add 'about site' and 'about repo' pages",
"ranges": [
{"l": 3,"o": 118,"f": 169},
{"l": 3,"o": 127,"f": 179},
{"l": 5,"o": 131,"f": 183},
{"l": 3,"o": 136,"f": 199},
{"l": 13,"o": 141,"f": 204},
{"l": 5,"o": 155,"f": 218}]},
{"ord":38,"orig_oid":{ "oid": "141f1c3eb657470e81bbf998f44f9723f9009def", "alias": []},
"final_oid":{ "oid": "141f1c3eb657470e81bbf998f44f9723f9009def", "alias": []},
"sig_orig": { "git_time": { "time": 1209803822, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add cgit_index_link() function with support for offset",
"sig_final": { "git_time": { "time": 1209803822, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add cgit_index_link() function with support for offset",
"ranges": [
{"l": 1,"o": 137,"f": 189},
{"l": 3,"o": 138,"f": 196},
{"l": 1,"o": 167,"f": 225},
{"l": 2,"o": 169,"f": 227}]},
{"ord":39,"orig_oid":{ "oid": "17890d0058c1555133c8767ceb123e809e6971ab", "alias": []},
"final_oid":{ "oid": "17890d0058c1555133c8767ceb123e809e6971ab", "alias": []},
"sig_orig": { "git_time": { "time": 1209811460, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add link to index page from repo header, remove page name",
"sig_final": { "git_time": { "time": 1209811460, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add link to index page from repo header, remove page name",
"ranges": [
{"l": 1,"o": 549,"f": 1032}]},
{"ord":40,"orig_oid":{ "oid": "b2a3d31e8839b53a623b4c99124c2c637d0e3cbb", "alias": []},
"final_oid":{ "oid": "b2a3d31e8839b53a623b4c99124c2c637d0e3cbb", "alias": []},
"sig_orig": { "git_time": { "time": 1211350674, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add atom-support",
"sig_final": { "git_time": { "time": 1211350674, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add atom-support",
"ranges": [
{"l": 1,"o": 38,"f": 58},
{"l": 2,"o": 50,"f": 66},
{"l": 1,"o": 470,"f": 836}]},
{"ord":41,"orig_oid":{ "oid": "de5e9281719809c5b07051faa88e95bd16e8d485", "alias": []},
"final_oid":{ "oid": "de5e9281719809c5b07051faa88e95bd16e8d485", "alias": []},
"sig_orig": { "git_time": { "time": 1214481210, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add support for including a footer on all pages",
"sig_final": { "git_time": { "time": 1214481210, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add support for including a footer on all pages",
"ranges": [
{"l": 3,"o": 447,"f": 857},
{"l": 1,"o": 454,"f": 866},
{"l": 1,"o": 455,"f": 868}]},
{"ord":42,"orig_oid":{ "oid": "502865a5ec40fed5f1f865cb34002aecaab8405e", "alias": []},
"final_oid":{ "oid": "502865a5ec40fed5f1f865cb34002aecaab8405e", "alias": []},
"sig_orig": { "git_time": { "time": 1216492830, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add a favicon option to cgitrc",
"sig_final": { "git_time": { "time": 1216492830, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add a favicon option to cgitrc",
"ranges": [
{"l": 1,"o": 441,"f": 818},
{"l": 2,"o": 443,"f": 820}]},
{"ord":43,"orig_oid":{ "oid": "2d6ee032d0c2f84ebcfaa12d3289e85cfab18fcd", "alias": []},
"final_oid":{ "oid": "2d6ee032d0c2f84ebcfaa12d3289e85cfab18fcd", "alias": []},
"sig_orig": { "git_time": { "time": 1217154136, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "ui-shared: show repo owner along with description",
"sig_final": { "git_time": { "time": 1217154136, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "ui-shared: show repo owner along with description",
"ranges": [
{"l": 1,"o": 575,"f": 1042},
{"l": 1,"o": 578,"f": 1050}]},
{"ord":44,"orig_oid":{ "oid": "25c84326deff579d5de4b880f9dca2690bdc8569", "alias": []},
"final_oid":{ "oid": "25c84326deff579d5de4b880f9dca2690bdc8569", "alias": []},
"sig_orig": { "git_time": { "time": 1217154728, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Be prepared for empty repositories",
"sig_final": { "git_time": { "time": 1217154728, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Be prepared for empty repositories",
"ranges": [
{"l": 2,"o": 521,"f": 942}]},
{"ord":45,"orig_oid":{ "oid": "65b7b876aaaf50fc15060533359d6561f4f1819a", "alias": []},
"final_oid":{ "oid": "65b7b876aaaf50fc15060533359d6561f4f1819a", "alias": []},
"sig_orig": { "git_time": { "time": 1218013633, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "ui-tree: link to plain view instead of blob view",
"sig_final": { "git_time": { "time": 1218013633, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "ui-tree: link to plain view instead of blob view",
"ranges": [
{"l": 4,"o": 248,"f": 349}]},
{"ord":46,"orig_oid":{ "oid": "b575115d9d93e45cdbcd5d066cc445d34639ae6a", "alias": []},
"final_oid":{ "oid": "b575115d9d93e45cdbcd5d066cc445d34639ae6a", "alias": []},
"sig_orig": { "git_time": { "time": 1223203945, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "ui-shared.c: use html_url_arg()",
"sig_final": { "git_time": { "time": 1223203945, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "ui-shared.c: use html_url_arg()",
"ranges": [
{"l": 1,"o": 224,"f": 292},
{"l": 1,"o": 228,"f": 296},
{"l": 1,"o": 231,"f": 299},
{"l": 1,"o": 238,"f": 306},
{"l": 1,"o": 253,"f": 322},
{"l": 1,"o": 281,"f": 370},
{"l": 1,"o": 287,"f": 376},
{"l": 1,"o": 291,"f": 380},
{"l": 1,"o": 336,"f": 469},
{"l": 1,"o": 342,"f": 475}]},
{"ord":47,"orig_oid":{ "oid": "44b208aa44c4cdf7e1e339bbd5b028c23da55a46", "alias": []},
"final_oid":{ "oid": "44b208aa44c4cdf7e1e339bbd5b028c23da55a46", "alias": []},
"sig_orig": { "git_time": { "time": 1223218484, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "ui-shared.c: use html_url_path() in repolink()",
"sig_final": { "git_time": { "time": 1223218484, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "ui-shared.c: use html_url_path() in repolink()",
"ranges": [
{"l": 1,"o": 209,"f": 279},
{"l": 1,"o": 212,"f": 280},
{"l": 1,"o": 216,"f": 284},
{"l": 1,"o": 219,"f": 287}]},
{"ord":48,"orig_oid":{ "oid": "e9d3bd544fe94ba5ade9ccf185328fcc2414814b", "alias": []},
"final_oid":{ "oid": "e9d3bd544fe94ba5ade9ccf185328fcc2414814b", "alias": []},
"sig_orig": { "git_time": { "time": 1223218550, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "ui-shared.c: add cgit_summary_link()",
"sig_final": { "git_time": { "time": 1223218550, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "ui-shared.c: add cgit_summary_link()",
"ranges": [
{"l": 4,"o": 261,"f": 331}]},
{"ord":49,"orig_oid":{ "oid": "8b5fc6de036cf159ffa61a55158044749bd6f4d9", "alias": []},
"final_oid":{ "oid": "8b5fc6de036cf159ffa61a55158044749bd6f4d9", "alias": []},
"sig_orig": { "git_time": { "time": 1223233928, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "ui-shared: generate proper links in cgit_object_link()",
"sig_final": { "git_time": { "time": 1223233928, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "ui-shared: generate proper links in cgit_object_link()",
"ranges": [
{"l": 1,"o": 368,"f": 588},
{"l": 1,"o": 370,"f": 590},
{"l": 1,"o": 372,"f": 592}]},
{"ord":50,"orig_oid":{ "oid": "cf61ad411c41a774c9671651704bdeb78ccc1036", "alias": []},
"final_oid":{ "oid": "cf61ad411c41a774c9671651704bdeb78ccc1036", "alias": []},
"sig_orig": { "git_time": { "time": 1223234325, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "ui-shared: add cgit_tag_link()",
"sig_final": { "git_time": { "time": 1223234325, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "ui-shared: add cgit_tag_link()",
"ranges": [
{"l": 1,"o": 267,"f": 337},
{"l": 2,"o": 269,"f": 339}]},
{"ord":51,"orig_oid":{ "oid": "0274b57d55a12ed38259757dbfae96b79cfa2e0b", "alias": []},
"final_oid":{ "oid": "0274b57d55a12ed38259757dbfae96b79cfa2e0b", "alias": []},
"sig_orig": { "git_time": { "time": 1227980381, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "ui-log: add support for showing the full commit message",
"sig_final": { "git_time": { "time": 1227980381, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "ui-log: add support for showing the full commit message",
"ranges": [
{"l": 4,"o": 310,"f": 387},
{"l": 2,"o": 577,"f": 950}]},
{"ord":52,"orig_oid":{ "oid": "c57aceb1d2f1a7d9fd3218fc8c6e9ea01b2952d2", "alias": []},
"final_oid":{ "oid": "c57aceb1d2f1a7d9fd3218fc8c6e9ea01b2952d2", "alias": []},
"sig_orig": { "git_time": { "time": 1228165139, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "ui-shared: shorten the sha1 printed by cgit_object_link",
"sig_final": { "git_time": { "time": 1228165139, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "ui-shared: shorten the sha1 printed by cgit_object_link",
"ranges": [
{"l": 1,"o": 368,"f": 579},
{"l": 2,"o": 371,"f": 582},
{"l": 1,"o": 384,"f": 595}]},
{"ord":53,"orig_oid":{ "oid": "eaf2d25c162534efe7566119cf4b1cbeab217b51", "alias": []},
"final_oid":{ "oid": "eaf2d25c162534efe7566119cf4b1cbeab217b51", "alias": []},
"sig_orig": { "git_time": { "time": 1228653256, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "ui-shared: add and use cgit_stats_link()",
"sig_final": { "git_time": { "time": 1228653256, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "ui-shared: add and use cgit_stats_link()",
"ranges": [
{"l": 4,"o": 368,"f": 511}]},
{"ord":54,"orig_oid":{ "oid": "c3c925f4eca3e863bedaae4cfe237c3ad52092b6", "alias": []},
"final_oid":{ "oid": "c3c925f4eca3e863bedaae4cfe237c3ad52092b6", "alias": []},
"sig_orig": { "git_time": { "time": 1228661555, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "ui-shared: externalize add_hidden_formfields()",
"sig_final": { "git_time": { "time": 1228661555, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "ui-shared: externalize add_hidden_formfields()",
"ranges": [
{"l": 1,"o": 663,"f": 1110}]},
{"ord":55,"orig_oid":{ "oid": "0cbb50841ac82e08e715bbff614f96c7d5ba22fa", "alias": []},
"final_oid":{ "oid": "0cbb50841ac82e08e715bbff614f96c7d5ba22fa", "alias": []},
"sig_orig": { "git_time": { "time": 1232663636, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add support for an 'embedded' option in cgitrc",
"sig_final": { "git_time": { "time": 1232663636, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add support for an 'embedded' option in cgitrc",
"ranges": [
{"l": 2,"o": 460,"f": 725},
{"l": 1,"o": 480,"f": 797},
{"l": 1,"o": 481,"f": 799}]},
{"ord":56,"orig_oid":{ "oid": "3ff58ddd51bcbcbc9b7649bad1a39aa98af4b49f", "alias": []},
"final_oid":{ "oid": "3ff58ddd51bcbcbc9b7649bad1a39aa98af4b49f", "alias": []},
"sig_orig": { "git_time": { "time": 1235082255, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add support for HEAD requests",
"sig_final": { "git_time": { "time": 1235082255, "offset": 60 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add support for HEAD requests",
"ranges": [
{"l": 1,"o": 477,"f": 749}]},
{"ord":57,"orig_oid":{ "oid": "b5a3a2049648415e86d518a8bf2229b3e463b10f", "alias": []},
"final_oid":{ "oid": "b5a3a2049648415e86d518a8bf2229b3e463b10f", "alias": []},
"sig_orig": { "git_time": { "time": 1237090314, "offset": -240 }, "name": "Mark Lodato", "email": "lodatom@gmail.com", "md5": "2ba36f553521381741fcc3f87a48ba04" },
"log_orig": "Add head-include configuration option.",
"sig_final": { "git_time": { "time": 1237090314, "offset": -240 }, "name": "Mark Lodato", "email": "lodatom@gmail.com", "md5": "2ba36f553521381741fcc3f87a48ba04" },
"log_final": "Add head-include configuration option.",
"ranges": [
{"l": 1,"o": 499,"f": 833}]},
{"ord":58,"orig_oid":{ "oid": "87a89aed41136d388537b146000c4af6c1135a8c", "alias": []},
"final_oid":{ "oid": "87a89aed41136d388537b146000c4af6c1135a8c", "alias": []},
"sig_orig": { "git_time": { "time": 1244675395, "offset": -300 }, "name": "Diego Ongaro", "email": "ongardie@gmail.com", "md5": "056effcac7fca237926f57ba2450429a" },
"log_orig": "add cgit_httpscheme() -\u003e http:// or https://",
"sig_final": { "git_time": { "time": 1244675395, "offset": -300 }, "name": "Diego Ongaro", "email": "ongardie@gmail.com", "md5": "056effcac7fca237926f57ba2450429a" },
"log_final": "add cgit_httpscheme() -\u003e http:// or https://",
"ranges": [
{"l": 1,"o": 38,"f": 50},
{"l": 5,"o": 43,"f": 52}]},
{"ord":59,"orig_oid":{ "oid": "694dd43886f23723f415aed3afb62131cdbcaa51", "alias": []},
"final_oid":{ "oid": "694dd43886f23723f415aed3afb62131cdbcaa51", "alias": []},
"sig_orig": { "git_time": { "time": 1244675914, "offset": -300 }, "name": "Diego Ongaro", "email": "ongardie@gmail.com", "md5": "056effcac7fca237926f57ba2450429a" },
"log_orig": "use cgit_httpscheme() for atom feed",
"sig_final": { "git_time": { "time": 1244675914, "offset": -300 }, "name": "Diego Ongaro", "email": "ongardie@gmail.com", "md5": "056effcac7fca237926f57ba2450429a" },
"log_final": "use cgit_httpscheme() for atom feed",
"ranges": [
{"l": 2,"o": 506,"f": 827}]},
{"ord":60,"orig_oid":{ "oid": "6421dc38db02eff8d3ada93e87a2f7e5292af131", "alias": []},
"final_oid":{ "oid": "6421dc38db02eff8d3ada93e87a2f7e5292af131", "alias": []},
"sig_orig": { "git_time": { "time": 1246325271, "offset": -240 }, "name": "Matthew Metnetsky", "email": "mimetnet@vidu.us", "md5": "e627ca9309b37a2c4514c201114b359d" },
"log_orig": "ui-shared: don't print header \u003cimg/\u003e if there isn't a logo defined",
"sig_final": { "git_time": { "time": 1246325271, "offset": -240 }, "name": "Matthew Metnetsky", "email": "mimetnet@vidu.us", "md5": "e627ca9309b37a2c4514c201114b359d" },
"log_final": "ui-shared: don't print header \u003cimg/\u003e if there isn't a logo defined",
"ranges": [
{"l": 1,"o": 614,"f": 1009},
{"l": 1,"o": 616,"f": 1019},
{"l": 3,"o": 619,"f": 1022},
{"l": 2,"o": 623,"f": 1026}]},
{"ord":61,"orig_oid":{ "oid": "ef0c6aadf70e33ef63f0a68ca16338a49d0a3f1f", "alias": []},
"final_oid":{ "oid": "ef0c6aadf70e33ef63f0a68ca16338a49d0a3f1f", "alias": []},
"sig_orig": { "git_time": { "time": 1248517171, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Add support for 'noheader' option",
"sig_final": { "git_time": { "time": 1248517171, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Add support for 'noheader' option",
"ranges": [
{"l": 2,"o": 656,"f": 1059},
{"l": 1,"o": 659,"f": 1062},
{"l": 1,"o": 665,"f": 1063}]},
{"ord":62,"orig_oid":{ "oid": "60a26272e0ca529407fe6b613f061f04ba585d53", "alias": []},
"final_oid":{ "oid": "60a26272e0ca529407fe6b613f061f04ba585d53", "alias": []},
"sig_orig": { "git_time": { "time": 1249885269, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "Cleanup handling of environment variables",
"sig_final": { "git_time": { "time": 1249885269, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "Cleanup handling of environment variables",
"ranges": [
{"l": 1,"o": 39,"f": 51},
{"l": 1,"o": 47,"f": 59},
{"l": 3,"o": 49,"f": 61}]},
{"ord":63,"orig_oid":{ "oid": "80550bbe028b551550395653d32a0ba50db540ef", "alias": []},
"final_oid":{ "oid": "80550bbe028b551550395653d32a0ba50db540ef", "alias": []},
"sig_orig": { "git_time": { "time": 1249978355, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "ui-shared: add support for header/footer options when embedded\u003d1",
"sig_final": { "git_time": { "time": 1249978355, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "ui-shared: add support for header/footer options when embedded\u003d1",
"ranges": [
{"l": 1,"o": 488,"f": 798},
{"l": 7,"o": 526,"f": 850},
{"l": 1,"o": 541,"f": 867}]},
{"ord":64,"orig_oid":{ "oid": "c358aa3dfebf4fc1f3005dd960aa5c1c020eed76", "alias": []},
"final_oid":{ "oid": "c358aa3dfebf4fc1f3005dd960aa5c1c020eed76", "alias": []},
"sig_orig": { "git_time": { "time": 1252952342, "offset": 120 }, "name": "Ragnar Ouchterlony", "email": "ragnar@lysator.liu.se", "md5": "d9021075b016923822353d13dd1f14cd" },
"log_orig": "Add possibility to switch between unidiff and side-by-side-diff.",
"sig_final": { "git_time": { "time": 1252952342, "offset": 120 }, "name": "Ragnar Ouchterlony", "email": "ragnar@lysator.liu.se", "md5": "d9021075b016923822353d13dd1f14cd" },
"log_final": "Add possibility to switch between unidiff and side-by-side-diff.",
"ranges": [
{"l": 5,"o": 333,"f": 409},
{"l": 1,"o": 339,"f": 415},
{"l": 1,"o": 341,"f": 424},
{"l": 1,"o": 342,"f": 434},
{"l": 1,"o": 344,"f": 443},
{"l": 2,"o": 376,"f": 476},
{"l": 1,"o": 379,"f": 479}]},
{"ord":65,"orig_oid":{ "oid": "e34a3b5adc00255f8acb7d674e5fdadef2ac80f7", "alias": []},
"final_oid":{ "oid": "e34a3b5adc00255f8acb7d674e5fdadef2ac80f7", "alias": []},
"sig_orig": { "git_time": { "time": 1257196204, "offset": 60 }, "name": "Danijel Tašov", "email": "dt@korn.shell.la", "md5": "02d18fd1eb2005b469ee217ae9a1da93" },
"log_orig": "Nov is the correct abbreviation",
"sig_final": { "git_time": { "time": 1257196204, "offset": 60 }, "name": "Danijel Tašov", "email": "dt@korn.shell.la", "md5": "02d18fd1eb2005b469ee217ae9a1da93" },
"log_final": "Nov is the correct abbreviation",
"ranges": [
{"l": 1,"o": 23,"f": 24}]},
{"ord":66,"orig_oid":{ "oid": "8d946079c5f51ce934ff5edf6333962c6061d8a5", "alias": []},
"final_oid":{ "oid": "8d946079c5f51ce934ff5edf6333962c6061d8a5", "alias": []},
"sig_orig": { "git_time": { "time": 1265043337, "offset": 60 }, "name": "Florian Pritz", "email": "bluewind@xinu.at", "md5": "d8ecf642fe5df0aadd2fbdc83c4f3058" },
"log_orig": "ui-shared.c: fix segfault when repo is empty",
"sig_final": { "git_time": { "time": 1265043337, "offset": 60 }, "name": "Florian Pritz", "email": "bluewind@xinu.at", "md5": "d8ecf642fe5df0aadd2fbdc83c4f3058" },
"log_final": "ui-shared.c: fix segfault when repo is empty",
"ranges": [
{"l": 1,"o": 249,"f": 319},
{"l": 1,"o": 349,"f": 466}]},
{"ord":67,"orig_oid":{ "oid": "c3f23d4571c06c979eddbd4c973163ba76c7e50f", "alias": []},
"final_oid":{ "oid": "c3f23d4571c06c979eddbd4c973163ba76c7e50f", "alias": []},
"sig_orig": { "git_time": { "time": 1276124964, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_orig": "ui-shared: Improve const-ness in API",
"sig_final": { "git_time": { "time": 1276124964, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_final": "ui-shared: Improve const-ness in API",
"ranges": [
{"l": 1,"o": 163,"f": 202},
{"l": 1,"o": 184,"f": 223},
{"l": 2,"o": 190,"f": 261},
{"l": 3,"o": 243,"f": 312},
{"l": 2,"o": 260,"f": 329},
{"l": 1,"o": 266,"f": 335},
{"l": 2,"o": 272,"f": 341},
{"l": 2,"o": 278,"f": 347},
{"l": 2,"o": 284,"f": 359},
{"l": 2,"o": 349,"f": 446},
{"l": 3,"o": 355,"f": 452},
{"l": 2,"o": 362,"f": 459},
{"l": 1,"o": 390,"f": 503},
{"l": 2,"o": 396,"f": 509},
{"l": 2,"o": 617,"f": 929}]},
{"ord":68,"orig_oid":{ "oid": "c8e3295469bd3b8e38a9ea4478d517d3861e6c93", "alias": []},
"final_oid":{ "oid": "c8e3295469bd3b8e38a9ea4478d517d3861e6c93", "alias": []},
"sig_orig": { "git_time": { "time": 1276124967, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_orig": "ui-shared: Replace ctx.qry.path with ctx.qry.vpath",
"sig_final": { "git_time": { "time": 1276124967, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_final": "ui-shared: Replace ctx.qry.path with ctx.qry.vpath",
"ranges": [
{"l": 1,"o": 624,"f": 936}]},
{"ord":69,"orig_oid":{ "oid": "c93ef96aaf77437abeb552bd9e30973f90365f3a", "alias": []},
"final_oid":{ "oid": "c93ef96aaf77437abeb552bd9e30973f90365f3a", "alias": []},
"sig_orig": { "git_time": { "time": 1276124968, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_orig": "ui-shared: Display path limit directly beneath tab bar in relevant pages",
"sig_final": { "git_time": { "time": 1276124968, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_final": "ui-shared: Display path limit directly beneath tab bar in relevant pages",
"ranges": [
{"l": 2,"o": 761,"f": 1140},
{"l": 2,"o": 764,"f": 1151}]},
{"ord":70,"orig_oid":{ "oid": "24fd7e54c82294efa68ecae5dd9cb8a8986c04bf", "alias": []},
"final_oid":{ "oid": "24fd7e54c82294efa68ecae5dd9cb8a8986c04bf", "alias": []},
"sig_orig": { "git_time": { "time": 1276124969, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_orig": "ui-shared: Teach \u0022breadcrumb\u0022 navigation to path limit display beneath tab bar",
"sig_final": { "git_time": { "time": 1276124969, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_final": "ui-shared: Teach \u0022breadcrumb\u0022 navigation to path limit display beneath tab bar",
"ranges": [
{"l": 2,"o": 458,"f": 575},
{"l": 1,"o": 712,"f": 970},
{"l": 2,"o": 714,"f": 972},
{"l": 5,"o": 719,"f": 977},
{"l": 4,"o": 725,"f": 983},
{"l": 2,"o": 730,"f": 988}]},
{"ord":71,"orig_oid":{ "oid": "eac1b675414722ae90df75abc727b2795bc096f0", "alias": []},
"final_oid":{ "oid": "eac1b675414722ae90df75abc727b2795bc096f0", "alias": []},
"sig_orig": { "git_time": { "time": 1276124973, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_orig": "ui-patch: Apply path limit to generated patch",
"sig_final": { "git_time": { "time": 1276124973, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_final": "ui-patch: Apply path limit to generated patch",
"ranges": [
{"l": 1,"o": 391,"f": 504},
{"l": 1,"o": 393,"f": 506}]},
{"ord":72,"orig_oid":{ "oid": "685872b770be2af643d00365d5358e46687f7385", "alias": []},
"final_oid":{ "oid": "685872b770be2af643d00365d5358e46687f7385", "alias": []},
"sig_orig": { "git_time": { "time": 1276124975, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_orig": "ui-commit: Preserve path limit in links to commit page",
"sig_final": { "git_time": { "time": 1276124975, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_final": "ui-commit: Preserve path limit in links to commit page",
"ranges": [
{"l": 1,"o": 334,"f": 407}]},
{"ord":73,"orig_oid":{ "oid": "d20313e3daf855ee5d4808e050f54614c200d7b1", "alias": []},
"final_oid":{ "oid": "d20313e3daf855ee5d4808e050f54614c200d7b1", "alias": []},
"sig_orig": { "git_time": { "time": 1276193751, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_orig": "ui-diff: Add links to increase/decrease number of context lines in diffs",
"sig_final": { "git_time": { "time": 1276193751, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_final": "ui-diff: Add links to increase/decrease number of context lines in diffs",
"ranges": [
{"l": 7,"o": 344,"f": 417},
{"l": 7,"o": 392,"f": 481}]},
{"ord":74,"orig_oid":{ "oid": "72ef913514288bd2aae23509581097bfd3edf8c4", "alias": []},
"final_oid":{ "oid": "72ef913514288bd2aae23509581097bfd3edf8c4", "alias": []},
"sig_orig": { "git_time": { "time": 1277394800, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_orig": "ui-diff: Add link to ignore/show whitespace changes in diffs",
"sig_final": { "git_time": { "time": 1277394800, "offset": 120 }, "name": "Johan Herland", "email": "johan@herland.net", "md5": "4eae9ea38e17516c22cd8b2bac66810f" },
"log_final": "ui-diff: Add link to ignore/show whitespace changes in diffs",
"ranges": [
{"l": 5,"o": 352,"f": 425},
{"l": 5,"o": 405,"f": 489}]},
{"ord":75,"orig_oid":{ "oid": "808c685ebb7cd2d24d3881b74e3be2439bd1393b", "alias": []},
"final_oid":{ "oid": "808c685ebb7cd2d24d3881b74e3be2439bd1393b", "alias": []},
"sig_orig": { "git_time": { "time": 1293104874, "offset": 60 }, "name": "Bernhard Reutner-Fischer", "email": "rep.dot.nop@gmail.com", "md5": "0f39ed3bcad52ef2c88c90062b7714dc" },
"log_orig": "implement repo.logo and repo.logo-link",
"sig_final": { "git_time": { "time": 1293104874, "offset": 60 }, "name": "Bernhard Reutner-Fischer", "email": "rep.dot.nop@gmail.com", "md5": "0f39ed3bcad52ef2c88c90062b7714dc" },
"log_final": "implement repo.logo and repo.logo-link",
"ranges": [
{"l": 2,"o": 759,"f": 1005},
{"l": 1,"o": 766,"f": 1012},
{"l": 1,"o": 770,"f": 1016},
{"l": 1,"o": 772,"f": 1018},
{"l": 2,"o": 774,"f": 1020},
{"l": 1,"o": 779,"f": 1025}]},
{"ord":76,"orig_oid":{ "oid": "6857bec50a52340fa6b85d626f49d45dd331ed0e", "alias": []},
"final_oid":{ "oid": "6857bec50a52340fa6b85d626f49d45dd331ed0e", "alias": []},
"sig_orig": { "git_time": { "time": 1308125053, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_orig": "ui-tree.c: add support for path-selected submodule links",
"sig_final": { "git_time": { "time": 1308125053, "offset": 120 }, "name": "Lars Hjemli", "email": "hjemli@gmail.com", "md5": "3b0d25799af76340d36a521e61d1f464" },
"log_final": "ui-tree.c: add support for path-selected submodule links",
"ranges": [
{"l": 20,"o": 508,"f": 600},
{"l": 11,"o": 528,"f": 621},
{"l": 1,"o": 552,"f": 650},
{"l": 1,"o": 554,"f": 657},
{"l": 4,"o": 558,"f": 659}]},
{"ord":77,"orig_oid":{ "oid": "7530d94f05887b8065742adb614c368d8568a22c", "alias": []},
"final_oid":{ "oid": "7530d94f05887b8065742adb614c368d8568a22c", "alias": []},
"sig_orig": { "git_time": { "time": 1312073045, "offset": 120 }, "name": "Tobias Grimm", "email": "git@e-tobi.net", "md5": "6d47dd48a9536a91c21f6c15834f8ba0" },
"log_orig": "Add sort parameter to pager of repo list",
"sig_final": { "git_time": { "time": 1312073045, "offset": 120 }, "name": "Tobias Grimm", "email": "git@e-tobi.net", "md5": "6d47dd48a9536a91c21f6c15834f8ba0" },
"log_final": "Add sort parameter to pager of repo list",
"ranges": [
{"l": 4,"o": 157,"f": 190},
{"l": 1,"o": 162,"f": 195}]},
{"ord":78,"orig_oid":{ "oid": "21418ec42a9a2de4c2c22eca7a1183b311914eca", "alias": []},
"final_oid":{ "oid": "21418ec42a9a2de4c2c22eca7a1183b311914eca", "alias": []},
"sig_orig": { "git_time": { "time": 1325667711, "offset": 0 }, "name": "Eric Wong", "email": "normalperson@yhbt.net", "md5": "18813f71506ebad74179bf8c5a136696" },
"log_orig": "segfault fix on some bogus requests",
"sig_final": { "git_time": { "time": 1325667711, "offset": 0 }, "name": "Eric Wong", "email": "normalperson@yhbt.net", "md5": "18813f71506ebad74179bf8c5a136696" },
"log_final": "segfault fix on some bogus requests",
"ranges": [
{"l": 1,"o": 297,"f": 367},
{"l": 1,"o": 341,"f": 408}]},
{"ord":79,"orig_oid":{ "oid": "c366bd6fa88fb7dbe1e42c84d56e2bda0b1682c5", "alias": []},
"final_oid":{ "oid": "c366bd6fa88fb7dbe1e42c84d56e2bda0b1682c5", "alias": []},
"sig_orig": { "git_time": { "time": 1349808358, "offset": 120 }, "name": "William Bell", "email": "william.bell@frog.za.net", "md5": "b46e18fece9f152b09ad1b32eb382ddd" },
"log_orig": "ui: Remember to print ampersand as proper html entities.",
"sig_final": { "git_time": { "time": 1349808358, "offset": 120 }, "name": "William Bell", "email": "william.bell@frog.za.net", "md5": "b46e18fece9f152b09ad1b32eb382ddd" },
"log_final": "ui: Remember to print ampersand as proper html entities.",
"ranges": [
{"l": 1,"o": 86,"f": 117},
{"l": 1,"o": 149,"f": 182},
{"l": 1,"o": 155,"f": 188},
{"l": 1,"o": 161,"f": 194},
{"l": 1,"o": 301,"f": 371},
{"l": 1,"o": 307,"f": 377},
{"l": 1,"o": 316,"f": 386}]},
{"ord":80,"orig_oid":{ "oid": "fe1bb0e765883fa4149fba12daee81b6ae070de3", "alias": []},
"final_oid":{ "oid": "fe1bb0e765883fa4149fba12daee81b6ae070de3", "alias": []},
"sig_orig": { "git_time": { "time": 1351445768, "offset": 60 }, "name": "Christian Franke", "email": "nobody@nowhere.ws", "md5": "7d98527cf8d63a2c48b8620bb748f72e" },
"log_orig": "ui-shared: use placeholder for empty commit subject",
"sig_final": { "git_time": { "time": 1351445768, "offset": 60 }, "name": "Christian Franke", "email": "nobody@nowhere.ws", "md5": "7d98527cf8d63a2c48b8620bb748f72e" },
"log_final": "ui-shared: use placeholder for empty commit subject",
"ranges": [
{"l": 1,"o": 367,"f": 442}]},
{"ord":81,"orig_oid":{ "oid": "53bc747d311d18642fa3ad0cc0de34f3899ed1f4", "alias": []},
"final_oid":{ "oid": "53bc747d311d18642fa3ad0cc0de34f3899ed1f4", "alias": []},
"sig_orig": { "git_time": { "time": 1362323069, "offset": 60 }, "name": "Lukas Fleischer", "email": "lfleischer@lfos.de", "md5": "564a12abc584fef24e562ae9881c45bb" },
"log_orig": "Fix several whitespace errors",
"sig_final": { "git_time": { "time": 1362323069, "offset": 60 }, "name": "Lukas Fleischer", "email": "lfleischer@lfos.de", "md5": "564a12abc584fef24e562ae9881c45bb" },
"log_final": "Fix several whitespace errors",
"ranges": [
{"l": 1,"o": 26,"f": 27},
{"l": 1,"o": 502,"f": 585}]},
{"ord":82,"orig_oid":{ "oid": "bafab423f20bc1448b293842c235965e1681f07e", "alias": []},
"final_oid":{ "oid": "bafab423f20bc1448b293842c235965e1681f07e", "alias": []},
"sig_orig": { "git_time": { "time": 1362383553, "offset": 60 }, "name": "Lukas Fleischer", "email": "lfleischer@lfos.de", "md5": "564a12abc584fef24e562ae9881c45bb" },
"log_orig": "Mark several functions/variables static",
"sig_final": { "git_time": { "time": 1362383553, "offset": 60 }, "name": "Lukas Fleischer", "email": "lfleischer@lfos.de", "md5": "564a12abc584fef24e562ae9881c45bb" },
"log_final": "Mark several functions/variables static",
"ranges": [
{"l": 2,"o": 515,"f": 598},
{"l": 1,"o": 720,"f": 922}]},
{"ord":83,"orig_oid":{ "oid": "6d8a789d61f3a682bc040f1f7f44050b1f723546", "alias": []},
"final_oid":{ "oid": "6d8a789d61f3a682bc040f1f7f44050b1f723546", "alias": []},
"sig_orig": { "git_time": { "time": 1362603114, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: fix return type of cgit_self_link",
"sig_final": { "git_time": { "time": 1362603114, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: fix return type of cgit_self_link",
"ranges": [
{"l": 2,"o": 484,"f": 566},
{"l": 1,"o": 487,"f": 569},
{"l": 4,"o": 489,"f": 571}]},
{"ord":84,"orig_oid":{ "oid": "40e1d9b6177558bf4069c09ca6d8e3a682baa988", "alias": []},
"final_oid":{ "oid": "40e1d9b6177558bf4069c09ca6d8e3a682baa988", "alias": []},
"sig_orig": { "git_time": { "time": 1363808593, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_orig": "ui-shared: squelch compiler warning.",
"sig_final": { "git_time": { "time": 1363808593, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_final": "ui-shared: squelch compiler warning.",
"ranges": [
{"l": 1,"o": 526,"f": 620}]},
{"ord":85,"orig_oid":{ "oid": "b1f17f168b91d709c0c0e62608de301a36f06da9", "alias": []},
"final_oid":{ "oid": "b1f17f168b91d709c0c0e62608de301a36f06da9", "alias": []},
"sig_orig": { "git_time": { "time": 1364839414, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "Fix out-of-bounds memory accesses with virtual_root\u003d\u0022\u0022",
"sig_final": { "git_time": { "time": 1364839414, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "Fix out-of-bounds memory accesses with virtual_root\u003d\u0022\u0022",
"ranges": [
{"l": 1,"o": 60,"f": 83}]},
{"ord":86,"orig_oid":{ "oid": "fb3655df3bf85bd405c5921bbd4b3a54c705c839", "alias": []},
"final_oid":{ "oid": "fb3655df3bf85bd405c5921bbd4b3a54c705c839", "alias": []},
"sig_orig": { "git_time": { "time": 1365240537, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "use struct strbuf instead of static buffers",
"sig_final": { "git_time": { "time": 1365240537, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "use struct strbuf instead of static buffers",
"ranges": [
{"l": 1,"o": 65,"f": 65},
{"l": 4,"o": 78,"f": 98},
{"l": 1,"o": 87,"f": 107},
{"l": 2,"o": 91,"f": 111},
{"l": 2,"o": 95,"f": 115},
{"l": 2,"o": 100,"f": 120},
{"l": 1,"o": 564,"f": 658},
{"l": 1,"o": 680,"f": 824},
{"l": 1,"o": 682,"f": 826},
{"l": 1,"o": 689,"f": 834},
{"l": 3,"o": 732,"f": 933},
{"l": 3,"o": 736,"f": 937},
{"l": 1,"o": 933,"f": 1195},
{"l": 1,"o": 934,"f": 1197},
{"l": 1,"o": 941,"f": 1205},
{"l": 4,"o": 945,"f": 1209},
{"l": 1,"o": 951,"f": 1222}]},
{"ord":87,"orig_oid":{ "oid": "ed5bd30ebe6921dd22948a3f33a314283f043606", "alias": []},
"final_oid":{ "oid": "ed5bd30ebe6921dd22948a3f33a314283f043606", "alias": []},
"sig_orig": { "git_time": { "time": 1365243832, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "Convert cgit_print_error to a variadic function",
"sig_final": { "git_time": { "time": 1365243832, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "Convert cgit_print_error to a variadic function",
"ranges": [
{"l": 1,"o": 31,"f": 31},
{"l": 9,"o": 33,"f": 33},
{"l": 3,"o": 43,"f": 43}]},
{"ord":88,"orig_oid":{ "oid": "8f208794318f83826e98168b8b430f2d9a68bcce", "alias": []},
"final_oid":{ "oid": "8f208794318f83826e98168b8b430f2d9a68bcce", "alias": []},
"sig_orig": { "git_time": { "time": 1365244679, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "Always #include corresponding .h in .c files",
"sig_final": { "git_time": { "time": 1365244679, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "Always #include corresponding .h in .c files",
"ranges": [
{"l": 1,"o": 10,"f": 10}]},
{"ord":89,"orig_oid":{ "oid": "a45030f8ee10bc97ffcf1bf0061a2e6f22c7252a", "alias": []},
"final_oid":{ "oid": "a45030f8ee10bc97ffcf1bf0061a2e6f22c7252a", "alias": []},
"sig_orig": { "git_time": { "time": 1389555916, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: URL-escape script_name",
"sig_final": { "git_time": { "time": 1389555916, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: URL-escape script_name",
"ranges": [
{"l": 1,"o": 222,"f": 290}]},
{"ord":90,"orig_oid":{ "oid": "d6e9200cc35411f3f27426b608bcfdef9348e6d3", "alias": []},
"final_oid":{ "oid": "d6e9200cc35411f3f27426b608bcfdef9348e6d3", "alias": []},
"sig_orig": { "git_time": { "time": 1389732571, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_orig": "auth: add basic authentication filter framework",
"sig_final": { "git_time": { "time": 1389732571, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_final": "auth: add basic authentication filter framework",
"ranges": [
{"l": 1,"o": 645,"f": 742},
{"l": 1,"o": 820,"f": 1035},
{"l": 1,"o": 828,"f": 1037}]},
{"ord":91,"orig_oid":{ "oid": "f60ffa143cca61e9729ac71033e1a556cf422871", "alias": []},
"final_oid":{ "oid": "f60ffa143cca61e9729ac71033e1a556cf422871", "alias": []},
"sig_orig": { "git_time": { "time": 1389819195, "offset": 60 }, "name": "Lukas Fleischer", "email": "lfleischer@lfos.de", "md5": "564a12abc584fef24e562ae9881c45bb" },
"log_orig": "Switch to exclusively using global ctx",
"sig_final": { "git_time": { "time": 1389819195, "offset": 60 }, "name": "Lukas Fleischer", "email": "lfleischer@lfos.de", "md5": "564a12abc584fef24e562ae9881c45bb" },
"log_final": "Switch to exclusively using global ctx",
"ranges": [
{"l": 4,"o": 439,"f": 515},
{"l": 3,"o": 444,"f": 520},
{"l": 8,"o": 449,"f": 525},
{"l": 5,"o": 457,"f": 537},
{"l": 3,"o": 463,"f": 543},
{"l": 15,"o": 467,"f": 547},
{"l": 3,"o": 483,"f": 563},
{"l": 1,"o": 488,"f": 568},
{"l": 1,"o": 490,"f": 570},
{"l": 1,"o": 634,"f": 722},
{"l": 1,"o": 636,"f": 724},
{"l": 9,"o": 639,"f": 727},
{"l": 1,"o": 651,"f": 741},
{"l": 4,"o": 653,"f": 743},
{"l": 1,"o": 658,"f": 748},
{"l": 1,"o": 662,"f": 790},
{"l": 3,"o": 664,"f": 794},
{"l": 1,"o": 675,"f": 804},
{"l": 2,"o": 678,"f": 807},
{"l": 1,"o": 683,"f": 817},
{"l": 1,"o": 685,"f": 819},
{"l": 1,"o": 688,"f": 822},
{"l": 1,"o": 690,"f": 825},
{"l": 2,"o": 700,"f": 839},
{"l": 2,"o": 704,"f": 843},
{"l": 1,"o": 769,"f": 961},
{"l": 1,"o": 771,"f": 966},
{"l": 1,"o": 774,"f": 969},
{"l": 1,"o": 776,"f": 971},
{"l": 3,"o": 779,"f": 974},
{"l": 1,"o": 787,"f": 982},
{"l": 1,"o": 792,"f": 987},
{"l": 1,"o": 795,"f": 1003},
{"l": 2,"o": 802,"f": 1010},
{"l": 3,"o": 805,"f": 1013},
{"l": 1,"o": 809,"f": 1017},
{"l": 1,"o": 822,"f": 1030},
{"l": 2,"o": 825,"f": 1033},
{"l": 1,"o": 837,"f": 1039},
{"l": 1,"o": 841,"f": 1043},
{"l": 1,"o": 844,"f": 1051},
{"l": 2,"o": 846,"f": 1053},
{"l": 1,"o": 854,"f": 1061},
{"l": 2,"o": 857,"f": 1064},
{"l": 1,"o": 861,"f": 1068},
{"l": 6,"o": 862,"f": 1076},
{"l": 1,"o": 871,"f": 1089},
{"l": 1,"o": 873,"f": 1091},
{"l": 3,"o": 875,"f": 1093},
{"l": 4,"o": 890,"f": 1112},
{"l": 1,"o": 896,"f": 1118},
{"l": 1,"o": 900,"f": 1122},
{"l": 1,"o": 910,"f": 1132},
{"l": 1,"o": 919,"f": 1142}]},
{"ord":92,"orig_oid":{ "oid": "a431326e8fab8153905fbde036dd3c9fb4cc8eaa", "alias": []},
"final_oid":{ "oid": "a431326e8fab8153905fbde036dd3c9fb4cc8eaa", "alias": []},
"sig_orig": { "git_time": { "time": 1389910914, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_orig": "auth: have cgit calculate login address",
"sig_final": { "git_time": { "time": 1389910914, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_final": "auth: have cgit calculate login address",
"ranges": [
{"l": 1,"o": 77,"f": 89},
{"l": 5,"o": 79,"f": 91}]},
{"ord":93,"orig_oid":{ "oid": "bb3cc0d9666553608b7c89aef84d21d3312ce488", "alias": []},
"final_oid":{ "oid": "bb3cc0d9666553608b7c89aef84d21d3312ce488", "alias": []},
"sig_orig": { "git_time": { "time": 1389969701, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_orig": "ui-shared: do not allow negative minutes",
"sig_final": { "git_time": { "time": 1389969701, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_final": "ui-shared: do not allow negative minutes",
"ranges": [
{"l": 2,"o": 599,"f": 687}]},
{"ord":94,"orig_oid":{ "oid": "bbfa006e6eb93d56842c1d90bbba1c5484afb855", "alias": []},
"final_oid":{ "oid": "bbfa006e6eb93d56842c1d90bbba1c5484afb855", "alias": []},
"sig_orig": { "git_time": { "time": 1406927657, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "Extract clone URL printing to ui-shared.c",
"sig_final": { "git_time": { "time": 1406927657, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "Extract clone URL printing to ui-shared.c",
"ranges": [
{"l": 2,"o": 730,"f": 896},
{"l": 1,"o": 734,"f": 900},
{"l": 2,"o": 754,"f": 908},
{"l": 10,"o": 757,"f": 911}]},
{"ord":95,"orig_oid":{ "oid": "3c53ebfb57a5dba8fc65b2f99ebbfb6356666e34", "alias": []},
"final_oid":{ "oid": "3c53ebfb57a5dba8fc65b2f99ebbfb6356666e34", "alias": []},
"sig_orig": { "git_time": { "time": 1406927659, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: add rel-vcs microformat links to HTML header",
"sig_final": { "git_time": { "time": 1406927659, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: add rel-vcs microformat links to HTML header",
"ranges": [
{"l": 9,"o": 663,"f": 760},
{"l": 2,"o": 710,"f": 837}]},
{"ord":96,"orig_oid":{ "oid": "eeddb5bc0905d4728001a111a9b1eb60ecccf9bd", "alias": []},
"final_oid":{ "oid": "eeddb5bc0905d4728001a111a9b1eb60ecccf9bd", "alias": []},
"sig_orig": { "git_time": { "time": 1412503142, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: remove toggle_ssdiff arg to cgit_commit_link()",
"sig_final": { "git_time": { "time": 1412503142, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: remove toggle_ssdiff arg to cgit_commit_link()",
"ranges": [
{"l": 1,"o": 331,"f": 403},
{"l": 1,"o": 465,"f": 546},
{"l": 1,"o": 505,"f": 586},
{"l": 1,"o": 877,"f": 1090}]},
{"ord":97,"orig_oid":{ "oid": "03f537f1a134c8578ae4c16055596539fbbcc220", "alias": []},
"final_oid":{ "oid": "03f537f1a134c8578ae4c16055596539fbbcc220", "alias": []},
"sig_orig": { "git_time": { "time": 1412503143, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: remove toggle_ssdiff arg to cgit_diff_link()",
"sig_final": { "git_time": { "time": 1412503143, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: remove toggle_ssdiff arg to cgit_diff_link()",
"ranges": [
{"l": 1,"o": 388,"f": 461},
{"l": 1,"o": 481,"f": 562},
{"l": 1,"o": 879,"f": 1092}]},
{"ord":98,"orig_oid":{ "oid": "1830271c5958526425f92ae2b369646b54e3c370", "alias": []},
"final_oid":{ "oid": "1830271c5958526425f92ae2b369646b54e3c370", "alias": []},
"sig_orig": { "git_time": { "time": 1412503144, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "Change \u0022ss\u0022 diff flag to an enum",
"sig_final": { "git_time": { "time": 1412503144, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "Change \u0022ss\u0022 diff flag to an enum",
"ranges": [
{"l": 1,"o": 349,"f": 414},
{"l": 1,"o": 351,"f": 416},
{"l": 1,"o": 405,"f": 478},
{"l": 1,"o": 407,"f": 480}]},
{"ord":99,"orig_oid":{ "oid": "caed6cb27f1869b0590cab56fc3394762892d049", "alias": []},
"final_oid":{ "oid": "caed6cb27f1869b0590cab56fc3394762892d049", "alias": []},
"sig_orig": { "git_time": { "time": 1419083979, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: show absolute time in tooltip for relative dates",
"sig_final": { "git_time": { "time": 1419083979, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: show absolute time in tooltip for relative dates",
"ranges": [
{"l": 2,"o": 591,"f": 672},
{"l": 3,"o": 604,"f": 676}]},
{"ord":100,"orig_oid":{ "oid": "c422b9b3d5938a4d386533604d4c0dbedfcb2b6d", "alias": []},
"final_oid":{ "oid": "c422b9b3d5938a4d386533604d4c0dbedfcb2b6d", "alias": []},
"sig_orig": { "git_time": { "time": 1421360294, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "tag: reference with \u0022h\u0022 instead of \u0022id\u0022",
"sig_final": { "git_time": { "time": 1421360294, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "tag: reference with \u0022h\u0022 instead of \u0022id\u0022",
"ranges": [
{"l": 1,"o": 276,"f": 336},
{"l": 1,"o": 278,"f": 338},
{"l": 2,"o": 446,"f": 523}]},
{"ord":101,"orig_oid":{ "oid": "1a9e56607eae2df2f4522b41294d94cb09fc4e5c", "alias": []},
"final_oid":{ "oid": "1a9e56607eae2df2f4522b41294d94cb09fc4e5c", "alias": []},
"sig_orig": { "git_time": { "time": 1423127502, "offset": 60 }, "name": "Lukas Fleischer", "email": "lfleischer@lfos.de", "md5": "564a12abc584fef24e562ae9881c45bb" },
"log_orig": "ui-shared.c: Refactor add_clone_urls()",
"sig_final": { "git_time": { "time": 1423127502, "offset": 60 }, "name": "Lukas Fleischer", "email": "lfleischer@lfos.de", "md5": "564a12abc584fef24e562ae9881c45bb" },
"log_final": "ui-shared.c: Refactor add_clone_urls()",
"ranges": [
{"l": 2,"o": 754,"f": 898},
{"l": 7,"o": 757,"f": 901},
{"l": 1,"o": 766,"f": 910}]},
{"ord":102,"orig_oid":{ "oid": "db4b735464aa9a3a329494b7f042413a65e182f2", "alias": []},
"final_oid":{ "oid": "db4b735464aa9a3a329494b7f042413a65e182f2", "alias": []},
"sig_orig": { "git_time": { "time": 1425399232, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_orig": "ui-shared: keep filter repolist page in pagination",
"sig_final": { "git_time": { "time": 1425399232, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_final": "ui-shared: keep filter repolist page in pagination",
"ranges": [
{"l": 1,"o": 150,"f": 173}]},
{"ord":103,"orig_oid":{ "oid": "6bcda2f73da605d48279341b1905c1b234a39368", "alias": []},
"final_oid":{ "oid": "6bcda2f73da605d48279341b1905c1b234a39368", "alias": []},
"sig_orig": { "git_time": { "time": 1425399522, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_orig": "ui-shared: Add current url helper function.",
"sig_final": { "git_time": { "time": 1425399522, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_final": "ui-shared: Add current url helper function.",
"ranges": [
{"l": 1,"o": 69,"f": 69},
{"l": 2,"o": 73,"f": 78}]},
{"ord":104,"orig_oid":{ "oid": "2e4a41e84029cbfa70c654fe5dfb35747f2dfbba", "alias": []},
"final_oid":{ "oid": "2e4a41e84029cbfa70c654fe5dfb35747f2dfbba", "alias": []},
"sig_orig": { "git_time": { "time": 1425399820, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_orig": "Make root handling sane again.",
"sig_final": { "git_time": { "time": 1425399820, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_final": "Make root handling sane again.",
"ranges": [
{"l": 1,"o": 150,"f": 168},
{"l": 1,"o": 154,"f": 172},
{"l": 1,"o": 182,"f": 203},
{"l": 1,"o": 196,"f": 217},
{"l": 1,"o": 203,"f": 224},
{"l": 1,"o": 205,"f": 226},
{"l": 1,"o": 449,"f": 519},
{"l": 1,"o": 878,"f": 1031},
{"l": 1,"o": 956,"f": 1126}]},
{"ord":105,"orig_oid":{ "oid": "db021a1989a52911557ce6b998c11fbe4a4bea9d", "alias": []},
"final_oid":{ "oid": "db021a1989a52911557ce6b998c11fbe4a4bea9d", "alias": []},
"sig_orig": { "git_time": { "time": 1425584505, "offset": 60 }, "name": "Lukas Fleischer", "email": "lfleischer@lfos.de", "md5": "564a12abc584fef24e562ae9881c45bb" },
"log_orig": "Remove no-op link from submodule entries",
"sig_final": { "git_time": { "time": 1425584505, "offset": 60 }, "name": "Lukas Fleischer", "email": "lfleischer@lfos.de", "md5": "564a12abc584fef24e562ae9881c45bb" },
"log_final": "Remove no-op link from submodule entries",
"ranges": [
{"l": 18,"o": 562,"f": 632},
{"l": 6,"o": 581,"f": 651}]},
{"ord":106,"orig_oid":{ "oid": "8eef4589d0ba80fd4e6a9ce2f3ca4fcf266a64e0", "alias": []},
"final_oid":{ "oid": "8eef4589d0ba80fd4e6a9ce2f3ca4fcf266a64e0", "alias": []},
"sig_orig": { "git_time": { "time": 1425814447, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_orig": "ui-shared: currenturl should take into account leading slash",
"sig_final": { "git_time": { "time": 1425814447, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_final": "ui-shared: currenturl should take into account leading slash",
"ranges": [
{"l": 2,"o": 72,"f": 70},
{"l": 3,"o": 74,"f": 75}]},
{"ord":107,"orig_oid":{ "oid": "e3d3fffdd447cdb4551549faae65bae5353a2cab", "alias": []},
"final_oid":{ "oid": "e3d3fffdd447cdb4551549faae65bae5353a2cab", "alias": []},
"sig_orig": { "git_time": { "time": 1425832336, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "Avoid non-ANSI function declarations",
"sig_final": { "git_time": { "time": 1425832336, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "Avoid non-ANSI function declarations",
"ranges": [
{"l": 1,"o": 49,"f": 49},
{"l": 1,"o": 75,"f": 80},
{"l": 1,"o": 83,"f": 88},
{"l": 1,"o": 738,"f": 848}]},
{"ord":108,"orig_oid":{ "oid": "0f23d4651c80170574c0ab2f091c0718150631ce", "alias": []},
"final_oid":{ "oid": "0f23d4651c80170574c0ab2f091c0718150631ce", "alias": []},
"sig_orig": { "git_time": { "time": 1425832342, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: make cgit_doctype 'static'",
"sig_final": { "git_time": { "time": 1425832342, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: make cgit_doctype 'static'",
"ranges": [
{"l": 1,"o": 14,"f": 15}]},
{"ord":109,"orig_oid":{ "oid": "94e5f212f55d3f4dd6ce83edb6db823de7eb8cc7", "alias": []},
"final_oid":{ "oid": "94e5f212f55d3f4dd6ce83edb6db823de7eb8cc7", "alias": []},
"sig_orig": { "git_time": { "time": 1425832344, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: avoid initializing static variable to zero",
"sig_final": { "git_time": { "time": 1425832344, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: avoid initializing static variable to zero",
"ranges": [
{"l": 1,"o": 85,"f": 90}]},
{"ord":110,"orig_oid":{ "oid": "d34b96719053ff9340519b64f6d970caaa64350d", "alias": []},
"final_oid":{ "oid": "d34b96719053ff9340519b64f6d970caaa64350d", "alias": []},
"sig_orig": { "git_time": { "time": 1425832345, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: don't use an integer as a NULL pointer",
"sig_final": { "git_time": { "time": 1425832345, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: don't use an integer as a NULL pointer",
"ranges": [
{"l": 1,"o": 122,"f": 127}]},
{"ord":111,"orig_oid":{ "oid": "de83de276bef7509ab8255682595ad4521f3a193", "alias": []},
"final_oid":{ "oid": "de83de276bef7509ab8255682595ad4521f3a193", "alias": []},
"sig_orig": { "git_time": { "time": 1438072921, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_orig": "git: update to v2.5.0",
"sig_final": { "git_time": { "time": 1438072921, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_final": "git: update to v2.5.0",
"ranges": [
{"l": 1,"o": 795,"f": 921}]},
{"ord":112,"orig_oid":{ "oid": "d7034806a4b1279f62d606501f831dcad31798e6", "alias": []},
"final_oid":{ "oid": "d7034806a4b1279f62d606501f831dcad31798e6", "alias": []},
"sig_orig": { "git_time": { "time": 1439383809, "offset": 120 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_orig": "about: always ensure page has a trailing slash",
"sig_final": { "git_time": { "time": 1439383809, "offset": 120 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_final": "about: always ensure page has a trailing slash",
"ranges": [
{"l": 3,"o": 692,"f": 752},
{"l": 2,"o": 698,"f": 758}]},
{"ord":113,"orig_oid":{ "oid": "30304d8156a72ffc95e45e1aa9407319b81bd253", "alias": []},
"final_oid":{ "oid": "30304d8156a72ffc95e45e1aa9407319b81bd253", "alias": []},
"sig_orig": { "git_time": { "time": 1439391328, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "log: allow users to follow a file",
"sig_final": { "git_time": { "time": 1439391328, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "log: allow users to follow a file",
"ranges": [
{"l": 2,"o": 306,"f": 361},
{"l": 5,"o": 336,"f": 391},
{"l": 4,"o": 382,"f": 430},
{"l": 4,"o": 442,"f": 494},
{"l": 1,"o": 486,"f": 542},
{"l": 1,"o": 962,"f": 1082},
{"l": 8,"o": 1010,"f": 1143}]},
{"ord":114,"orig_oid":{ "oid": "a360666df3cfcd1b384cd66b18803d72e3893b3d", "alias": []},
"final_oid":{ "oid": "a360666df3cfcd1b384cd66b18803d72e3893b3d", "alias": []},
"sig_orig": { "git_time": { "time": 1439465074, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: show full date in tooltip if longer ago than max_relative",
"sig_final": { "git_time": { "time": 1439465074, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: show full date in tooltip if longer ago than max_relative",
"ranges": [
{"l": 1,"o": 647,"f": 691},
{"l": 1,"o": 649,"f": 693},
{"l": 1,"o": 651,"f": 695}]},
{"ord":115,"orig_oid":{ "oid": "aec1204a54e3baa12c76db75c2f67696def05eb0", "alias": []},
"final_oid":{ "oid": "aec1204a54e3baa12c76db75c2f67696def05eb0", "alias": []},
"sig_orig": { "git_time": { "time": 1439552821, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: add cgit_print_error_page() function",
"sig_final": { "git_time": { "time": 1439552821, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: add cgit_print_error_page() function",
"ranges": [
{"l": 3,"o": 791,"f": 871},
{"l": 2,"o": 794,"f": 875},
{"l": 3,"o": 799,"f": 878},
{"l": 2,"o": 803,"f": 882}]},
{"ord":116,"orig_oid":{ "oid": "764987980ec0e806205b8e075feafd4e010dcbd9", "alias": []},
"final_oid":{ "oid": "764987980ec0e806205b8e075feafd4e010dcbd9", "alias": []},
"sig_orig": { "git_time": { "time": 1439552831, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: add cgit_print_layout_{start,end}()",
"sig_final": { "git_time": { "time": 1439552831, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: add cgit_print_layout_{start,end}()",
"ranges": [
{"l": 12,"o": 805,"f": 884}]},
{"ord":117,"orig_oid":{ "oid": "c5975ae56684a1188637f2bdba7d8e18de075abc", "alias": []},
"final_oid":{ "oid": "c5975ae56684a1188637f2bdba7d8e18de075abc", "alias": []},
"sig_orig": { "git_time": { "time": 1439552842, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: cache errors for \u0022dynamic TTL\u0022",
"sig_final": { "git_time": { "time": 1439552842, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: cache errors for \u0022dynamic TTL\u0022",
"ranges": [
{"l": 1,"o": 794,"f": 874}]},
{"ord":118,"orig_oid":{ "oid": "37fce9916a264e23c0639df56ca3ecbbdc1c84b8", "alias": []},
"final_oid":{ "oid": "37fce9916a264e23c0639df56ca3ecbbdc1c84b8", "alias": []},
"sig_orig": { "git_time": { "time": 1444389346, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_orig": "ui-shared: fix resource leak: free allocation from cgit_fileurl",
"sig_final": { "git_time": { "time": 1444389346, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_final": "ui-shared: fix resource leak: free allocation from cgit_fileurl",
"ranges": [
{"l": 1,"o": 749,"f": 823},
{"l": 3,"o": 756,"f": 830},
{"l": 1,"o": 761,"f": 835},
{"l": 6,"o": 1003,"f": 1103}]},
{"ord":119,"orig_oid":{ "oid": "c5c0eb873e0b9e40ffc3e85b621310ee85059ceb", "alias": []},
"final_oid":{ "oid": "c5c0eb873e0b9e40ffc3e85b621310ee85059ceb", "alias": []},
"sig_orig": { "git_time": { "time": 1444389347, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_orig": "ui-shared: return value of cgit_currenturl is not const",
"sig_final": { "git_time": { "time": 1444389347, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_final": "ui-shared: return value of cgit_currenturl is not const",
"ranges": [
{"l": 1,"o": 68,"f": 68}]},
{"ord":120,"orig_oid":{ "oid": "3e244a0ccaef8303302a2c462f36b8bdf3634a46", "alias": []},
"final_oid":{ "oid": "3e244a0ccaef8303302a2c462f36b8bdf3634a46", "alias": []},
"sig_orig": { "git_time": { "time": 1444389348, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_orig": "ui-shared: fix resource leak: free allocation from cgit_currenturl",
"sig_final": { "git_time": { "time": 1444389348, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_final": "ui-shared: fix resource leak: free allocation from cgit_currenturl",
"ranges": [
{"l": 5,"o": 160,"f": 174},
{"l": 1,"o": 1026,"f": 1123},
{"l": 1,"o": 1033,"f": 1129},
{"l": 1,"o": 1040,"f": 1136}]},
{"ord":121,"orig_oid":{ "oid": "f77e2a8cfaf07b25ddedd57348a1d957b048bbf5", "alias": []},
"final_oid":{ "oid": "f77e2a8cfaf07b25ddedd57348a1d957b048bbf5", "alias": []},
"sig_orig": { "git_time": { "time": 1444389350, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_orig": "ui-shared: return value of cgit_hosturl is not const",
"sig_final": { "git_time": { "time": 1444389350, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_final": "ui-shared: return value of cgit_hosturl is not const",
"ranges": [
{"l": 1,"o": 57,"f": 57},
{"l": 1,"o": 60,"f": 60},
{"l": 1,"o": 64,"f": 64}]},
{"ord":122,"orig_oid":{ "oid": "6edfc1672cdc5eb0dfb0ff5db0ec1de1ec53415e", "alias": []},
"final_oid":{ "oid": "6edfc1672cdc5eb0dfb0ff5db0ec1de1ec53415e", "alias": []},
"sig_orig": { "git_time": { "time": 1444389351, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_orig": "ui-shared: fix resource leak: free allocation from cgit_hosturl",
"sig_final": { "git_time": { "time": 1444389351, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_final": "ui-shared: fix resource leak: free allocation from cgit_hosturl",
"ranges": [
{"l": 1,"o": 758,"f": 829},
{"l": 1,"o": 774,"f": 845}]},
{"ord":123,"orig_oid":{ "oid": "da1b89710f5eb25297a66613ff3130b2a31cb86a", "alias": []},
"final_oid":{ "oid": "da1b89710f5eb25297a66613ff3130b2a31cb86a", "alias": []},
"sig_orig": { "git_time": { "time": 1449966433, "offset": 60 }, "name": "Lukas Fleischer", "email": "lfleischer@lfos.de", "md5": "564a12abc584fef24e562ae9881c45bb" },
"log_orig": "Fix segmentation fault in hc()",
"sig_final": { "git_time": { "time": 1449966433, "offset": 60 }, "name": "Lukas Fleischer", "email": "lfleischer@lfos.de", "md5": "564a12abc584fef24e562ae9881c45bb" },
"log_final": "Fix segmentation fault in hc()",
"ranges": [
{"l": 3,"o": 892,"f": 963}]},
{"ord":124,"orig_oid":{ "oid": "559ab5ecc4445c8477ecf62c9fc97efa412dd562", "alias": []},
"final_oid":{ "oid": "559ab5ecc4445c8477ecf62c9fc97efa412dd562", "alias": []},
"sig_orig": { "git_time": { "time": 1451975933, "offset": 60 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_orig": "git: update to v2.7.0",
"sig_final": { "git_time": { "time": 1451975933, "offset": 60 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_final": "git: update to v2.7.0",
"ranges": [
{"l": 1,"o": 528,"f": 581}]},
{"ord":125,"orig_oid":{ "oid": "4291453ec30656c2f59645d8a74cf295ce0253a9", "alias": []},
"final_oid":{ "oid": "4291453ec30656c2f59645d8a74cf295ce0253a9", "alias": []},
"sig_orig": { "git_time": { "time": 1452777219, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_orig": "ui-shared: Avoid new line injection into redirect header",
"sig_final": { "git_time": { "time": 1452777219, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_final": "ui-shared: Avoid new line injection into redirect header",
"ranges": [
{"l": 3,"o": 712,"f": 755}]},
{"ord":126,"orig_oid":{ "oid": "513b3863d999f91b47d7e9f26710390db55f9463", "alias": []},
"final_oid":{ "oid": "513b3863d999f91b47d7e9f26710390db55f9463", "alias": []},
"sig_orig": { "git_time": { "time": 1452778117, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_orig": "ui-shared: prevent malicious filename from injecting headers",
"sig_final": { "git_time": { "time": 1452778117, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_final": "ui-shared: prevent malicious filename from injecting headers",
"ranges": [
{"l": 5,"o": 695,"f": 736}]},
{"ord":127,"orig_oid":{ "oid": "360af46fac6fe79ec1868141a6c34b4c6b732ba0", "alias": []},
"final_oid":{ "oid": "360af46fac6fe79ec1868141a6c34b4c6b732ba0", "alias": []},
"sig_orig": { "git_time": { "time": 1453231983, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: add cgit_date_mode()",
"sig_final": { "git_time": { "time": 1453231983, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: add cgit_date_mode()",
"ranges": [
{"l": 2,"o": 631,"f": 664},
{"l": 4,"o": 635,"f": 667}]},
{"ord":128,"orig_oid":{ "oid": "f2a901d2e1db5217d6890b26c6dc1ec119505d02", "alias": []},
"final_oid":{ "oid": "f2a901d2e1db5217d6890b26c6dc1ec119505d02", "alias": []},
"sig_orig": { "git_time": { "time": 1453231985, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui: show ages in the originator's timezone",
"sig_final": { "git_time": { "time": 1453231985, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui: show ages in the originator's timezone",
"ranges": [
{"l": 1,"o": 639,"f": 671},
{"l": 1,"o": 647,"f": 679},
{"l": 1,"o": 668,"f": 700},
{"l": 1,"o": 672,"f": 704},
{"l": 1,"o": 676,"f": 708},
{"l": 1,"o": 680,"f": 712},
{"l": 1,"o": 684,"f": 716},
{"l": 1,"o": 687,"f": 719}]},
{"ord":129,"orig_oid":{ "oid": "9c15f3c6954e43c5ffd36230e666eccf112803f2", "alias": []},
"final_oid":{ "oid": "9c15f3c6954e43c5ffd36230e666eccf112803f2", "alias": []},
"sig_orig": { "git_time": { "time": 1454943954, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "Avoid DATE_STRFTIME for long/short dates",
"sig_final": { "git_time": { "time": 1454943954, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "Avoid DATE_STRFTIME for long/short dates",
"ranges": [
{"l": 1,"o": 610,"f": 663},
{"l": 1,"o": 613,"f": 666},
{"l": 1,"o": 622,"f": 675},
{"l": 1,"o": 639,"f": 692},
{"l": 1,"o": 641,"f": 694},
{"l": 1,"o": 783,"f": 862}]},
{"ord":130,"orig_oid":{ "oid": "5f2664f13c90f083b827d8fafa6cfc01c0c4f513", "alias": []},
"final_oid":{ "oid": "5f2664f13c90f083b827d8fafa6cfc01c0c4f513", "alias": []},
"sig_orig": { "git_time": { "time": 1456153455, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_orig": "ui-shared: add homepage to tabs",
"sig_final": { "git_time": { "time": 1456153455, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_final": "ui-shared: add homepage to tabs",
"ranges": [
{"l": 3,"o": 1000,"f": 1096},
{"l": 1,"o": 1004,"f": 1100}]},
{"ord":131,"orig_oid":{ "oid": "c424b5cb0253d8b55d3932efa51aa703dab2bf40", "alias": []},
"final_oid":{ "oid": "c424b5cb0253d8b55d3932efa51aa703dab2bf40", "alias": []},
"sig_orig": { "git_time": { "time": 1456238132, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_orig": "tabs: do not use target\u003d_blank",
"sig_final": { "git_time": { "time": 1456238132, "offset": 60 }, "name": "Jason A. Donenfeld", "email": "Jason@zx2c4.com", "md5": "689e78dac56e3d77d7f74984912487d3" },
"log_final": "tabs: do not use target\u003d_blank",
"ranges": [
{"l": 1,"o": 1003,"f": 1099}]},
{"ord":132,"orig_oid":{ "oid": "80f12b3e7e43edcb06aea9811b790b16ca204c81", "alias": []},
"final_oid":{ "oid": "80f12b3e7e43edcb06aea9811b790b16ca204c81", "alias": []},
"sig_orig": { "git_time": { "time": 1462989009, "offset": 0 }, "name": "Juuso Lapinlampi", "email": "wub@partyvan.eu", "md5": "ede22b0e3ca9fb9273aa00a3e614335e" },
"log_orig": "ui-shared: Simplify cgit_print_error_page() logic",
"sig_final": { "git_time": { "time": 1462989009, "offset": 0 }, "name": "Juuso Lapinlampi", "email": "wub@partyvan.eu", "md5": "ede22b0e3ca9fb9273aa00a3e614335e" },
"log_final": "ui-shared: Simplify cgit_print_error_page() logic",
"ranges": [
{"l": 1,"o": 795,"f": 877},
{"l": 1,"o": 799,"f": 881}]},
{"ord":133,"orig_oid":{ "oid": "8d05b398bb1f4effcb59dddc62a3ea1f021f8631", "alias": []},
"final_oid":{ "oid": "8d05b398bb1f4effcb59dddc62a3ea1f021f8631", "alias": []},
"sig_orig": { "git_time": { "time": 1462989854, "offset": 0 }, "name": "Juuso Lapinlampi", "email": "wub@partyvan.eu", "md5": "ede22b0e3ca9fb9273aa00a3e614335e" },
"log_orig": "ui-shared: HTML-ize DOCTYPE and \u003chtml\u003e",
"sig_final": { "git_time": { "time": 1462989854, "offset": 0 }, "name": "Juuso Lapinlampi", "email": "wub@partyvan.eu", "md5": "ede22b0e3ca9fb9273aa00a3e614335e" },
"log_final": "ui-shared: HTML-ize DOCTYPE and \u003chtml\u003e",
"ranges": [
{"l": 1,"o": 15,"f": 16},
{"l": 1,"o": 725,"f": 801}]},
{"ord":134,"orig_oid":{ "oid": "9984e7ab49c59e49a0d7e62c3435e7133f7a53ec", "alias": []},
"final_oid":{ "oid": "9984e7ab49c59e49a0d7e62c3435e7133f7a53ec", "alias": []},
"sig_orig": { "git_time": { "time": 1464106518, "offset": 120 }, "name": "Lukas Fleischer", "email": "lfleischer@lfos.de", "md5": "564a12abc584fef24e562ae9881c45bb" },
"log_orig": "Avoid ambiguities when prettifying snapshot names",
"sig_final": { "git_time": { "time": 1464106518, "offset": 120 }, "name": "Lukas Fleischer", "email": "lfleischer@lfos.de", "md5": "564a12abc584fef24e562ae9881c45bb" },
"log_final": "Avoid ambiguities when prettifying snapshot names",
"ranges": [
{"l": 3,"o": 1072,"f": 1171},
{"l": 6,"o": 1076,"f": 1175},
{"l": 1,"o": 1083,"f": 1182},
{"l": 5,"o": 1087,"f": 1186}]},
{"ord":135,"orig_oid":{ "oid": "590ba455d694deaf2ec206510cf7f047ac365a96", "alias": []},
"final_oid":{ "oid": "590ba455d694deaf2ec206510cf7f047ac365a96", "alias": []},
"sig_orig": { "git_time": { "time": 1467788881, "offset": 0 }, "name": "Eric Wong", "email": "normalperson@yhbt.net", "md5": "18813f71506ebad74179bf8c5a136696" },
"log_orig": "ui-shared: fix segfault when defbranch is NULL",
"sig_final": { "git_time": { "time": 1467788881, "offset": 0 }, "name": "Eric Wong", "email": "normalperson@yhbt.net", "md5": "18813f71506ebad74179bf8c5a136696" },
"log_final": "ui-shared: fix segfault when defbranch is NULL",
"ranges": [
{"l": 1,"o": 256,"f": 303}]},
{"ord":136,"orig_oid":{ "oid": "bead27b730526e4501ebaeb3b7c1116cd09f7b93", "alias": []},
"final_oid":{ "oid": "bead27b730526e4501ebaeb3b7c1116cd09f7b93", "alias": []},
"sig_orig": { "git_time": { "time": 1470582810, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: fix decl-after-statement warnings",
"sig_final": { "git_time": { "time": 1470582810, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: fix decl-after-statement warnings",
"ranges": [
{"l": 3,"o": 71,"f": 72},
{"l": 2,"o": 353,"f": 405},
{"l": 2,"o": 718,"f": 792}]},
{"ord":137,"orig_oid":{ "oid": "6bef566f99c7f85cbab9692e22b183ae99f33c1d", "alias": []},
"final_oid":{ "oid": "6bef566f99c7f85cbab9692e22b183ae99f33c1d", "alias": []},
"sig_orig": { "git_time": { "time": 1475179821, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_orig": "ui-shared: replace 'unsigned char sha1[20]' with 'struct object_id oid'",
"sig_final": { "git_time": { "time": 1475179821, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_final": "ui-shared: replace 'unsigned char sha1[20]' with 'struct object_id oid'",
"ranges": [
{"l": 1,"o": 1077,"f": 1174},
{"l": 1,"o": 1084,"f": 1181},
{"l": 3,"o": 1086,"f": 1183}]},
{"ord":138,"orig_oid":{ "oid": "1b4ef6783a71962f8b5da3a23f2830f0f0f55ea0", "alias": []},
"final_oid":{ "oid": "1b4ef6783a71962f8b5da3a23f2830f0f0f55ea0", "alias": []},
"sig_orig": { "git_time": { "time": 1487507268, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: don't print path crumbs without a repo",
"sig_final": { "git_time": { "time": 1487507268, "offset": 0 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: don't print path crumbs without a repo",
"ranges": [
{"l": 1,"o": 1042,"f": 1139}]},
{"ord":139,"orig_oid":{ "oid": "9337c7ee83221d48d02c3c7b5c9dcbaca23ad92f", "alias": []},
"final_oid":{ "oid": "9337c7ee83221d48d02c3c7b5c9dcbaca23ad92f", "alias": []},
"sig_orig": { "git_time": { "time": 1506919146, "offset": -300 }, "name": "Jeff Smith", "email": "whydoubt@gmail.com", "md5": "f36a711ac1cc8c7989949f564dac178a" },
"log_orig": "ui-tree: move set_title_from_path to ui-shared",
"sig_final": { "git_time": { "time": 1506919146, "offset": -300 }, "name": "Jeff Smith", "email": "whydoubt@gmail.com", "md5": "f36a711ac1cc8c7989949f564dac178a" },
"log_final": "ui-tree: move set_title_from_path to ui-shared",
"ranges": [
{"l": 31,"o": 1114,"f": 1224}]},
{"ord":140,"orig_oid":{ "oid": "f6ffe40d1a2c985494e48dc2d36663ffde1e6044", "alias": []},
"final_oid":{ "oid": "f6ffe40d1a2c985494e48dc2d36663ffde1e6044", "alias": []},
"sig_orig": { "git_time": { "time": 1506919147, "offset": -300 }, "name": "Jeff Smith", "email": "whydoubt@gmail.com", "md5": "f36a711ac1cc8c7989949f564dac178a" },
"log_orig": "ui-shared: make a char* parameter const",
"sig_final": { "git_time": { "time": 1506919147, "offset": -300 }, "name": "Jeff Smith", "email": "whydoubt@gmail.com", "md5": "f36a711ac1cc8c7989949f564dac178a" },
"log_final": "ui-shared: make a char* parameter const",
"ranges": [
{"l": 1,"o": 350,"f": 402},
{"l": 7,"o": 383,"f": 435}]},
{"ord":141,"orig_oid":{ "oid": "1649afdc9b2febe9ab7e1abe1956c5dcaff93aa1", "alias": []},
"final_oid":{ "oid": "1649afdc9b2febe9ab7e1abe1956c5dcaff93aa1", "alias": []},
"sig_orig": { "git_time": { "time": 1506919149, "offset": -300 }, "name": "Jeff Smith", "email": "whydoubt@gmail.com", "md5": "f36a711ac1cc8c7989949f564dac178a" },
"log_orig": "ui-tree: link to blame UI if enabled",
"sig_final": { "git_time": { "time": 1506919149, "offset": -300 }, "name": "Jeff Smith", "email": "whydoubt@gmail.com", "md5": "f36a711ac1cc8c7989949f564dac178a" },
"log_final": "ui-tree: link to blame UI if enabled",
"ranges": [
{"l": 1,"o": 3,"f": 3},
{"l": 6,"o": 307,"f": 353},
{"l": 4,"o": 487,"f": 533},
{"l": 6,"o": 996,"f": 1083}]},
{"ord":142,"orig_oid":{ "oid": "98abe5bb9e6297a5dcbae206e00352c8630d922e", "alias": []},
"final_oid":{ "oid": "98abe5bb9e6297a5dcbae206e00352c8630d922e", "alias": []},
"sig_orig": { "git_time": { "time": 1508007736, "offset": 180 }, "name": "Ville Skyttä", "email": "ville.skytta@iki.fi", "md5": "408c72fcc8d8cbdad230ca3277c74bf2" },
"log_orig": "ui-shared: use type\u003d'search' for the search box",
"sig_final": { "git_time": { "time": 1508007736, "offset": 180 }, "name": "Ville Skyttä", "email": "ville.skytta@iki.fi", "md5": "408c72fcc8d8cbdad230ca3277c74bf2" },
"log_final": "ui-shared: use type\u003d'search' for the search box",
"ranges": [
{"l": 1,"o": 1030,"f": 1117},
{"l": 1,"o": 1045,"f": 1131}]},
{"ord":143,"orig_oid":{ "oid": "c1572bb5ec4540b5008490cf471cc4a5e65ef728", "alias": []},
"final_oid":{ "oid": "c1572bb5ec4540b5008490cf471cc4a5e65ef728", "alias": []},
"sig_orig": { "git_time": { "time": 1522502401, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "Add \u0022snapshot-prefix\u0022 repo configuration",
"sig_final": { "git_time": { "time": 1522502401, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "Add \u0022snapshot-prefix\u0022 repo configuration",
"ranges": [
{"l": 2,"o": 156,"f": 161},
{"l": 4,"o": 159,"f": 164}]},
{"ord":144,"orig_oid":{ "oid": "5b1f42ffeec7e315fc4fcff5145e5b0adca30715", "alias": []},
"final_oid":{ "oid": "5b1f42ffeec7e315fc4fcff5145e5b0adca30715", "alias": []},
"sig_orig": { "git_time": { "time": 1522505161, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: use the same snapshot logic as ui-refs",
"sig_final": { "git_time": { "time": 1522505161, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: use the same snapshot logic as ui-refs",
"ranges": [
{"l": 1,"o": 1118,"f": 1196},
{"l": 6,"o": 1121,"f": 1199}]},
{"ord":145,"orig_oid":{ "oid": "e491eaa5df3055dc419d9d3cb75421e8a8c43944", "alias": []},
"final_oid":{ "oid": "e491eaa5df3055dc419d9d3cb75421e8a8c43944", "alias": []},
"sig_orig": { "git_time": { "time": 1522505339, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "ui-shared: pass separator in to cgit_print_snapshot_links()",
"sig_final": { "git_time": { "time": 1522505339, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "ui-shared: pass separator in to cgit_print_snapshot_links()",
"ranges": [
{"l": 2,"o": 1114,"f": 1191},
{"l": 1,"o": 1136,"f": 1220}]},
{"ord":146,"orig_oid":{ "oid": "c712d5ac434b9ee8cb4e63a173a2538e1878637f", "alias": []},
"final_oid":{ "oid": "c712d5ac434b9ee8cb4e63a173a2538e1878637f", "alias": []},
"sig_orig": { "git_time": { "time": 1522509348, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_orig": "snapshot: support archive signatures",
"sig_final": { "git_time": { "time": 1522509348, "offset": 60 }, "name": "John Keeping", "email": "john@keeping.me.uk", "md5": "aea7d8738c91da1cb0dfa9d86f2bbc47" },
"log_final": "snapshot: support archive signatures",
"ranges": [
{"l": 7,"o": 1136,"f": 1213}]},
{"ord":147,"orig_oid":{ "oid": "fb804a353780633b23a5452b3893fcc9f3705431", "alias": []},
"final_oid":{ "oid": "fb804a353780633b23a5452b3893fcc9f3705431", "alias": []},
"sig_orig": { "git_time": { "time": 1527668892, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_orig": "git: update to v2.17.1",
"sig_final": { "git_time": { "time": 1527668892, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_final": "git: update to v2.17.1",
"ranges": [
{"l": 1,"o": 548,"f": 594}]},
{"ord":148,"orig_oid":{ "oid": "e65ea965a07c7d48d269b2d2278d0101f7ac2b48", "alias": []},
"final_oid":{ "oid": "e65ea965a07c7d48d269b2d2278d0101f7ac2b48", "alias": []},
"sig_orig": { "git_time": { "time": 1528144066, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_orig": "print git version string in footer",
"sig_final": { "git_time": { "time": 1528144066, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_final": "print git version string in footer",
"ranges": [
{"l": 1,"o": 13,"f": 13},
{"l": 2,"o": 789,"f": 860}]},
{"ord":149,"orig_oid":{ "oid": "2f8648ff7f5c7119ab035c134504f04eefe068fb", "alias": []},
"final_oid":{ "oid": "2f8648ff7f5c7119ab035c134504f04eefe068fb", "alias": []},
"sig_orig": { "git_time": { "time": 1528698419, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_orig": "snapshot: strip bit from struct cgit_snapshot_format",
"sig_final": { "git_time": { "time": 1528698419, "offset": 120 }, "name": "Christian Hesse", "email": "mail@eworm.de", "md5": "d39edb2018ca5544c1c390a8266096fb" },
"log_final": "snapshot: strip bit from struct cgit_snapshot_format",
"ranges": [
{"l": 1,"o": 1130,"f": 1207}]},
{"ord":150,"orig_oid":{ "oid": "75836a8e8678049d15e4a65c8883d0270be3b93e", "alias": []},
"final_oid":{ "oid": "75836a8e8678049d15e4a65c8883d0270be3b93e", "alias": []},
"sig_orig": { "git_time": { "time": 1529499794, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_orig": "noheader: place branch combo on tabs if no header",
"sig_final": { "git_time": { "time": 1529499794, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_final": "noheader: place branch combo on tabs if no header",
"ranges": [
{"l": 13,"o": 930,"f": 990},
{"l": 1,"o": 976,"f": 1036},
{"l": 1,"o": 1000,"f": 1067},
{"l": 7,"o": 1002,"f": 1069},
{"l": 2,"o": 1061,"f": 1124}]},
{"ord":151,"orig_oid":{ "oid": "05fcd405c16c428d30b1a29e8e81c9ab04de4327", "alias": []},
"final_oid":{ "oid": "05fcd405c16c428d30b1a29e8e81c9ab04de4327", "alias": []},
"sig_orig": { "git_time": { "time": 1529749553, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_orig": "config: add js",
"sig_final": { "git_time": { "time": 1529749553, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_final": "config: add js",
"ranges": [
{"l": 9,"o": 780,"f": 780},
{"l": 2,"o": 815,"f": 815}]},
{"ord":152,"orig_oid":{ "oid": "7def56a6bf82133385646222c74a5f3790803d45", "alias": []},
"final_oid":{ "oid": "7def56a6bf82133385646222c74a5f3790803d45", "alias": []},
"sig_orig": { "git_time": { "time": 1529823920, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_orig": "cgit.css: add dynamic age update",
"sig_final": { "git_time": { "time": 1529823920, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_final": "cgit.css: add dynamic age update",
"ranges": [
{"l": 1,"o": 674,"f": 674}]},
{"ord":153,"orig_oid":{ "oid": "8125f15289b46f1efb984e4128e45043af1785da", "alias": [ "refs/heads/dynamic-aging"]},
"final_oid":{ "oid": "8125f15289b46f1efb984e4128e45043af1785da", "alias": [ "refs/heads/dynamic-aging"]},
"sig_orig": { "git_time": { "time": 1529828375, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_orig": "ui-shared: add now-dynamic age to footer",
"sig_final": { "git_time": { "time": 1529828375, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_final": "ui-shared: add now-dynamic age to footer",
"ranges": [
{"l": 3,"o": 863,"f": 863}]},
{"ord":154,"orig_oid":{ "oid": "7e3c9c387d077efda69f84077fff4ce7fee3a1ad", "alias": []},
"final_oid":{ "oid": "7e3c9c387d077efda69f84077fff4ce7fee3a1ad", "alias": []},
"sig_orig": { "git_time": { "time": 1530010641, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_orig": "cgit_repobasename: convert to allocated result",
"sig_final": { "git_time": { "time": 1530010641, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_final": "cgit_repobasename: convert to allocated result",
"ranges": [
{"l": 2,"o": 130,"f": 130},
{"l": 24,"o": 133,"f": 133},
{"l": 2,"o": 159,"f": 159},
{"l": 1,"o": 163,"f": 163}]},
{"ord":155,"orig_oid":{ "oid": "00dd78e902ab661534e800938cb474d0620148fa", "alias": []},
"final_oid":{ "oid": "00dd78e902ab661534e800938cb474d0620148fa", "alias": []},
"sig_orig": { "git_time": { "time": 1530579730, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_orig": "ui-shared: add helper for generating non-urlencoded links",
"sig_final": { "git_time": { "time": 1530579730, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_final": "ui-shared: add helper for generating non-urlencoded links",
"ranges": [
{"l": 32,"o": 229,"f": 229}]},
{"ord":156,"orig_oid":{ "oid": "8a3a2f9dad084a5d1b40f3fc0c96aac3b35949a9", "alias": []},
"final_oid":{ "oid": "8a3a2f9dad084a5d1b40f3fc0c96aac3b35949a9", "alias": []},
"sig_orig": { "git_time": { "time": 1530588839, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_orig": "css: change to be a list",
"sig_final": { "git_time": { "time": 1530588839, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_final": "css: change to be a list",
"ranges": [
{"l": 11,"o": 737,"f": 769},
{"l": 1,"o": 748,"f": 789},
{"l": 6,"o": 768,"f": 809}]},
{"ord":157,"orig_oid":{ "oid": "b13d015ebe656ca7d345c23d3de234575a32ff31", "alias": []},
"final_oid":{ "oid": "b13d015ebe656ca7d345c23d3de234575a32ff31", "alias": []},
"sig_orig": { "git_time": { "time": 1530589900, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_orig": "desc: add root-desc-html and repo.desc-html",
"sig_final": { "git_time": { "time": 1530589900, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"log_final": "desc: add root-desc-html and repo.desc-html",
"ranges": [
{"l": 6,"o": 999,"f": 1044},
{"l": 2,"o": 1010,"f": 1055}]}],
"contrib":[
{"l": 453,"o": 0},
{"l": 208,"o": 88},
{"l": 179,"o": 81},
{"l": 126,"o": 154},
{"l": 76,"o": 67},
{"l": 56,"o": 141},
{"l": 48,"o": 103},
{"l": 37,"o": 148},
{"l": 12,"o": 64},
{"l": 10,"o": 15},
{"l": 8,"o": 58},
{"l": 8,"o": 75},
{"l": 7,"o": 79},
{"l": 7,"o": 60},
{"l": 5,"o": 77},
{"l": 4,"o": 133},
{"l": 3,"o": 135},
{"l": 2,"o": 66},
{"l": 2,"o": 142},
{"l": 1,"o": 65},
{"l": 1,"o": 80},
{"l": 1,"o": 57}],"g": 6594,"chitpc": 0,"ehitpc": 0,"indexed":0
}],
"ab": 0, "si": 0, "db":0, "di":0, "sat":0, "lfc": "377d"}