From e5da4bca54574522b28f88cab0dc8ebad9e35a73 Mon Sep 17 00:00:00 2001 From: Lars Hjemli Date: Wed, 6 Aug 2008 10:53:50 +0200 Subject: Implement plain view This implements a way to access plain blobs by path (similar to the tree view) instead of by sha1. Signed-off-by: Lars Hjemli --- ui-plain.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 ui-plain.c (limited to 'ui-plain.c') diff --git a/ui-plain.c b/ui-plain.c new file mode 100644 index 0000000..28deae5 --- /dev/null +++ b/ui-plain.c @@ -0,0 +1,82 @@ +/* ui-plain.c: functions for output of plain blobs by path + * + * Copyright (C) 2008 Lars Hjemli + * + * Licensed under GNU General Public License v2 + * (see COPYING for full license text) + */ + +#include "cgit.h" +#include "html.h" +#include "ui-shared.h" + +char *curr_rev; +char *match_path; +int match; + +static void print_object(const unsigned char *sha1, const char *path) +{ + enum object_type type; + char *buf; + size_t size; + + type = sha1_object_info(sha1, &size); + if (type == OBJ_BAD) { + html_status(404, 0); + return; + } + + buf = read_sha1_file(sha1, &type, &size); + if (!buf) { + html_status(404, 0); + return; + } + ctx.page.mimetype = "text/plain"; + ctx.page.filename = fmt("%s", path); + ctx.page.size = size; + cgit_print_http_headers(&ctx); + html_raw(buf, size); + match = 1; +} + +static int walk_tree(const unsigned char *sha1, const char *base, int baselen, + const char *pathname, unsigned mode, int stage, + void *cbdata) +{ + fprintf(stderr, "[cgit] walk_tree.pathname=%s", pathname); + + if (!pathname || strcmp(match_path, pathname)) + return READ_TREE_RECURSIVE; + + if (S_ISREG(mode)) + print_object(sha1, pathname); + + return 0; +} + +void cgit_print_plain(struct cgit_context *ctx) +{ + const char *rev = ctx->qry.sha1; + unsigned char sha1[20]; + struct commit *commit; + const char *paths[] = {ctx->qry.path, NULL}; + + if (!rev) + rev = ctx->qry.head; + + curr_rev = xstrdup(rev); + if (get_sha1(rev, sha1)) { + html_status(404, 0); + return; + } + commit = lookup_commit_reference(sha1); + if (!commit || parse_commit(commit)) { + html_status(404, 0); + return; + } + match_path = ctx->qry.path; + fprintf(stderr, "[cgit] match_path=%s", match_path); + read_tree_recursive(commit->tree, NULL, 0, 0, paths, walk_tree, NULL); + if (!match) + html_status(404, 0); +} -- cgit 1.4.1 orm>
Commit message (Collapse)Author
2020-02-13Explicitly close the TLS connectionJune McEnroe
Just to be nice.
2020-02-12Add sandman wrapperJune McEnroe
2020-02-12Document scripts in READMEJune McEnroe
2020-02-12Add -N flag for notificationsJune McEnroe
2020-02-12Mark and unmark on uiHide, uiShowJune McEnroe
2020-02-12Hide debug prompt if buffer starts with /June McEnroe
2020-02-12Only exit on errorneous nick during registrationJune McEnroe
2020-02-12Add 378 to list of WHOIS responsesJune McEnroe
It's the one (from freenode anyway) that tells you where you're connecting from.
2020-02-13Implement source address selectionmultiplexd
This commit adds a '-S' command line option and a "bind" configuration file option to specify the source address to bind to when connecting to the IRC server.
2020-02-12Add /listJune McEnroe
2020-02-12Simplify transpose swapJune McEnroe
2020-02-12Add C-t transposeJune McEnroe
Also in emacs, weechat.
2020-02-12Add C-v and M-vJune McEnroe
I figure there should be some way to scroll without keypad, and apparently this is what emacs offers...
2020-02-12Allow for arguments to open/copy utilitiesJune McEnroe
2020-02-12Handle RPL_AWAYJune McEnroe
2020-02-11Support monochromatic terminalsJune McEnroe
Oops, division by zero!
2020-02-11Add .gz to chroot-man scriptJune McEnroe
2020-02-11Add -R restricted flagJune McEnroe
2020-02-11Add chroot targetJune McEnroe
2020-02-11Exit focus and paste modes on err exitJune McEnroe
2020-02-11Add startup GPLv3 note and URLJune McEnroe
I am a degenerate.
2020-02-11Make sure -D_GNU_SOURCE ends up in CFLAGS on LinuxJune McEnroe
2020-02-11Add note about setting PKG_CONFIG_PATHJune McEnroe
2020-02-11Rename query ID on nick changeJune McEnroe
2020-02-11Call completeClear when closing a windowJune McEnroe
2020-02-11Don't insert color codes for non-mentionsJune McEnroe
2020-02-11Take first two words in colorMentionsJune McEnroe
This lets phrases like "hi june" get colored, but still doesn't get carried away.
2020-02-11Use time_t for save signatureJune McEnroe
It's actually more likely to be 64-bit than size_t anyway, and it eliminates some helper functions. Also don't error when reading an empty save file.
2020-02-11Set self.nick to * initiallyJune McEnroe
Allows removing a bunch of checks that self.nick is set, and it's what the server usually calls you before registration. Never highlight notices as mentions.
2020-02-11Define ColorCap instead of hardcoding 100June McEnroe
2020-02-11Move hash to top of chat.hJune McEnroe
2020-02-11Move base64 out of chat.hJune McEnroe
2020-02-11Move XDG_SUBDIR out of chat.hJune McEnroe
2020-02-11Fix whois idle unit calculationJune McEnroe
Rookie mistake.
2020-02-11Cast towupper to wchar_tJune McEnroe
For some reason it takes and returns wint_t...
2020-02-11Cast set but unused variables to voidJune McEnroe
2020-02-11Declare strlcatJune McEnroe
2020-02-11Check if VDSUSP existsJune McEnroe
2020-02-11Fix completeReplace iterationJune McEnroe
2020-02-11Use pkg(8) to configure on FreeBSDJune McEnroe
2020-02-11Remove legacy codeJune McEnroe
2020-02-11Add INSTALLING section to READMEJune McEnroe