summaryrefslogtreecommitdiffstatshomepage
path: root/ui-stats.c
Commit message (Collapse)AuthorAge
* forms: action should not be emptyJason A. Donenfeld2016-05-12
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* ui-stats: cast pointer before checking for zeroJohn Keeping2016-02-08
| | | | | | | | | | | | | We abuse the "void *util" field as a counter and recently started to cast it to a uintptr_t to avoid risking nasal demons by performing arithmetic on a void pointer. However, compilers are also known to do "interesting" things if they know that a pointer is or isn't NULL. Make this safer by checking if the counter (after casting) is non-zero rather than checking if the pointer is non-null. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-stats: if we're going to abuse void*, do it safelyJason A. Donenfeld2016-02-08
|
* stats: move layout into page functionJohn Keeping2015-08-14
| | | | | | | This also allows us to return proper HTTP error codes for invalid requests. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-stats: make cgit_period definitions 'static const'John Keeping2015-03-09
| | | | | | | These definitions should not be modified (and never are) so we can move them to .rodata. Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-stats.c: set parent pointer to NULL after freeing itJohn Keeping2014-07-28
| | | | | | We do this everywhere else, so we should be doing it here as well. Signed-off-by: John Keeping <john@keeping.me.uk>
* git: update to v2.0.3John Keeping2014-07-28
| | | | | | | | | | This is slightly more involved than just bumping the version number because it pulls in a change to convert the commit buffer to a slab, removing the "buffer" field from "struct commit". All sites that access "commit->buffer" have been changed to use the new functions provided for this purpose. Signed-off-by: John Keeping <john@keeping.me.uk>
* Switch to exclusively using global ctxLukas Fleischer2014-01-17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Drop the context parameter from the following functions (and all static helpers used by them) and use the global context instead: * cgit_print_http_headers() * cgit_print_docstart() * cgit_print_pageheader() Remove context parameter from all commands Drop the context parameter from the following functions (and all static helpers used by them) and use the global context instead: * cgit_get_cmd() * All cgit command functions. * cgit_clone_info() * cgit_clone_objects() * cgit_clone_head() * cgit_print_plain() * cgit_show_stats() In initialization routines, use the global context variable instead of passing a pointer around locally. Remove callback data parameter for cache slots This is no longer needed since the context is always read from the global context variable. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* ui-stats.c: Remove unused macroLukas Fleischer2014-01-08
| | | | Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* Convert cgit_print_error to a variadic functionJohn Keeping2013-04-08
| | | | | | | | | This removes many uses of "fmt" which uses a fixed size static pool of fixed size buffers. Instead of relying on these, we now pass around argument lists for as long as possible before using a strbuf to render content of an arbitrary size. Signed-off-by: John Keeping <john@keeping.me.uk>
* Always #include corresponding .h in .c filesJohn Keeping2013-04-08
| | | | | | | | | | | | While doing this, remove declarations from header files where the corresponding definition is declared "static" in order to avoid build errors. Also re-order existing headers in ui-*.c so that the file-specific header always comes immediately after "cgit.h", helping with future consistency. Signed-off-by: John Keeping <john@keeping.me.uk>
* Mark several functions/variables staticLukas Fleischer2013-03-04
| | | | | | Spotted by parsing the output of `gcc -Wmissing-prototypes [...]`. Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* White space around control verbs.Jason A. Donenfeld2013-03-04
| | | | Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
* Fix several whitespace errorsLukas Fleischer2013-03-04
| | | | | | | | | | * Remove whitespace at the end of lines. * Replace space indentation by tabs. * Add whitespace before/after several operators ("+", "-", "*", ...) * Add whitespace to assignments ("foo = bar;"). * Fix whitespace in parameter lists ("foobar(foo, bar, 42)"). Signed-off-by: Lukas Fleischer <cgit@cryptocrack.de>
* Update git to v1.7.5.4John Keeping2013-03-02
| | | | | | | | | Some changes to diff options: - no_merges has become the more general max_parents - path restriction now uses struct pathspec Signed-off-by: John Keeping <john@keeping.me.uk>
* ui-stats.c: fix invalid htmlLars Hjemli2011-05-30
| | | | | | Found by http://validator.w3.org. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* ui-stats.c: create a control panel for stat optionsLars Hjemli2011-03-07
| | | | Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* ui-stats: Remove unnecessary #includeJohan Herland2010-11-16
| | | | | | | <string-list.h> is already #included from cgit.h Signed-off-by: Johan Herland <johan@herland.net> Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* fix errors in printf-style format stringsMark Lodato2010-09-04
| | | | | | | | | | | | | | | | | There were many places where the arguments to a printf-like function did not match the format string. Mostly, these were a missing 'l' flag, but there were three exceptions: - In ui-stats.c, a size_t argument must be printed. C99 has the "%zu" flag for this purpose, but not all compilers support this. Therefore, we mimic what git does - use a NO_C99_FORMAT Makefile variable. - In ui-stats.c, cgit_print_error() was called with a pointer instead of a character. - In ui-log.c, the "columns" argument was never used. Signed-off-by: Mark Lodato <lodatom@gmail.com>
* Use GIT-1.7.2.2Lars Hjemli2010-08-22
| | | | Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* Add and use cgit_find_stats_periodname() in print_repo()Lars Hjemli2009-08-24
| | | | Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* ui-stats.c: reuse cgit_add_hidden_formfields()Lars Hjemli2008-12-07
| | | | | | | This makes sure that the currect branch and path is preserved when changing the stats period or author count. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* ui-stats: replace 'enable-stats' setting with 'max-stats'Lars Hjemli2008-12-07
| | | | | | | | | The new 'max-stats' and 'repo.max-stats' settings makes it possible to define the maximum statistics period, both globally and per repo. Hence, it is now feasible to allow statistics on repositories with a high commit frequency, like linux-2.6, by setting repo.max-stats to e.g. 'month'. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* ui-stats: enable path-filtered statsLars Hjemli2008-12-07
| | | | | | | When a path is specified on the querystring the commit statistics will now be filtered by this path. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
* Add a 'stats' page to each repoLars Hjemli2008-12-06
This new page, which is disabled by default, can be used to print some statistics about the number of commits per period in the repository, where period can be either weeks, months, quarters or years. The function can be activated globally by setting 'enable-stats=1' in cgitrc and disabled for individual repos by setting 'repo.enable-stats=0'. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
> 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745
body, table, form {
	padding: 0em;
	margin: 0em;
}

