From 56bd759df1d0c750a065b8c845e93d5dfa6b549d Mon Sep 17 00:00:00 2001 From: "Robin H. Johnson" Date: Sat, 8 Aug 2015 13:49:04 -0700 Subject: proj/gentoo: Initial commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit represents a new era for Gentoo: Storing the gentoo-x86 tree in Git, as converted from CVS. This commit is the start of the NEW history. Any historical data is intended to be grafted onto this point. Creation process: 1. Take final CVS checkout snapshot 2. Remove ALL ChangeLog* files 3. Transform all Manifests to thin 4. Remove empty Manifests 5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$ 5.1. Do not touch files with -kb/-ko keyword flags. Signed-off-by: Robin H. Johnson X-Thanks: Alec Warner - did the GSoC 2006 migration tests X-Thanks: Robin H. Johnson - infra guy, herding this project X-Thanks: Nguyen Thai Ngoc Duy - Former Gentoo developer, wrote Git features for the migration X-Thanks: Brian Harring - wrote much python to improve cvs2svn X-Thanks: Rich Freeman - validation scripts X-Thanks: Patrick Lauer - Gentoo dev, running new 2014 work in migration X-Thanks: Michał Górny - scripts, QA, nagging X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed --- x11-terms/rxvt/Manifest | 2 + .../files/rxvt-2.7.10-CVE-2008-1142-DISPLAY.patch | 52 +++++++++ x11-terms/rxvt/files/rxvt-2.7.10-asneeded.patch | 13 +++ x11-terms/rxvt/files/rxvt-2.7.10-azz4.diff | 126 +++++++++++++++++++++ x11-terms/rxvt/files/rxvt-2.7.10-line-scroll.patch | 13 +++ x11-terms/rxvt/files/rxvt-2.7.10-rk.patch | 82 ++++++++++++++ x11-terms/rxvt/metadata.xml | 21 ++++ x11-terms/rxvt/rxvt-2.7.10-r4.ebuild | 93 +++++++++++++++ 8 files changed, 402 insertions(+) create mode 100644 x11-terms/rxvt/Manifest create mode 100644 x11-terms/rxvt/files/rxvt-2.7.10-CVE-2008-1142-DISPLAY.patch create mode 100644 x11-terms/rxvt/files/rxvt-2.7.10-asneeded.patch create mode 100644 x11-terms/rxvt/files/rxvt-2.7.10-azz4.diff create mode 100644 x11-terms/rxvt/files/rxvt-2.7.10-line-scroll.patch create mode 100644 x11-terms/rxvt/files/rxvt-2.7.10-rk.patch create mode 100644 x11-terms/rxvt/metadata.xml create mode 100644 x11-terms/rxvt/rxvt-2.7.10-r4.ebuild (limited to 'x11-terms/rxvt') diff --git a/x11-terms/rxvt/Manifest b/x11-terms/rxvt/Manifest new file mode 100644 index 000000000000..485430a7b3a1 --- /dev/null +++ b/x11-terms/rxvt/Manifest @@ -0,0 +1,2 @@ +DIST rxvt-2.7.10-xim-fix.patch.gz 602 SHA256 09ba6a98927e0f60defc399acc0b0d4debfb95d69035d99c1aa779315c2573e9 SHA512 d2d65136c7ba630157eeab8234a1d7281f0cbb77817bb86974e91cdf154a815a637d314ae8f9e5d27c8a09a3d90e6be1a28d961e0e8e4b78bf6508da4a7e32ed WHIRLPOOL c584957a76ba9b6daaffbc33f92f6815a80c51f2da2faeb3e8ef5d5615b9a8d68bb3e439483c9ebc2e7eed68f69df2e3d2f4f31fef0ed0254aba971811aba09b +DIST rxvt-2.7.10.tar.gz 595073 SHA256 616ad56502820264e6933d07bc4eb752aa6940ec14add6e780ffccf15f38d449 SHA512 cff86c2f94c533d906b412a949fe754726a0c67d87534b8f9794080898aa20744ee5de6f9109e9de1db14291cb6de7c1c4c1944ec9192e4ea42b0a3fe598b2a1 WHIRLPOOL 5c54110bd8ab79e3d8c23c447f5fce9631a9cd2492f816a1732eb8c2aab09eb1b31f61a0a6f0cfe3a456953fc4a3819b630a513cbd4b3b9f3fa4f95d526818fb diff --git a/x11-terms/rxvt/files/rxvt-2.7.10-CVE-2008-1142-DISPLAY.patch b/x11-terms/rxvt/files/rxvt-2.7.10-CVE-2008-1142-DISPLAY.patch new file mode 100644 index 000000000000..e817f8d0e316 --- /dev/null +++ b/x11-terms/rxvt/files/rxvt-2.7.10-CVE-2008-1142-DISPLAY.patch @@ -0,0 +1,52 @@ +# CVE-2008-1142 (rxvt 2.6.4 opens an xterm on :0 if the DISPLAY environment variable is not set, which might allow local users to hijack X11 connections.) +# Based on http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=41;filename=diff;att=1;bug=469296 +# bug 217819 + +diff -Naur rxvt-2.7.10.orig/rclock/rclock.c rxvt-2.7.10/rclock/rclock.c +--- rxvt-2.7.10.orig/rclock/rclock.c 2008-05-03 14:23:07.264082222 +0200 ++++ rxvt-2.7.10/rclock/rclock.c 2008-05-03 14:24:55.433082735 +0200 +@@ -324,9 +324,6 @@ + CheckMaildir(); + #endif + +- if ((display_name = getenv ("DISPLAY")) == NULL) +- display_name = ":0"; +- + /* parse the command line */ + for (i = 1; i < argc; i += 2) + { +@@ -424,7 +421,9 @@ + Xdisplay = XOpenDisplay (display_name); + if (!Xdisplay) + { +- print_error ("can't open display %s", display_name); ++ print_error ("can't open display %s", display_name?display_name: ++ getenv("DISPLAY")?getenv("DISPLAY"): ++ "as no -d given and DISPLAY not set"); + goto Abort; + } + +diff -Naur rxvt-2.7.10.orig/src/init.c rxvt-2.7.10/src/init.c +--- rxvt-2.7.10.orig/src/init.c 2008-05-03 14:23:07.247082766 +0200 ++++ rxvt-2.7.10/src/init.c 2008-05-03 14:43:44.705227631 +0200 +@@ -532,8 +532,7 @@ + /* + * Open display, get options/resources and create the window + */ +- if ((rs[Rs_display_name] = getenv("DISPLAY")) == NULL) +- rs[Rs_display_name] = ":0"; ++ rs[Rs_display_name] = getenv("DISPLAY"); + + rxvt_get_options(r, r_argc, r_argv); + free(r_argv); +@@ -550,7 +549,9 @@ + + if (r->Xdisplay == NULL + && (r->Xdisplay = XOpenDisplay(rs[Rs_display_name])) == NULL) { +- rxvt_print_error("can't open display %s", rs[Rs_display_name]); ++ rxvt_print_error("can't open display %s", ++ rs[Rs_display_name]?rs[Rs_display_name]: ++ "as no -display option given and DISPLAY not set"); + exit(EXIT_FAILURE); + } + diff --git a/x11-terms/rxvt/files/rxvt-2.7.10-asneeded.patch b/x11-terms/rxvt/files/rxvt-2.7.10-asneeded.patch new file mode 100644 index 000000000000..e1a48cde8af8 --- /dev/null +++ b/x11-terms/rxvt/files/rxvt-2.7.10-asneeded.patch @@ -0,0 +1,13 @@ +Index: rxvt-2.7.10/src/Makefile.in +=================================================================== +--- rxvt-2.7.10.orig/src/Makefile.in ++++ rxvt-2.7.10/src/Makefile.in +@@ -103,7 +103,7 @@ rxvt: version.h rxvt.o librxvt.la + date >.protos + + librxvt.la: $(LIBOBJS) +- $(LIBTOOL) --mode=link $(LINK) -rpath $(libdir) -version-info $(LIBVERSION) $(LIBOBJS) $(LIBS) -o $@ ++ $(LIBTOOL) --mode=link $(LINK) -rpath $(libdir) -version-info $(LIBVERSION) $(LIBOBJS) $(LIBS) $(XLIB) -o $@ + #------------------------------------------------------------------------- + tags: $(SRCS) $(HDRS) $(EXTRAHDRS) + ctags $(SRCS) $(HDRS) $(EXTRAHDRS) diff --git a/x11-terms/rxvt/files/rxvt-2.7.10-azz4.diff b/x11-terms/rxvt/files/rxvt-2.7.10-azz4.diff new file mode 100644 index 000000000000..4baf507685be --- /dev/null +++ b/x11-terms/rxvt/files/rxvt-2.7.10-azz4.diff @@ -0,0 +1,126 @@ +diff -Naurp rxvt-2.7.10.orig/AZZ-ChangeLog rxvt-2.7.10/AZZ-ChangeLog +--- rxvt-2.7.10.orig/AZZ-ChangeLog 1969-12-31 19:00:00.000000000 -0500 ++++ rxvt-2.7.10/AZZ-ChangeLog 2003-03-31 14:11:43.000000000 -0500 +@@ -0,0 +1,7 @@ ++- Modified to support borderlessness with -nb and override-redirect with ++ -or (or resources borderless and overrideRedirect). ++- Modified to allow an arbitrary command to be run instead of the bell ++ with -bc. ++- Fixed buffer overflow in command.c (not that you should install this suid ++ root anyway) ++ +diff -Naurp rxvt-2.7.10.orig/src/command.c rxvt-2.7.10/src/command.c +--- rxvt-2.7.10.orig/src/command.c 2003-03-26 01:01:23.000000000 -0500 ++++ rxvt-2.7.10/src/command.c 2003-03-31 14:11:43.000000000 -0500 +@@ -3098,7 +3098,7 @@ rxvt_tt_printf(rxvt_t *r, const char *fm + unsigned char buf[256]; + + va_start(arg_ptr, fmt); +- vsprintf((char *)buf, fmt, arg_ptr); ++ vsnprintf((char *)buf, sizeof buf, fmt, arg_ptr); + va_end(arg_ptr); + rxvt_tt_write(r, buf, (unsigned int)STRLEN(buf)); + } +diff -Naurp rxvt-2.7.10.orig/src/init.c rxvt-2.7.10/src/init.c +--- rxvt-2.7.10.orig/src/init.c 2002-12-04 00:21:39.000000000 -0500 ++++ rxvt-2.7.10/src/init.c 2003-03-31 14:11:43.000000000 -0500 +@@ -34,6 +34,7 @@ + #include "../config.h" /* NECESSARY */ + #include "rxvt.h" /* NECESSARY */ + #include "init.h" ++#include + + #include + +@@ -1126,6 +1127,24 @@ rxvt_Create_Windows(rxvt_t *r, int argc, + r->PixColors[Color_border], + r->PixColors[Color_fg]); + #endif ++ if (r->Options & Opt_borderless) { ++ Atom mwmatom; ++ MotifWmHints hints; ++ ++ mwmatom = XInternAtom(r->Xdisplay, _XA_MOTIF_WM_HINTS, FALSE); ++ hints.flags = MWM_HINTS_DECORATIONS; ++ hints.decorations = 0; ++ XChangeProperty(r->Xdisplay, r->TermWin.parent[0], mwmatom, mwmatom, ++ 32, PropModeReplace, (unsigned char *)&hints, ++ sizeof(MotifWmHints)/sizeof(long)); ++ } ++ if (r->Options & Opt_overrideredirect) { ++ XSetWindowAttributes attrib; ++ ++ attrib.override_redirect = True; ++ XChangeWindowAttributes(r->Xdisplay, r->TermWin.parent[0], ++ CWOverrideRedirect, &attrib); ++ } + rxvt_xterm_seq(r, XTerm_title, r->h->rs[Rs_title], CHAR_ST); + rxvt_xterm_seq(r, XTerm_iconName, r->h->rs[Rs_iconName], CHAR_ST); + +diff -Naurp rxvt-2.7.10.orig/src/rxvt.h rxvt-2.7.10/src/rxvt.h +--- rxvt-2.7.10.orig/src/rxvt.h 2003-03-06 20:17:18.000000000 -0500 ++++ rxvt-2.7.10/src/rxvt.h 2003-03-31 14:11:43.000000000 -0500 +@@ -581,6 +581,9 @@ enum { + Rs_modifier, + Rs_answerbackstring, + Rs_tripleclickwords, ++ Rs_borderless, ++ Rs_overrideRedirect, ++ Rs_bellCommand, + NUM_RESOURCES + } ; + +diff -Naurp rxvt-2.7.10.orig/src/rxvtlib.h.in rxvt-2.7.10/src/rxvtlib.h.in +--- rxvt-2.7.10.orig/src/rxvtlib.h.in 2003-02-27 20:03:16.000000000 -0500 ++++ rxvt-2.7.10/src/rxvtlib.h.in 2003-03-31 14:12:59.000000000 -0500 +@@ -218,6 +218,8 @@ typedef enum { + #define Opt_scrollWithBuffer (1LU<<17) + #define Opt_jumpScroll (1LU<<18) + #define Opt_mouseWheelScrollPage (1LU<<19) ++#define Opt_borderless (1LU<<20) ++#define Opt_overrideredirect (1LU<<21) + /* place holder used for parsing command-line options */ + #define Opt_Reverse (1LU<<30) + #define Opt_Boolean (1LU<<31) +diff -Naurp rxvt-2.7.10.orig/src/screen.c rxvt-2.7.10/src/screen.c +--- rxvt-2.7.10.orig/src/screen.c 2003-03-23 11:56:06.000000000 -0500 ++++ rxvt-2.7.10/src/screen.c 2003-03-31 14:11:43.000000000 -0500 +@@ -29,6 +29,7 @@ + #include "screen.intpro" /* PROTOS for internal routines */ + + #include /* get the typedef for CARD32 */ ++#include + + /* ------------------------------------------------------------------------- */ + #ifdef MULTICHAR_SET +@@ -1832,6 +1833,9 @@ rxvt_scr_changeview(rxvt_t *r, u_int16_t + void + rxvt_scr_bell(rxvt_t *r) + { ++ if (r->h->rs[Rs_bellCommand]) { ++ system(r->h->rs[Rs_bellCommand]); ++ } else { + #ifndef NO_BELL + # ifndef NO_MAPALERT + # ifdef MAPALERT_OPTION +@@ -1845,6 +1849,7 @@ rxvt_scr_bell(rxvt_t *r) + } else + XBell(r->Xdisplay, 0); + #endif ++ } + } + + /* ------------------------------------------------------------------------- */ +diff -Naurp rxvt-2.7.10.orig/src/xdefaults.c rxvt-2.7.10/src/xdefaults.c +--- rxvt-2.7.10.orig/src/xdefaults.c 2003-02-27 20:03:18.000000000 -0500 ++++ rxvt-2.7.10/src/xdefaults.c 2003-03-31 14:11:43.000000000 -0500 +@@ -108,6 +108,9 @@ static const struct { + "scroll-on-tty-output inhibit"), + BOOL(Rs_scrollTtyKeypress, "scrollTtyKeypress", "sk", Opt_scrollTtyKeypress, + "scroll-on-keypress"), ++ BOOL(Rs_borderless, "borderless", "nb", Opt_borderless, "use MWM hints to remove the window border"), ++ BOOL(Rs_overrideRedirect, "overrideRedirect", "or", Opt_overrideredirect, "set the override_redirect flag"), ++ STRG(Rs_bellCommand, "bellCommand", "bc", "string", "command to execute instead of beeping"), + BOOL(Rs_scrollWithBuffer, "scrollWithBuffer", "sw", Opt_scrollWithBuffer, + "scroll-with-buffer"), + #ifdef TRANSPARENT diff --git a/x11-terms/rxvt/files/rxvt-2.7.10-line-scroll.patch b/x11-terms/rxvt/files/rxvt-2.7.10-line-scroll.patch new file mode 100644 index 000000000000..cabb21cbef29 --- /dev/null +++ b/x11-terms/rxvt/files/rxvt-2.7.10-line-scroll.patch @@ -0,0 +1,13 @@ +--- src/feature.h.orig 2005-06-29 11:58:06.000000000 -0400 ++++ src/feature.h 2005-06-29 11:58:41.000000000 -0400 +@@ -211,8 +211,8 @@ + * SCROLL_ON_* defines above.). + * Also for modifier+Home/End keys to move to top/bottom + */ +-/* #define SCROLL_ON_UPDOWN_KEYS */ +-/* #define SCROLL_ON_HOMEEND_KEYS */ ++#define SCROLL_ON_UPDOWN_KEYS ++#define SCROLL_ON_HOMEEND_KEYS + + /* + * Allow unshifted Next/Prior keys to scroll forward/back diff --git a/x11-terms/rxvt/files/rxvt-2.7.10-rk.patch b/x11-terms/rxvt/files/rxvt-2.7.10-rk.patch new file mode 100644 index 000000000000..471c7a26b739 --- /dev/null +++ b/x11-terms/rxvt/files/rxvt-2.7.10-rk.patch @@ -0,0 +1,82 @@ +diff -urN rxvt-2.7.10.ORIG/src/screen.c rxvt-2.7.10/src/screen.c +--- rxvt-2.7.10.ORIG/src/screen.c 2003-03-24 01:56:06.000000000 +0900 ++++ rxvt-2.7.10/src/screen.c 2003-06-30 02:11:27.000000000 +0900 +@@ -828,10 +828,18 @@ + if (h->chstat == WBYTE) { + h->rstyle |= RS_multi2; /* multibyte 2nd byte */ + h->chstat = SBYTE; +- if ((r->encoding_method == EUCJ) || (r->encoding_method == GB)) ++ if ((r->encoding_method == EUCJ) && ((char)stp[r->screen.cur.col - 1] == (char)0x8e)) ++ h->rstyle &= ~RS_multiMask, r->screen.cur.col--; ++ else if ((r->encoding_method == EUCJ) || (r->encoding_method == GB)) + c |= 0x80; /* maybe overkill, but makes it selectable */ + } else if (h->chstat == SBYTE) { +- if (h->multi_byte || (c & 0x80)) { /* multibyte 1st byte */ ++ if (r->encoding_method == SJIS) { ++ if ((h->multi_byte || ((c >= (char)0x81 && c <= (char)0x9f) || ++(c >= (char)0xe0 && c <= (char)0xfc)))) { ++ h->rstyle |= RS_multi1; ++ h->chstat = WBYTE; ++ } ++ } else if (h->multi_byte || (c & 0x80)) { /* multibyte 1st byte */ + h->rstyle |= RS_multi1; + h->chstat = WBYTE; + if ((r->encoding_method == EUCJ) +@@ -2932,6 +2940,9 @@ + unsigned char *new_selection_text; + char *str; + text_t *t; ++#ifdef MULTICHAR_SET ++ rend_t *tr; ++#endif + + D_SELECT((stderr, "rxvt_selection_make(): r->selection.op=%d, r->selection.clicks=%d", r->selection.op, r->selection.clicks)); + switch (r->selection.op) { +@@ -2966,10 +2977,22 @@ + */ + for (; row < end_row; row++, col = 0) { + t = &(r->screen.text[row][col]); ++#ifdef MULTICHAR_SET ++ tr = &(r->screen.rend[row][col]); ++#endif + if ((end_col = r->screen.tlen[row]) == -1) + end_col = r->TermWin.ncol; ++#ifdef MULTICHAR_SET ++ for (; col < end_col; col++, str++, t++, tr++) { ++ if ( (r->encoding_method == EUCJ) ++ && (*t & 0x80) && !(*tr & RS_multiMask) ) ++ *str++ = 0x8E; ++ *str = *t; ++ } ++#else + for (; col < end_col; col++) + *str++ = *t++; ++#endif + if (r->screen.tlen[row] != -1) + *str++ = '\n'; + } +@@ -2977,12 +3000,24 @@ + * B: end row + */ + t = &(r->screen.text[row][col]); ++#ifdef MULTICHAR_SET ++ tr = &(r->screen.rend[row][col]); ++#endif + end_col = r->screen.tlen[row]; + if (end_col == -1 || r->selection.end.col <= end_col) + end_col = r->selection.end.col; + MIN_IT(end_col, r->TermWin.ncol); /* CHANGE */ ++#ifdef MULTICHAR_SET ++ for (; col < end_col; col++, str++, t++, tr++) { ++ if ( (r->encoding_method == EUCJ) ++ && (*t & 0x80) && !(*tr & RS_multiMask) ) ++ *str++ = 0x8E; ++ *str = *t; ++ } ++#else + for (; col < end_col; col++) + *str++ = *t++; ++#endif + #ifndef NO_OLD_SELECTION + if (r->selection_style == OLD_SELECT) + if (end_col == r->TermWin.ncol) diff --git a/x11-terms/rxvt/metadata.xml b/x11-terms/rxvt/metadata.xml new file mode 100644 index 000000000000..0d1ab3f43671 --- /dev/null +++ b/x11-terms/rxvt/metadata.xml @@ -0,0 +1,21 @@ + + + + + maintainer-needed@gentoo.org + + + rxvt is a color vt102 terminal emulator intended as an xterm(1) + replacement for users who do not require features such as Tektronix + 4014 emulation and toolkit-style configurability. As a result, rxvt + uses much less swap space. + + + Define LINUX_KEYS (changes Home/End key) + Enable resources via X instead of rxvt small + version + + + rxvt + + diff --git a/x11-terms/rxvt/rxvt-2.7.10-r4.ebuild b/x11-terms/rxvt/rxvt-2.7.10-r4.ebuild new file mode 100644 index 000000000000..4204dba86dd0 --- /dev/null +++ b/x11-terms/rxvt/rxvt-2.7.10-r4.ebuild @@ -0,0 +1,93 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI=5 + +inherit eutils flag-o-matic libtool toolchain-funcs + +DESCRIPTION="A nice small x11 terminal" +HOMEPAGE="http://rxvt.sourceforge.net/ + http://www.giga.it.okayama-u.ac.jp/~ishihara/opensource/" +SRC_URI="mirror://sourceforge/rxvt/${P}.tar.gz + http://www.giga.it.okayama-u.ac.jp/~ishihara/opensource/${P}-xim-fix.patch.gz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="alpha amd64 hppa ~mips ppc ppc64 sparc x86" +IUSE="motif cjk xgetdefault linuxkeys" + +RDEPEND="x11-libs/libX11 + x11-libs/libXpm + x11-libs/libXext + motif? ( >=x11-libs/motif-2.3:0 )" +DEPEND="${RDEPEND} + x11-proto/xproto" + +src_prepare() { + tc-export AR + + epatch "${FILESDIR}"/${P}-line-scroll.patch\ + "${FILESDIR}"/${P}-asneeded.patch + use motif && epatch "${FILESDIR}"/${P}-azz4.diff + if use cjk ; then + epatch "${DISTDIR}"/${P}-xim-fix.patch.gz + if use linguas_ja ; then + epatch "${FILESDIR}"/${P}-rk.patch + fi + fi + + epatch "${FILESDIR}"/${P}-CVE-2008-1142-DISPLAY.patch + elibtoolize +} + +src_compile() { + local term + if [ -n "${RXVT_TERM}" ] ; then + term="${RXVT_TERM}" + else + term="rxvt" + fi + + # bug #22325 + use linuxkeys && append-flags -DLINUX_KEYS + + econf \ + --enable-everything \ + --enable-rxvt-scroll \ + --enable-next-scroll \ + --enable-xterm-scroll \ + --enable-transparency \ + --enable-xpm-background \ + --enable-utmp \ + --enable-wtmp \ + --enable-mousewheel \ + --enable-slipwheeling \ + --enable-smart-resize \ + --enable-256-color \ + --enable-menubar \ + $(use_enable cjk languages) \ + --enable-xim \ + --enable-shared \ + --enable-keepscrolling \ + --with-term=${term} \ + $(use_enable xgetdefault) +} + +src_install() { + emake DESTDIR="${D}" install + + cd "${S}"/doc + dodoc README* *.txt BUGS FAQ + dohtml *.html +} + +pkg_postinst() { + einfo + einfo "If you want to change default TERM variable other than rxvt," + einfo "set RXVT_TERM environment variable and then emerge rxvt." + einfo "Especially, if you use rxvt under monochrome X you might need to run" + einfo "\t RXVT_TERM=rxvt-basic emerge rxvt" + einfo "otherwise curses based program will not work." + einfo +} -- cgit v1.2.3-65-gdbad