* [PATCH 0/3] www: viewvcs: tags + minor updates
@ 2022-10-10 21:34 7% Eric Wong
2022-10-10 21:34 6% ` [PATCH 3/3] www: viewvcs: display annotated tags as discreet objects Eric Wong
0 siblings, 1 reply; 2+ results
From: Eric Wong @ 2022-10-10 21:34 UTC (permalink / raw)
To: meta
I noticed the /$CODEREPO/ summary endpoint links to tags,
so we'll support handling annotated tags via /($CODEREPO|$INBOX)/$OID/s/,
now. Still not sure how to best deal with multiple search endpoints,
yet...
Eric Wong (3):
viewvcs: avoid one ascii_html call
xt/solver: skip on missing publicinbox.git.coderepo
www: viewvcs: display annotated tags as discreet objects
lib/PublicInbox/ViewVCS.pm | 51 +++++++++++++++++++++++++++++++++++---
xt/solver.t | 12 +++++++--
2 files changed, 57 insertions(+), 6 deletions(-)
^ permalink raw reply [relevance 7%]
* [PATCH 3/3] www: viewvcs: display annotated tags as discreet objects
2022-10-10 21:34 7% [PATCH 0/3] www: viewvcs: tags + minor updates Eric Wong
@ 2022-10-10 21:34 6% ` Eric Wong
0 siblings, 0 replies; 2+ results
From: Eric Wong @ 2022-10-10 21:34 UTC (permalink / raw)
To: meta
This emphasizes annotated tags as their own object type in the
web UI while being able to link to the existing show_commit()
linkification and dfblob: search.
---
lib/PublicInbox/ViewVCS.pm | 40 +++++++++++++++++++++++++++++++++++++-
xt/solver.t | 1 +
2 files changed, 40 insertions(+), 1 deletion(-)
diff --git a/lib/PublicInbox/ViewVCS.pm b/lib/PublicInbox/ViewVCS.pm
index 86bae7d6..02e98768 100644
--- a/lib/PublicInbox/ViewVCS.pm
+++ b/lib/PublicInbox/ViewVCS.pm
@@ -26,6 +26,7 @@ use PublicInbox::View;
use PublicInbox::Eml;
use Text::Wrap qw(wrap);
use PublicInbox::Hval qw(ascii_html to_filename prurl);
+use POSIX qw(strftime);
my $hl = eval {
require PublicInbox::HlMod;
PublicInbox::HlMod->new;
@@ -337,7 +338,7 @@ sub show_commit ($$) {
$qsp->psgi_qx($ctx->{env}, undef, \&show_commit_start, $ctx);
}
-sub show_other ($$) {
+sub show_other ($$) { # just in case...
my ($ctx, $res) = @_;
my ($git, $oid, $type, $size) = @$res;
$size > $MAX_SIZE and return html_page($ctx, 200,
@@ -421,6 +422,42 @@ sub show_tree ($$) {
$qsp->psgi_qx($ctx->{env}, undef, \&show_tree_result, $ctx);
}
+# returns seconds offset from git TZ offset
+sub tz_adj ($) {
+ my ($tz) = @_; # e.g "-0700"
+ $tz = int($tz);
+ my $mm = $tz < 0 ? -$tz : $tz;
+ $mm = int($mm / 100) * 60 + ($mm % 100);
+ $mm = $tz < 0 ? -$mm : $mm;
+ ($mm * 60);
+}
+
+sub show_tag_result { # git->cat_async callback
+ my ($bref, $oid, $type, $size, $ctx) = @_;
+ utf8::decode($$bref);
+ my $l = PublicInbox::Linkify->new;
+ $$bref = $l->to_html($$bref);
+ $$bref =~ s!^object ([a-f0-9]+)!object <a
+href=../../$1/s/>$1</a>!;
+
+ $$bref =~ s/^(tagger .*> )([0-9]+) ([\-+]?[0-9]+)/$1.strftime(
+ '%Y-%m-%d %H:%M:%S', gmtime($2 + tz_adj($3)))." $3"/sme;
+ # TODO: download link
+ html_page($ctx, 200, '<pre>', $$bref, '</pre>', dbg_log($ctx));
+}
+
+sub show_tag ($$) {
+ my ($ctx, $res) = @_;
+ my ($git, $oid) = @$res;
+ $ctx->{git} = $git;
+ if ($ctx->{env}->{'pi-httpd.async'}) {
+ ibx_async_cat($ctx, $oid, \&show_tag_result, $ctx);
+ } else { # synchronous (generic PSGI)
+ $git->cat_async($oid, \&show_tag_result, $ctx);
+ $git->cat_async_wait;
+ }
+}
+
# user_cb for SolverGit, called as: user_cb->($result_or_error, $uarg)
sub solve_result {
my ($res, $ctx) = @_;
@@ -431,6 +468,7 @@ sub solve_result {
my ($git, $oid, $type, $size, $di) = @$res;
return show_commit($ctx, $res) if $type eq 'commit';
return show_tree($ctx, $res) if $type eq 'tree';
+ return show_tag($ctx, $res) if $type eq 'tag';
return show_other($ctx, $res) if $type ne 'blob';
my $path = to_filename($di->{path_b} // $hints->{path_b} // 'blob');
my $raw_link = "(<a\nhref=$path>raw</a>)";
diff --git a/xt/solver.t b/xt/solver.t
index cd894edd..40a5f81f 100644
--- a/xt/solver.t
+++ b/xt/solver.t
@@ -29,6 +29,7 @@ my $todo = {
'6aa8857a11/s/?b=protocol.c',
'96f1c7f/s/', # TODO: b=contrib/completion/git-completion.bash
'b76f2c0/s/?b=po/zh_CN.po',
+ 'c2f3bf071ee90b01f2d629921bb04c4f798f02fa/s/', # tag
],
};
^ permalink raw reply related [relevance 6%]
Results 1-2 of 2 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2022-10-10 21:34 7% [PATCH 0/3] www: viewvcs: tags + minor updates Eric Wong
2022-10-10 21:34 6% ` [PATCH 3/3] www: viewvcs: display annotated tags as discreet objects Eric Wong
Code repositories for project(s) associated with this public inbox
https://80x24.org/public-inbox.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).