body {
	font-family: sans-serif;
	font-size: 10pt;
	color: #333;
	background: white;
	padding: 4px;
}

a {
	color: blue;
	text-decoration: none;
}

a:hover {
	text-decoration: underline;
}

table {
      border-collapse: collapse;
}

table#header {
	width: 100%;
	margin-bottom: 1em;
}

table#header td.logo {
	width: 96px;
}

table#header td.main {
	font-size: 250%;
	padding-left: 10px;
	white-space: nowrap;
}

table#header td.main a {
	color: #000;
}

table#header td.form {
	text-align: right;
	vertical-align: bottom;
	padding-right: 1em;
	padding-bottom: 2px;
	white-space: nowrap;
}

table#header td.form form,
table#header td.form input,
table#header td.form select {
	font-size: 90%;
}

table#header td.sub {
	color: #777;
	border-top: solid 1px #ccc;
	padding-left: 10px;
}

table.tabs {
	border-bottom: solid 3px #ccc;
	border-collapse: collapse;
	margin-top: 2em;
	margin-bottom: 0px;
	width: 100%;
}

table.tabs td {
	padding: 0px 1em;
	vertical-align: bottom;
}

table.tabs td a {
	padding: 2px 0.75em;
	color: #777;
	font-size: 110%;
}

table.tabs td a.active {
	color: #000;
	background-color: #ccc;
}

table.tabs td.form {
	text-align: right;
}

table.tabs td.form form {
	padding-bottom: 2px;
	font-size: 90%;
	white-space: nowrap;
}

table.tabs td.form input,
table.tabs td.form select {
	font-size: 90%;
}

div.path {
	margin: 0px;
	padding: 5px 2em 2px 2em;
	color: #000;
	background-color: #eee;
}

div.content {
	margin: 0px;
	padding: 2em;
	border-bottom: solid 3px #ccc;
}


table.list {
	width: 100%;
	border: none;
	border-collapse: collapse;
}

table.list tr {
	background: white;
}

table.list tr.logheader {
	background: #eee;
}

table.list tr:hover {
	background: #eee;
}

table.list tr.nohover:hover {
	background: white;
}

table.list th {
	font-weight: bold;
	/* color: #888;
	border-top: dashed 1px #888;
	border-bottom: dashed 1px #888;
	*/
	padding: 0.1em 0.5em 0.05em 0.5em;
	vertical-align: baseline;
}

table.list td {
	border: none;
	padding: 0.1em 0.5em 0.1em 0.5em;
}

table.list td.logsubject {
	font-family: monospace;
	font-weight: bold;
}

table.list td.logmsg {
	font-family: monospace;
	white-space: pre;
	padding: 1em 0.5em 2em 0.5em;
}

table.list td.lognotes-label {
	text-align:right;
	vertical-align:top;
}

table.list td.lognotes {
	font-family: monospace;
	white-space: pre;
	padding: 0em 0.5em 2em 0.5em;
}

table.list td a {
	color: black;
}

table.list td a.ls-dir {
	font-weight: bold;
	color: #00f;
}

table.list td a:hover {
	color: #00f;
}

img {
	border: none;
}

