Commit Graph

1618 Commits

Author SHA1 Message Date
Samuel Lidén Borell
8ed1bef90f css: Support for dark mode
Modern browsers have a "dark mode" preference, which enables alternate
styles on web sites that support this.

This patch adds a dark color scheme, that is automatically activated
via a CSS @media query.

Older browsers that do not support color schemes will simply show the
light scheme, but possibly without syntax highlighting.

Note that filters that use color (such as source highlighters) and
logotypes may need to be updated to work with a black background!
See the updated files in the filters/ directory.

Signed-off-by: Samuel Lidén Borell <samuel@kodafritt.se>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2023-02-08 13:50:05 -03:00
Jason A. Donenfeld
f37dd0dd3a html: double escape literal + in URLs
It's unclear whether this is correct or whether my server is double
decoding.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2023-01-11 21:51:17 +01:00
Jason A. Donenfeld
6a29695be1 css: switch monospace fonts 2023-01-11 21:51:17 +01:00
Jason A. Donenfeld
0c27ce4aef Steal kernel.org's libravatar lua. 2023-01-11 21:51:17 +01:00
Jason A. Donenfeld
8a0eaa5204 ZX2C4 specific patches. 2023-01-11 21:51:17 +01:00
Samuel Lidén Borell
00ecfaadea config: make empty js= omit script tag
According to the cgitrc man page, an empty js= value should cause the
script tag to be omitted. But instead, a script tag with an empty URL
is emitted. The same applies to css. So, skip emitting a tag if the
specified string is empty.

Signed-off-by: Samuel Lidén Borell <samuel@kodafritt.se>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2023-01-10 17:52:54 +01:00
Andy Green
907134b7a2 js: add dynamic age update
This patch updates the emitted "ages" dynamically on the client side.

After updating on completion of the document load, it sets a timer
to update according to the smallest age it found.  If there are any
ages listed in minutes, then it will update again in 10s.  When the
most recent age is in hours, it updates every 5m.  If days, then
every 30m and so on.

This keeps the cost of the dynamic updates at worst once per 10s.
The updates are done entirely on the client side without contact
with the server.

To make this work reliably, since parsing datetimes is unreliable in
browser js, the unix time is added as an attribute to all age spans.

To make that reliable cross-platform, the unix time is treated as a
uint64_t when it is formatted for printing.

The rules for display conversion of the age is aligned with the
existing server-side rules in ui-shared.h.

If the client or server-side time are not synchronized by ntpd etc,
ages shown on the client will not relate to the original ages computed
at the server.  The client updates the ages immediately when the
DOM has finished loading, so in the case the times at the server and
client are not aligned, this patch changes what the user sees on the
page to reflect patch age compared to client time.

If the server and client clocks are aligned, this patch makes no
difference to what is seen on the page.

Signed-off-by: Andy Green <andy@warmcat.com>
Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 16:50:23 +01:00
Andy Green
aee39b4e9a config: add js
Just like the config allows setting css URL path, add a config for
setting the js URL path

Signed-off-by: Andy Green <andy@warmcat.com>
Reviewed-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 16:50:21 +01:00
Andy Green
093ac96970 css: change to be a list
Without changing the default behaviour of including
/cgit.css if nothing declared, allow the "css" config
to be given multiple times listing one or more
alternative URL paths to be included in the document
head area.

Signed-off-by: Andy Green <andy@warmcat.com>
Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 16:49:09 +01:00
Christian Hesse
91f25909b9 cgitrc: handle value "0" for max-repo-count
Setting max-repo-count to "0" makes cgit loop forever generating page
links. Make this a special value to show all repositories.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 16:22:26 +01:00
Hristo Venev
852cb3b0e2 cache: tolerate short writes in print_slot
sendfile() can return after a short read/write, so we may need to call
it more than once. As suggested in the manual page, we fall back to
read/write if sendfile fails with EINVAL or ENOSYS.

On the read/write path, use write_in_full which deals with short writes.

Signed-off-by: Hristo Venev <hristo@venev.name>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2022-12-19 16:13:58 +01:00
John Keeping
4c520cefc9 global: use release_commit_memory()
Instead of calling two separate Git functions to free memory associated
with a commit object, use Git's wrapper which does this.  This also
counts as a potential future bug fix since release_commit_memory() also
resets the parsed state of the commit, meaning any attempt to use it in
the future will correctly fill out the fields again.

release_commit_memory() does not set parents to zero, so keep that for
additional safety in case CGit checks this without calling
parse_commit() again.

Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2022-12-19 16:13:58 +01:00
John Keeping
d071f28cfa css: reset font size for blame oid
In Firefox, the hashes in the blame UI are out of step with the line
number and content leading to ever increasing vertical misalignment.

This is caused by the .oid class setting font-size to 90%, so override
this back to 100% for the blame case, bringing the height of lines in
all three columns of the table back into step.

Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2022-12-19 16:13:58 +01:00
John Keeping
c1a1d23111 ui-blame: add a link to the parent commit in blame
When walking through the history, it is useful to quickly see the same
file at the previous revision, so add a link to do this.

