FreeBSD Bugzilla – Attachment 202146 Details for
Bug 233010
[new port] x11/kitty: Cross-platform, fast, feature full, GPU based terminal emulator
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Small fixes + wayland support
0001-x11-kitty-Add-the-terminal-emulator-kitty.patch (text/plain), 17.81 KB, created by
Ben Widawsky
on 2019-02-19 02:17:11 UTC
(
hide
)
Description:
Small fixes + wayland support
Filename:
MIME Type:
Creator:
Ben Widawsky
Created:
2019-02-19 02:17:11 UTC
Size:
17.81 KB
patch
obsolete
>From 06bf4d4168f18e4de643d47b6bd619659a8878ca Mon Sep 17 00:00:00 2001 >From: Ben Widawsky <ben.widawsky@intel.com> >Date: Mon, 5 Nov 2018 18:07:06 -0800 >Subject: [PATCH] x11/kitty: Add the terminal emulator kitty > >v2: Taken updates from ndowns >https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=233010#c1 >Fixed terminfo/termcap stuff > >v3: Update to version 0.13.0 >Go back to using tic at install > >v4: Update to version 0.13.3 >Depend on termcap instead of USES=terminfo >https://reviews.freebsd.org/D19060 > >v5: >Add Wayland support from myfreeweb - The Wayland autodetect broke anyway >somewhere in the 0.13 releases. So it was either patch it out, or make >it work. Since myfreeweb had already made it work, just use it. > >Fix for glfw/wl >--- > x11/Makefile | 1 + > x11/kitty/Makefile | 69 ++++++++++++++ > x11/kitty/distinfo | 3 + > .../bell-off-patch-kitty_config__data.py | 11 +++ > x11/kitty/files/docs-off-patch-setup.py | 37 ++++++++ > x11/kitty/files/docs-on-patch-setup.py | 28 ++++++ > x11/kitty/files/patch-glfw_memfd.h | 14 +++ > x11/kitty/files/patch-glfw_wl__init.c | 11 +++ > x11/kitty/files/patch-glfw_wl__window.c | 26 ++++++ > x11/kitty/files/patch-kitty_child.c | 22 +++++ > x11/kitty/files/patch-kitty_child.py | 19 ++++ > x11/kitty/pkg-descr | 20 +++++ > x11/kitty/pkg-plist | 90 +++++++++++++++++++ > 13 files changed, 351 insertions(+) > create mode 100644 x11/kitty/Makefile > create mode 100644 x11/kitty/distinfo > create mode 100644 x11/kitty/files/bell-off-patch-kitty_config__data.py > create mode 100644 x11/kitty/files/docs-off-patch-setup.py > create mode 100644 x11/kitty/files/docs-on-patch-setup.py > create mode 100644 x11/kitty/files/patch-glfw_memfd.h > create mode 100644 x11/kitty/files/patch-glfw_wl__init.c > create mode 100644 x11/kitty/files/patch-glfw_wl__window.c > create mode 100644 x11/kitty/files/patch-kitty_child.c > create mode 100644 x11/kitty/files/patch-kitty_child.py > create mode 100644 x11/kitty/pkg-descr > create mode 100644 x11/kitty/pkg-plist > >diff --git a/x11/Makefile b/x11/Makefile >index d8e3e2cad0b1..dbb9ded7edbe 100644 >--- a/x11/Makefile >+++ b/x11/Makefile >@@ -129,6 +129,7 @@ > SUBDIR += kf5-kwayland > SUBDIR += kf5-kwindowsystem > SUBDIR += kf5-plasma-framework >+ SUBDIR += kitty > SUBDIR += konsole > SUBDIR += leechcraft > SUBDIR += lemonbar >diff --git a/x11/kitty/Makefile b/x11/kitty/Makefile >new file mode 100644 >index 000000000000..eb433243b953 >--- /dev/null >+++ b/x11/kitty/Makefile >@@ -0,0 +1,69 @@ >+# Created by: Ben Widawsky <bwidawsk@FreeBSD.org> >+# $FreeBSD$ >+ >+PORTNAME= kitty >+PORTVERSION= 0.13.3 >+DISTVERSIONPREFIX= v >+CATEGORIES= x11 >+ >+MAINTAINER= bwidawsk@FreeBSD.org >+COMMENT= Cross-platform, fast, feature full, GPU based terminal emulator >+ >+LICENSE= GPLv3 >+LICENSE_FILE= ${WRKSRC}/LICENSE >+ >+LIB_DEPENDS= libdbus-1.so:devel/dbus \ >+ libfontconfig.so:x11-fonts/fontconfig \ >+ libfreetype.so:print/freetype2 \ >+ libglfw.so:graphics/glfw \ >+ libharfbuzz.so:print/harfbuzz \ >+ libpng.so:graphics/png \ >+ libxkbcommon.so:x11/libxkbcommon \ >+ libncursesw.so:devel/ncurses \ >+ libdbus-1.so:devel/dbus \ >+ libwayland-egl.so:graphics/wayland \ >+ libepoll-shim.so:devel/libepoll-shim \ >+ libpng.so:graphics/png >+ >+USES= gl gmake pkgconfig:build python:3.5+ shebangfix terminfo >+USE_GL= gl >+USE_XORG= x11 xft xrandr xinerama xcb xcursor >+USE_GITHUB= yes >+GH_ACCOUNT= kovidgoyal >+ >+SHEBANG_FILES= kitty/launcher/kitty >+BINARY_ALIAS= python3=${PYTHON_CMD} >+ >+OPTIONS_DEFINE= ICAT DOCS BELL NLS >+OPTIONS_DEFAULT= NLS >+ >+ICAT_DESC= tool to display images in the terminal >+ICAT_LIB_DEPENDS= libMagickCore-6.so:graphics/ImageMagick >+ >+DOCS_BUILD_DEPENDS= ${PYTHON_PKGNAMEPREFIX}sphinx>=1.7:textproc/py-sphinx@${PY_FLAVOR} >+DOCS_EXTRA_PATCHES= ${PATCHDIR}/docs-on-patch-setup.py >+DOCS_EXTRA_PATCHES_OFF= ${PATCHDIR}/docs-off-patch-setup.py >+ >+BELL_DESC= disable audio bell by default (can be changed in kitty.conf) >+BELL_EXTRA_PATCHES_OFF= ${PATCHDIR}/bell-off-patch-kitty_config__data.py >+ >+NLS_USES= gettext >+ >+post-patch-DOCS-on: >+ ${REINPLACE_CMD} -e 's|python3|${PYTHON_CMD}|g' ${WRKSRC}/docs/Makefile >+ ${REINPLACE_CMD} -e 's|sphinx-build|&-${PYTHON_VER}|' ${WRKSRC}/docs/Makefile >+ >+do-build: >+ cd ${WRKSRC} && CC=clang ${PYTHON_CMD} setup.py --prefix ${STAGEDIR}${PREFIX} linux-package >+ >+do-install: >+ @${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/kitty/kitty/fast_data_types.so \ >+ ${STAGEDIR}${PREFIX}/lib/kitty/kitty/glfw-x11.so \ >+ ${STAGEDIR}${PREFIX}/lib/kitty/kittens/diff/diff_speedup.so \ >+ ${STAGEDIR}${PREFIX}/lib/kitty/kittens/unicode_input/unicode_names.so \ >+ ${STAGEDIR}${PREFIX}/lib/kitty/kitty/glfw-wayland.so \ >+ ${STAGEDIR}${PREFIX}/bin/kitty >+ ${INSTALL_DATA} ${WRKSRC}/terminfo/kitty.terminfo \ >+ ${STAGEDIR}${PREFIX}/share/misc/ >+ >+.include <bsd.port.mk> >diff --git a/x11/kitty/distinfo b/x11/kitty/distinfo >new file mode 100644 >index 000000000000..ec2256da40fa >--- /dev/null >+++ b/x11/kitty/distinfo >@@ -0,0 +1,3 @@ >+TIMESTAMP = 1549088378 >+SHA256 (kovidgoyal-kitty-v0.13.3_GH0.tar.gz) = b6f48404349ca99049de40e7bb55511de9ea04a6b1567068997d3fddb2c20f08 >+SIZE (kovidgoyal-kitty-v0.13.3_GH0.tar.gz) = 3510975 >diff --git a/x11/kitty/files/bell-off-patch-kitty_config__data.py b/x11/kitty/files/bell-off-patch-kitty_config__data.py >new file mode 100644 >index 000000000000..d45f21ff6c20 >--- /dev/null >+++ b/x11/kitty/files/bell-off-patch-kitty_config__data.py >@@ -0,0 +1,11 @@ >+--- kitty/config_data.py.orig 2018-11-06 01:20:16 UTC >++++ kitty/config_data.py >+@@ -426,7 +426,7 @@ If so, set this to no.''')) >+ >+ g('bell') # {{{ >+ >+-o('enable_audio_bell', True, long_text=_(''' >++o('enable_audio_bell', False, long_text=_(''' >+ Enable/disable the audio bell. Useful in environments that require silence.''')) >+ >+ o('visual_bell_duration', 0.0, option_type=positive_float, long_text=_(''' >diff --git a/x11/kitty/files/docs-off-patch-setup.py b/x11/kitty/files/docs-off-patch-setup.py >new file mode 100644 >index 000000000000..9cfb1dbba1e2 >--- /dev/null >+++ b/x11/kitty/files/docs-off-patch-setup.py >@@ -0,0 +1,37 @@ >+--- setup.py.orig 2018-12-06 05:19:25 UTC >++++ setup.py >+@@ -600,16 +600,6 @@ def package(args, for_bundle=False, sh_launcher=False) >+ if os.path.exists(libdir): >+ shutil.rmtree(libdir) >+ os.makedirs(os.path.join(libdir, 'logo')) >+- for x in (libdir, os.path.join(ddir, 'share')): >+- odir = os.path.join(x, 'terminfo') >+- safe_makedirs(odir) >+- proc = subprocess.run(['tic', '-x', '-o' + odir, 'terminfo/kitty.terminfo'], check=True, stderr=subprocess.PIPE) >+- regex = '^"terminfo/kitty.terminfo", line [0-9]+, col [0-9]+, terminal \'xterm-kitty\': older tic versions may treat the description field as an alias$' >+- for error in proc.stderr.decode('utf-8').splitlines(): >+- if not re.match(regex, error): >+- print(error, file=sys.stderr) >+- if not glob.glob(os.path.join(odir, '*/xterm-kitty')): >+- raise SystemExit('tic failed to output the compiled kitty terminfo file') >+ shutil.copy2('__main__.py', libdir) >+ shutil.copy2('logo/kitty.rgba', os.path.join(libdir, 'logo')) >+ shutil.copy2('logo/beam-cursor.png', os.path.join(libdir, 'logo')) >+@@ -634,8 +624,6 @@ def package(args, for_bundle=False, sh_launcher=False) >+ safe_makedirs(launcher_dir) >+ build_linux_launcher(args, launcher_dir, for_bundle, sh_launcher, args.for_freeze) >+ if not is_macos: # {{{ linux desktop gunk >+- copy_man_pages(ddir) >+- copy_html_docs(ddir) >+ icdir = os.path.join(ddir, 'share', 'icons', 'hicolor', '256x256', 'apps') >+ safe_makedirs(icdir) >+ shutil.copy2('logo/kitty.png', icdir) >+@@ -822,8 +810,6 @@ def main(): >+ ) >+ elif args.action == 'linux-package': >+ build(args, native_optimizations=False) >+- if not os.path.exists(os.path.join(base, 'docs/_build/html')): >+- run_tool(['make', 'docs']) >+ package(args) >+ elif args.action == 'osx-bundle': >+ build(args, native_optimizations=False) >diff --git a/x11/kitty/files/docs-on-patch-setup.py b/x11/kitty/files/docs-on-patch-setup.py >new file mode 100644 >index 000000000000..a37878e084e1 >--- /dev/null >+++ b/x11/kitty/files/docs-on-patch-setup.py >@@ -0,0 +1,28 @@ >+--- setup.py.orig 2018-12-06 05:25:15 UTC >++++ setup.py >+@@ -600,16 +600,6 @@ def package(args, for_bundle=False, sh_launcher=False) >+ if os.path.exists(libdir): >+ shutil.rmtree(libdir) >+ os.makedirs(os.path.join(libdir, 'logo')) >+- for x in (libdir, os.path.join(ddir, 'share')): >+- odir = os.path.join(x, 'terminfo') >+- safe_makedirs(odir) >+- proc = subprocess.run(['tic', '-x', '-o' + odir, 'terminfo/kitty.terminfo'], check=True, stderr=subprocess.PIPE) >+- regex = '^"terminfo/kitty.terminfo", line [0-9]+, col [0-9]+, terminal \'xterm-kitty\': older tic versions may treat the description field as an alias$' >+- for error in proc.stderr.decode('utf-8').splitlines(): >+- if not re.match(regex, error): >+- print(error, file=sys.stderr) >+- if not glob.glob(os.path.join(odir, '*/xterm-kitty')): >+- raise SystemExit('tic failed to output the compiled kitty terminfo file') >+ shutil.copy2('__main__.py', libdir) >+ shutil.copy2('logo/kitty.rgba', os.path.join(libdir, 'logo')) >+ shutil.copy2('logo/beam-cursor.png', os.path.join(libdir, 'logo')) >+@@ -823,7 +813,7 @@ def main(): >+ elif args.action == 'linux-package': >+ build(args, native_optimizations=False) >+ if not os.path.exists(os.path.join(base, 'docs/_build/html')): >+- run_tool(['make', 'docs']) >++ run_tool(['gmake', 'docs']) >+ package(args) >+ elif args.action == 'osx-bundle': >+ build(args, native_optimizations=False) >diff --git a/x11/kitty/files/patch-glfw_memfd.h b/x11/kitty/files/patch-glfw_memfd.h >new file mode 100644 >index 000000000000..4a1e222d6526 >--- /dev/null >+++ b/x11/kitty/files/patch-glfw_memfd.h >@@ -0,0 +1,14 @@ >+--- glfw/memfd.h.orig 2019-01-01 18:01:01 UTC >++++ glfw/memfd.h >+@@ -6,7 +6,9 @@ >+ >+ #pragma once >+ >+-#ifdef HAS_MEMFD_CREATE >++#ifdef __FreeBSD__ >++// use SHM_ANON >++#elif HAS_MEMFD_CREATE >+ >+ #include <unistd.h> >+ #include <sys/syscall.h> >+ >diff --git a/x11/kitty/files/patch-glfw_wl__init.c b/x11/kitty/files/patch-glfw_wl__init.c >new file mode 100644 >index 000000000000..b7a076dc619a >--- /dev/null >+++ b/x11/kitty/files/patch-glfw_wl__init.c >@@ -0,0 +1,11 @@ >+--- glfw/wl_init.c.orig 2019-02-17 23:49:36 UTC >++++ glfw/wl_init.c >+@@ -31,7 +31,7 @@ >+ #include <assert.h> >+ #include <errno.h> >+ #include <limits.h> >+-#include <linux/input.h> >++#include <dev/evdev/input.h> >+ #include <stdio.h> >+ #include <stdlib.h> >+ #include <string.h> >diff --git a/x11/kitty/files/patch-glfw_wl__window.c b/x11/kitty/files/patch-glfw_wl__window.c >new file mode 100644 >index 000000000000..6297129b0cac >--- /dev/null >+++ b/x11/kitty/files/patch-glfw_wl__window.c >@@ -0,0 +1,26 @@ >+--- glfw/wl_window.c.orig 2019-01-01 17:59:15 UTC >++++ glfw/wl_window.c >+@@ -140,7 +140,9 @@ static int >+ createAnonymousFile(off_t size) >+ { >+ int ret; >+-#ifdef HAS_MEMFD_CREATE >++#ifdef __FreeBSD__ >++ int fd = shm_open(SHM_ANON, O_RDWR | O_CLOEXEC, 0600); >++#elif HAS_MEMFD_CREATE >+ int fd = memfd_create("glfw-shared", MFD_CLOEXEC | MFD_ALLOW_SEALING); >+ if (fd < 0) return -1; >+ // We can add this seal before calling posix_fallocate(), as the file >+@@ -173,7 +175,11 @@ createAnonymousFile(off_t size) >+ if (fd < 0) >+ return -1; >+ #endif >++#ifdef __FreeBSD__ >++ ret = ftruncate(fd, size); >++#else >+ ret = posix_fallocate(fd, 0, size); >++#endif >+ if (ret != 0) >+ { >+ close(fd); >+ >diff --git a/x11/kitty/files/patch-kitty_child.c b/x11/kitty/files/patch-kitty_child.c >new file mode 100644 >index 000000000000..823b328ca6f0 >--- /dev/null >+++ b/x11/kitty/files/patch-kitty_child.c >@@ -0,0 +1,22 @@ >+--- kitty/child.c.orig 2018-11-06 00:56:31 UTC >++++ kitty/child.c >+@@ -12,6 +12,7 @@ >+ #include <errno.h> >+ #include <string.h> >+ #include <signal.h> >++#include <sys/ioctl.h> >+ >+ static inline char** >+ serialize_string_tuple(PyObject *src) { >+@@ -87,10 +88,9 @@ spawn(PyObject *self UNUSED, PyObject *args) { >+ // Establish the controlling terminal (see man 7 credentials) >+ int tfd = open(name, O_RDWR); >+ if (tfd == -1) exit_on_err("Failed to open controlling terminal"); >+-#ifdef TIOCSTTY >++ >+ // On BSD open() does not establish the controlling terminal >+ if (ioctl(tfd, TIOCSCTTY, 0) == -1) exit_on_err("Failed to set controlling terminal with TIOCSCTTY"); >+-#endif >+ close(tfd); >+ >+ // Redirect stdin/stdout/stderr to the pty >diff --git a/x11/kitty/files/patch-kitty_child.py b/x11/kitty/files/patch-kitty_child.py >new file mode 100644 >index 000000000000..423234394d19 >--- /dev/null >+++ b/x11/kitty/files/patch-kitty_child.py >@@ -0,0 +1,19 @@ >+--- kitty/child.py.orig 2019-02-18 00:01:25 UTC >++++ kitty/child.py >+@@ -4,6 +4,7 @@ >+ >+ import fcntl >+ import os >++import pty >+ from collections import defaultdict >+ from contextlib import contextmanager >+ >+@@ -153,7 +154,7 @@ class Child: >+ if self.forked: >+ return >+ self.forked = True >+- master, slave = os.openpty() # Note that master and slave are in blocking mode >++ master, slave = pty.openpty() # Note that master and slave are in blocking mode >+ remove_cloexec(slave) >+ fast_data_types.set_iutf8(master, True) >+ stdin, self.stdin = self.stdin, None >diff --git a/x11/kitty/pkg-descr b/x11/kitty/pkg-descr >new file mode 100644 >index 000000000000..f7ef5f288e7d >--- /dev/null >+++ b/x11/kitty/pkg-descr >@@ -0,0 +1,20 @@ >+Kitty is the fast, featureful, GPU based terminal emulator >+ : >+kitty is designed for power keyboard users. To that end all its controls work >+with the keyboard (although it fully supports mouse interactions as well). Its >+configuration is a simple, human editable, single file for easy reproducibility >+(I like to store configuration in source control). >+ >+The code in kitty is designed to be simple, modular and hackable. It is written >+in a mix of C (for performance sensitive parts) and Python (for easy hackability >+of the UI). It does not depend on any large and complex UI toolkit, using only >+OpenGL for rendering everything. >+ >+Finally, kitty is designed from the ground up to support all modern terminal >+features, such as unicode, true color, bold/italic fonts, text formatting, etc. >+It even extends existing text formatting escape codes, to add support for >+features not available elsewhere, such as colored and styled (curly) underlines. >+One of the design goals of kitty is to be easily extensible so that new features >+can be added in the future with relatively less effort. >+ >+WWW: https://sw.kovidgoyal.net/kitty/ >diff --git a/x11/kitty/pkg-plist b/x11/kitty/pkg-plist >new file mode 100644 >index 000000000000..ef90ae51ae54 >--- /dev/null >+++ b/x11/kitty/pkg-plist >@@ -0,0 +1,90 @@ >+bin/kitty >+lib/kitty/__main__.py >+lib/kitty/kittens/__init__.py >+lib/kitty/kittens/ask/__init__.py >+lib/kitty/kittens/ask/main.py >+lib/kitty/kittens/clipboard/__init__.py >+lib/kitty/kittens/clipboard/main.py >+lib/kitty/kittens/diff/__init__.py >+lib/kitty/kittens/diff/collect.py >+lib/kitty/kittens/diff/config.py >+lib/kitty/kittens/diff/config_data.py >+lib/kitty/kittens/diff/diff_speedup.so >+lib/kitty/kittens/diff/highlight.py >+lib/kitty/kittens/diff/main.py >+lib/kitty/kittens/diff/patch.py >+lib/kitty/kittens/diff/render.py >+lib/kitty/kittens/diff/search.py >+lib/kitty/kittens/hints/__init__.py >+lib/kitty/kittens/hints/main.py >+lib/kitty/kittens/hints/url_regex.py >+lib/kitty/kittens/icat/__init__.py >+lib/kitty/kittens/icat/main.py >+lib/kitty/kittens/panel/__init__.py >+lib/kitty/kittens/panel/main.py >+lib/kitty/kittens/resize_window/__init__.py >+lib/kitty/kittens/resize_window/main.py >+lib/kitty/kittens/runner.py >+lib/kitty/kittens/show_error/__init__.py >+lib/kitty/kittens/show_error/main.py >+lib/kitty/kittens/ssh/__init__.py >+lib/kitty/kittens/ssh/main.py >+lib/kitty/kittens/tui/__init__.py >+lib/kitty/kittens/tui/handler.py >+lib/kitty/kittens/tui/images.py >+lib/kitty/kittens/tui/line_edit.py >+lib/kitty/kittens/tui/loop.py >+lib/kitty/kittens/tui/operations.py >+lib/kitty/kittens/unicode_input/__init__.py >+lib/kitty/kittens/unicode_input/main.py >+lib/kitty/kittens/unicode_input/unicode_names.so >+lib/kitty/kitty/__init__.py >+lib/kitty/kitty/blit_fragment.glsl >+lib/kitty/kitty/blit_vertex.glsl >+lib/kitty/kitty/border_fragment.glsl >+lib/kitty/kitty/border_vertex.glsl >+lib/kitty/kitty/borders.py >+lib/kitty/kitty/boss.py >+lib/kitty/kitty/cell_fragment.glsl >+lib/kitty/kitty/cell_vertex.glsl >+lib/kitty/kitty/child.py >+lib/kitty/kitty/cli.py >+lib/kitty/kitty/client.py >+lib/kitty/kitty/cmds.py >+lib/kitty/kitty/complete.py >+lib/kitty/kitty/conf/__init__.py >+lib/kitty/kitty/conf/definition.py >+lib/kitty/kitty/conf/utils.py >+lib/kitty/kitty/config.py >+lib/kitty/kitty/config_data.py >+lib/kitty/kitty/constants.py >+lib/kitty/kitty/fast_data_types.so >+lib/kitty/kitty/fonts/__init__.py >+lib/kitty/kitty/fonts/box_drawing.py >+lib/kitty/kitty/fonts/core_text.py >+lib/kitty/kitty/fonts/fontconfig.py >+lib/kitty/kitty/fonts/list.py >+lib/kitty/kitty/fonts/render.py >+lib/kitty/kitty/glfw-x11.so >+lib/kitty/kitty/graphics_fragment.glsl >+lib/kitty/kitty/graphics_vertex.glsl >+lib/kitty/kitty/key_encoding.py >+lib/kitty/kitty/keys.py >+lib/kitty/kitty/launcher/kitty >+lib/kitty/kitty/layout.py >+lib/kitty/kitty/main.py >+lib/kitty/kitty/remote_control.py >+lib/kitty/kitty/rgb.py >+lib/kitty/kitty/session.py >+lib/kitty/kitty/shell.py >+lib/kitty/kitty/tab_bar.py >+lib/kitty/kitty/tabs.py >+lib/kitty/kitty/terminfo.py >+lib/kitty/kitty/utils.py >+lib/kitty/kitty/window.py >+lib/kitty/logo/beam-cursor.png >+lib/kitty/logo/beam-cursor@2x.png >+lib/kitty/logo/kitty.rgba >+share/applications/kitty.desktop >+share/icons/hicolor/256x256/apps/kitty.png >+share/misc/kitty.terminfo >-- >2.20.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 233010
:
198996
|
199085
|
201630
|
202146
|
202705
|
202721
|
202749
|
224668
|
225004
|
225021
|
225057