input#switch-btn {
	margin: 2px 0px 0px 0px;
}

td#sidebar input.txt {
	width: 100%;
	margin: 2px 0px 0px 0px;
}

table#grid {
	margin: 0px;
}

td#content {
	vertical-align: top;
	padding: 1em 2em 1em 1em;
	border: none;
}

div#summary {
	vertical-align: top;
	margin-bottom: 1em;
}

table#downloads {
	float: right;
	border-collapse: collapse;
	border: solid 1px #777;
	margin-left: 0.5em;
	margin-bottom: 0.5em;
}

table#downloads th {
	background-color: #ccc;
}

div#blob {
	border: solid 1px black;
}

div.error {
	color: red;
	font-weight: bold;
	margin: 1em 2em;
}

a.ls-blob, a.ls-dir, a.ls-mod {
	font-family: monospace;
}

td.ls-size {
	text-align: right;
	font-family: monospace;
	width: 10em;
}

td.ls-mode {
	font-family: monospace;
	width: 10em;
}

table.blob {
	margin-top: 0.5em;
	border-top: solid 1px black;
}

table.blob td.lines {
	margin: 0; padding: 0 0 0 0.5em;
	vertical-align: top;
	color: black;
}

table.blob td.linenumbers {
	margin: 0; padding: 0 0.5em 0 0.5em;
	vertical-align: top;
	text-align: right;
	border-right: 1px solid gray;
}

table.blob pre {
	padding: 0; margin: 0;
}

table.blob a.no {
	color: gray;
	text-align: right;
	text-decoration: none;
}

table.blob a.no a:hover {
	color: black;
}

table.bin-blob {
	margin-top: 0.5em;
	border: solid 1px black;
}

table.bin-blob th {
	font-family: monospace;
	white-space: pre;
	border: solid 1px #777;
	padding: 0.5em 1em;
}

table.bin-blob td {
	font-family: monospace;
	white-space: pre;
	border-left: solid 1px #777;
	padding: 0em 1em;
}

table.nowrap td {
	white-space: nowrap;
}

table.commit-info {
	border-collapse: collapse;
	margin-top: 1.5em;
}

table.commit-info th {
	text-align: left;
	font-weight: normal;
	padding: 0.1em 1em 0.1em 0.1em;
	vertical-align: top;
}

table.commit-info td {
	font-weight: normal;
	padding: 0.1em 1em 0.1em 0.1em;
}

div.commit-subject {
	font-weight: bold;
	font-size: 125%;
	margin: 1.5em 0em 0.5em 0em;
	padding: 0em;
}

div.commit-msg {
	white-space: pre;
	font-family: monospace;
}

div.notes-header {
	font-weight: bold;
	padding-top: 1.5em;
}

div.notes {
	white-space: pre;
	font-family: monospace;
	border: solid 1px #ee9;
	background-color: #ffd;
	padding: 0.3em 2em 0.3em 1em;
	float: left;
}

div.notes-footer {
	clear: left;
}

div.diffstat-header {
	font-weight: bold;
	padding-top: 1.5em;
}

table.diffstat {
	border-collapse: collapse;
	border: solid 1px #aaa;
	background-color: #eee;
}

table.diffstat th {
	font-weight: normal;
	text-align: left;
	text-decoration: underline;
	padding: 0.1em 1em 0.1em 0.1em;
	font-size: 100%;
}

table.diffstat td {
	padding: 0.2em 0.2em 0.1em 0.1em;
	font-size: 100%;
	border: none;
}

table.diffstat td.mode {
	white-space: nowrap;
}

table.diffstat td span.modechange {
	padding-left: 1em;
	color: red;
}

table.diffstat td.add a {
	color: green;
}

table.diffstat td.del a {
	color: red;
}

table.diffstat td.upd a {
	color: blue;
}

table.diffstat td.graph {
	width: 500px;
	vertical-align: middle;
}

table.diffstat td.graph table {
	border: none;
}

table.diffstat td.graph td {
	padding: 0px;
	border: 0px;
	height: 7pt;
}

table.diffstat td.graph td.add {
	background-color: #5c5;
}

table.diffstat td.graph td.rem {
	background-color: #c55;
}

div.diffstat-summary {
	color: #888;
	padding-top: 0.5em;
}

table.diff {
	width: 100%;
}

table.diff td {
	font-family: monospace;
	white-space: pre;
}

table.diff td div.head {
	font-weight: bold;
	margin-top: 1em;
	color: black;
}

table.diff td div.hunk {
	color: #009;
}

table.diff td div.add {
	color: green;
}

table.diff td div.del {
	color: red;
}

.sha1 {
	font-family: monospace;
	font-size: 90%;
}

.left {
	text-align: left;
}

.right {
	text-align: right;
}

table.list td.reposection {
	font-style: italic;
	color: #888;
}