It would be nice to link to the correct line with an additional
fragment, but this requires significantly more work so it can be done as
an enhancement later.  (ent->s_lno is mostly the right thing, but it is
the line number in the post-image of the target commit whereas the link
is to the parent of that commit, i.e. the pre-image of the target.)

Suggested-by: Alejandro Colomar <alx.manpages@gmail.com>
Signed-off-by: John Keeping <john@keeping.me.uk>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2022-12-19 16:13:58 +01:00
Christian Hesse
a0f6669bdb about: allow to give head from query
Reading the README from repository used to be limited to default
branch or a branch given in configuration. Let's allow a branch
from query if not specified explicitly.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 16:13:58 +01:00
Peter Prohaska
ce2062d9e2 html: fix handling of null byte
A return value of `len` or more means that the output was truncated.

Signed-off-by: Peter Prohaska <pitrp@web.de>
Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 16:13:58 +01:00
June McEnroe
4e4b30effb ui-atom: generate valid Atom feeds
Fixes several RFC 4287 violations:

> 4.1.1. The "atom:feed" Element
>    o  atom:feed elements MUST contain exactly one atom:id element.
>    o  atom:feed elements SHOULD contain one atom:link element with a rel
>       attribute value of "self".  This is the preferred URI for
>       retrieving Atom Feed Documents representing this Atom feed.
>    o  atom:feed elements MUST contain exactly one atom:updated element.

An atom:id element is generated from cgit_currentfullurl(), and an
atom:link element with a rel attribute of "self" is generated with
the same URL. An atom:updated element is generated from the date
of the first commit in the revision walk.

> 4.1.2.  The "atom:entry" Element
>    o  atom:entry elements MUST NOT contain more than one atom:content
>       element.

The second atom:content element with the type of "xhtml" is removed.

> 4.2.6.  The "atom:id" Element
>    Its content MUST be an IRI, as defined by [RFC3987].  Note that the
>    definition of "IRI" excludes relative references.  Though the IRI
>    might use a dereferencable scheme, Atom Processors MUST NOT assume it
>    can be dereferenced.

The atom:id elements for commits now use URNs in the "sha1" or
"sha256" namespaces. Although these are not registered URN namespaces,
they see use in the wild, for instance as part of magnet URIs.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2022-12-19 16:13:58 +01:00
June McEnroe
3295155a0c ui-shared: use owner-filter for repo page headers
Previously it was only used if owners were displayed on the index.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2022-12-19 16:13:24 +01:00
Chris Mayo
e32f8416e8 ui-commit: use git raw note format
Currently a commit note is shown as:

    Notes

      Notes:
          <note text>

Change to:

    Notes
      <note text>

Signed-off-by: Chris Mayo <aklhfex@gmail.com>
Reviewed-by: Alyssa Ross <hi@alyssa.is>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2022-12-19 16:13:24 +01:00
Chris Mayo
afffc3e772 ui-repolist,ui-shared: remove redundant title on repo anchors
The title attribute was being set to the same value as the anchor
element text.

Signed-off-by: Chris Mayo <aklhfex@gmail.com>
Reviewed-by: Eric Wong <e@80x24.org>
Reviewed-by: Petr Vorel <petr.vorel@gmail.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2022-12-19 16:13:24 +01:00
June McEnroe
fd20a5475e ui-commit: show subject in commit page title
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2022-12-19 15:24:34 +01:00
June McEnroe
bcffc52366 ui-tree: show symlink targets in tree listing
Add links to symbolic link targets in tree listings, formatted like
"ls -l".  Path normalization collapses any ".." components of the link.

Also fix up memory link on error path.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2022-12-19 15:22:52 +01:00
June McEnroe
cc6d9cc7fc ui-tree,ui-blame: bail from blame if blob is binary
This avoids piping binary blobs through the source-filter. Also prevent
robots from crawling it, since it's expensive.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2022-12-19 15:14:05 +01:00
Christian Hesse
e10159691e git: update to v2.39.0
Update to git version v2.39.0, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 15:09:39 +01:00
Christian Hesse
979cf4a753 git: update to v2.38.2
Update to git version v2.38.2, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 15:09:39 +01:00
Christian Hesse
6ac984b51d git: update to v2.38.1
Update to git version v2.38.1, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 15:09:39 +01:00
Christian Hesse
33efb5fec5 git: update to v2.38.0
Update to git version v2.38.0, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 15:09:39 +01:00
Christian Hesse
e5c868f109 git: update to v2.37.3
Update to git version v2.37.3, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 15:09:39 +01:00
Christian Hesse
43df01c10f git: update to v2.37.2
Update to git version v2.37.2, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 15:09:39 +01:00
Christian Hesse
89ee517122 git: update to v2.37.1
Update to git version v2.37.1, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 15:09:39 +01:00
Christian Hesse
2486d70752 git: update to v2.37.0
Update to git version v2.37.0, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 15:09:39 +01:00
Christian Hesse
bcdfb2197f git: update to v2.36.1
Update to git version v2.36.1, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 15:09:39 +01:00
June McEnroe
b9ff119549 shared: fix bad free in cgit_diff_tree
Since git commit 244c27242f44e6b88e3a381c90bde08d134c274b,

> diff.[ch]: have diff_free() call clear_pathspec(opts.pathspec)

calling diff_flush calls free(3) on opts.pathspec.items, so it can't
be a pointer to a stack variable.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-12-19 15:09:34 +01:00
Christian Hesse
bb02e24ec2 git: update to v2.36.0
Update to git version v2.36.0, this requires changes for these
upstream commits:

* 95433eeed9eac439eb21eb30105354b15e71302e
  diff: add ability to insert additional headers for paths

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-04-18 22:15:36 +02:00
Christian Hesse
cc9b717c87 git: update to v2.35.3
Update to git version v2.35.3, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-04-18 22:10:41 +02:00
Christian Hesse
9761994243 git: update to v2.35.2
Update to git version v2.35.2, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-04-12 19:01:23 +02:00
Christian Hesse
bbbaa29a96 git: update to v2.35.1
Update to git version v2.35.1, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-01-29 10:20:25 +01:00
Christian Hesse
73e98c16e8 git: update to v2.35.0
Update to git version v2.35.0, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2022-01-24 20:45:20 +01:00
Christian Hesse
11be5b8182 git: update to v2.34.1
Update to git version v2.34.1, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2021-11-24 21:12:12 +01:00
Christian Hesse
b8f2b675df git: update to v2.34.0
Update to git version v2.34.0, this requires changes for these
upstream commits:

* abf897bacd2d36b9dbd07c70b4a2f97a084704ee
  string-list.[ch]: remove string_list_init() compatibility function

Signed-off-by: Christian Hesse <mail@eworm.de>
2021-11-15 22:53:04 +01:00
Christian Hesse
45eff40655 git: update to v2.33.0
Update to git version v2.33.0, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2021-11-03 15:34:52 +01:00
Christian Hesse
5258c297ba git: update to v2.32.0
Update to git version v2.32.0, this requires changes for these
upstream commits:

* 47957485b3b731a7860e0554d2bd12c0dce1c75a
  tree.h API: simplify read_tree_recursive() signature

Signed-off-by: Christian Hesse <mail@eworm.de>
2021-06-08 12:37:46 +02:00
Christian Hesse
6dbbffe015 git: update to v2.31.1
Update to git version v2.31.1, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2021-05-18 22:53:49 +02:00
Christian Hesse
62eb8db452 md2html: use proper formatting for hr
This addressed a non-existent background image and made the element
invisible. Drop the style and use something sane.

Signed-off-by: Christian Hesse <mail@eworm.de>
2021-05-12 15:32:50 +02:00
Christian Hesse
d889cae811 git: update to v2.31.0
Update to git version v2.31.0, this requires changes for these
upstream commits:

* 36a317929b8f0c67d77d54235f2d20751c576cbb
  refs: switch peel_ref() to peel_iterated_oid()

Signed-off-by: Christian Hesse <mail@eworm.de>
2021-03-16 11:28:43 +01:00
Christian Hesse
4ffadc1e0c git: update to v2.30.1
Update to git version v2.30.1, no additional changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2021-02-10 16:13:53 +01:00
Todd Zullinger
bd6f5683f6 tests: t0107: support older and/or non-GNU tar
The untar tests for various compression algorithms use shortcut options
from GNU tar to handle decompression.  These options may not be provided
by non-GNU tar nor even by slightly older GNU tar versions which ship on
many systems.

An example of the latter case is the --zstd option.  This was added in
GNU tar-1.32 (2019-02-23)¹.  This version of tar is not provided by
CentOS/RHEL, in particular.  In Debian, --zstd has been backported to
the tar-1.30 release.

Avoid the requirement on any specific implementations or versions of tar
by piping decompressed output to tar.  This is compatible with older GNU
tar releases as well as tar implementations from other vendors.  (It may
also be a slight benefit that this more closely matches what the
snapshot creation code does.)

¹ Technically, the --zstd option was first released in tar-1.31
  (2019-01-02), but this release was very short-lived and is no longer
  listed on the GNU Tar release page.

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-12-29 21:06:17 +01:00
Jason A. Donenfeld
f69626c68e md2html: use sane_lists extension
This allows for cleaner nesting semantics and matches github more
closely.

Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
2020-12-29 12:33:48 +01:00
Christian Hesse
cef27b670a git: update to v2.30.0
Update to git version v2.30.0, this requires changes for these
upstream commits:

* 88894aaeeae92e8cb41143cc2e045f50289dc790
  blame: simplify 'setup_scoreboard' interface

* 1fbfdf556f2abc708183caca53ae4e2881b46ae2
  banned.h: mark non-reentrant gmtime, etc as banned

Signed-off-by: Christian Hesse <mail@eworm.de>
2020-12-29 12:29:42 +01:00
Christian Hesse
b1739247b1 git: update to v2.29.2
Update to git version v2.29.2.

No changes required.

Signed-off-by: Christian Hesse <mail@eworm.de>
2020-10-30 22:26:05 +01:00