a.button {
	font-size: 80%;
	padding: 0em 0.5em;
}

a.primary {
	font-size: 100%;
}

a.secondary {
	font-size: 90%;
}

td.toplevel-repo {

}

table.list td.sublevel-repo {
	padding-left: 1.5em;
}

div.pager {
	text-align: center;
	margin: 1em 0em 0em 0em;
}

div.pager a {
	color: #777;
	margin: 0em 0.5em;
}

span.age-mins {
	font-weight: bold;
	color: #080;
}

span.age-hours {
	color: #080;
}

span.age-days {
	color: #040;
}

span.age-weeks {
	color: #444;
}

span.age-months {
	color: #888;
}

span.age-years {
	color: #bbb;
}
div.footer {
	margin-top: 0.5em;
	text-align: center;
	font-size: 80%;
	color: #ccc;
}
a.branch-deco {
	margin: 0px 0.5em;
	padding: 0px 0.25em;
	background-color: #88ff88;
	border: solid 1px #007700;
}
a.tag-deco {
	margin: 0px 0.5em;
	padding: 0px 0.25em;
	background-color: #ffff88;
	border: solid 1px #777700;
}
a.remote-deco {
	margin: 0px 0.5em;
	padding: 0px 0.25em;
	background-color: #ccccff;
	border: solid 1px #000077;
}
a.deco {
	margin: 0px 0.5em;
	padding: 0px 0.25em;
	background-color: #ff8888;
	border: solid 1px #770000;
}

div.commit-subject a.branch-deco,
div.commit-subject a.tag-deco,
div.commit-subject a.remote-deco,
div.commit-subject a.deco {
	margin-left: 1em;
	font-size: 75%;
}

table.stats {
	border: solid 1px black;
	border-collapse: collapse;
}

table.stats th {
	text-align: left;
	padding: 1px 0.5em;
	background-color: #eee;
	border: solid 1px black;
}

table.stats td {
	text-align: right;
	padding: 1px 0.5em;
	border: solid 1px black;
}

table.stats td.total {
	font-weight: bold;
	text-align: left;
}

table.stats td.sum {
	color: #c00;
	font-weight: bold;
/*	background-color: #eee; */
}

table.stats td.left {
	text-align: left;
}

table.vgraph {
	border-collapse: separate;
	border: solid 1px black;
	height: 200px;
}

table.vgraph th {
	background-color: #eee;
	font-weight: bold;
	border: solid 1px white;
	padding: 1px 0.5em;
}

table.vgraph td {
	vertical-align: bottom;
	padding: 0px 10px;
}

table.vgraph div.bar {
	background-color: #eee;
}

table.hgraph {
	border: solid 1px black;
	width: 800px;
}

table.hgraph th {
	background-color: #eee;
	font-weight: bold;
	border: solid 1px black;
	padding: 1px 0.5em;
}

table.hgraph td {
	vertical-align: center;
	padding: 2px 2px;
}

table.hgraph div.bar {
	background-color: #eee;
	height: 1em;
}

table.ssdiff {
	width: 100%;
}

table.ssdiff td {
	font-size: 75%;
	font-family: monospace;
	white-space: pre;
	padding: 1px 4px 1px 4px;
	border-left: solid 1px #aaa;
	border-right: solid 1px #aaa;
}

table.ssdiff td.add {
	color: black;
	background: #cfc;
	min-width: 50%;
}

table.ssdiff td.add_dark {
	color: black;
	background: #aca;
	min-width: 50%;
}

table.ssdiff span.add {
	background: #cfc;
	font-weight: bold;
}

table.ssdiff td.del {
	color: black;
	background: #fcc;
	min-width: 50%;
}

table.ssdiff td.del_dark {
	color: black;
	background: #caa;
	min-width: 50%;
}

table.ssdiff span.del {
	background: #fcc;
	font-weight: bold;
}

table.ssdiff td.changed {
	color: black;
	background: #ffc;
	min-width: 50%;
}

table.ssdiff td.changed_dark {
	color: black;
	background: #cca;
	min-width: 50%;
}

table.ssdiff td.lineno {
	color: black;
	background: #eee;
	text-align: right;
	width: 3em;
	min-width: 3em;
}

table.ssdiff td.hunk {
	color: #black;
	background: #ccf;
	border-top: solid 1px #aaa;
	border-bottom: solid 1px #aaa;
}

table.ssdiff td.head {
	border-top: solid 1px #aaa;
	border-bottom: solid 1px #aaa;
}

table.ssdiff td.head div.head {
	font-weight: bold;
	color: black;
}

table.ssdiff td.foot {
	border-top: solid 1px #aaa;
        border-left: none;
        border-right: none;
        border-bottom: none;
}

table.ssdiff td.space {
	border: none;
}

table.ssdiff td.space div {
	min-height: 3em;
}