From 4c1f65d97a7884bd1fdac2f7c00d46cce3d1f994 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Thu, 13 May 2021 10:52:12 -0400 Subject: [PATCH 01/23] Test for leading slash check. --- src/allmydata/test/cli/test_put.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/allmydata/test/cli/test_put.py b/src/allmydata/test/cli/test_put.py index c6a577074..d916ae7a2 100644 --- a/src/allmydata/test/cli/test_put.py +++ b/src/allmydata/test/cli/test_put.py @@ -486,3 +486,21 @@ class Put(GridTestMixin, CLITestMixin, unittest.TestCase): self.failUnlessReallyEqual(rc_out_err[1], DATA)) return d + + def test_no_leading_slash(self): + self.basedir = "cli/Put/leading_slash" + self.set_up_grid(oneshare=True) + + DATA1 = b"data" * 100 + fn1 = os.path.join(self.basedir, "DATA1") + + d = self.do_cli("create-alias", "tahoe") + d.addCallback(lambda res: + self.do_cli("put", fn1, "tahoe:/uploaded.txt")) + def _check(args): + (rc, out, err) = args + self.assertEqual(rc, 1) + self.failUnlessIn("must not start with a slash", err) + self.assertEqual(len(out), 0, out) + d.addCallback(_check) + return d From 01db93119266067fcd65bca65babe96d978685fb Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Tue, 18 May 2021 13:35:34 -0400 Subject: [PATCH 02/23] A test that doesn't really increase coverage much. Ideally this would test immutable directories to test caching logic, but that's too much of a pain. Since I already have this written, going to leave in cause why not. --- src/allmydata/test/cli/test_cp.py | 37 +++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/allmydata/test/cli/test_cp.py b/src/allmydata/test/cli/test_cp.py index d198a832c..7e651b737 100644 --- a/src/allmydata/test/cli/test_cp.py +++ b/src/allmydata/test/cli/test_cp.py @@ -238,6 +238,43 @@ class Cp(GridTestMixin, CLITestMixin, unittest.TestCase): return d + @defer.inlineCallbacks + def test_cp_duplicate_directories(self): + self.basedir = "cli/Cp/cp_duplicate_directories" + self.set_up_grid(oneshare=True) + + filename = os.path.join(self.basedir, "file") + data = b"abc\xff\x00\xee" + with open(filename, "wb") as f: + f.write(data) + + yield self.do_cli("create-alias", "tahoe") + (rc, out, err) = yield self.do_cli("mkdir", "tahoe:test1") + self.assertEqual(rc, 0, (rc, err)) + dircap = out.strip() + + (rc, out, err) = yield self.do_cli("cp", filename, "tahoe:test1/file") + self.assertEqual(rc, 0, (rc, err)) + + # Now duplicate dirnode, testing duplicates on destination side: + (rc, out, err) = yield self.do_cli( + "cp", "--recursive", dircap, "tahoe:test2/") + self.assertEqual(rc, 0, (rc, err)) + (rc, out, err) = yield self.do_cli( + "cp", "--recursive", dircap, "tahoe:test3/") + self.assertEqual(rc, 0, (rc, err)) + + (rc, out, err) = yield self.do_cli("ls", "tahoe:test1") + (rc, out, err) = yield self.do_cli("ls", "tahoe:test2") + (rc, out, err) = yield self.do_cli("ls", "tahoe:test3") + + # Now copy to local directory, testing duplicates on origin side: + yield self.do_cli("cp", "--recursive", "tahoe:", self.basedir) + + for i in range(1, 4): + with open(os.path.join(self.basedir, "test%d" % (i,), "file"), "rb") as f: + self.assertEquals(f.read(), data) + def test_cp_replaces_mutable_file_contents(self): self.basedir = "cli/Cp/cp_replaces_mutable_file_contents" self.set_up_grid(oneshare=True) From bb74b7fe0c87120a677dfb7bcaa649fa3a9477a5 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Fri, 21 May 2021 11:01:00 -0400 Subject: [PATCH 03/23] Note this code is buggy. --- src/allmydata/scripts/tahoe_cp.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/allmydata/scripts/tahoe_cp.py b/src/allmydata/scripts/tahoe_cp.py index fb86ff0ec..df4965dc7 100644 --- a/src/allmydata/scripts/tahoe_cp.py +++ b/src/allmydata/scripts/tahoe_cp.py @@ -701,6 +701,8 @@ class Copier(object): def need_to_copy_bytes(self, source, target): + # This should likley be a method call! but enabling that triggers + # additional bugs. https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3719 if source.need_to_copy_bytes: # mutable tahoe files, and local files return True From 1e9dfd2fcee068640f99996c5058220f12e8672b Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Fri, 21 May 2021 11:01:17 -0400 Subject: [PATCH 04/23] Another test. --- src/allmydata/test/cli/test_cp.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/allmydata/test/cli/test_cp.py b/src/allmydata/test/cli/test_cp.py index 7e651b737..45efae949 100644 --- a/src/allmydata/test/cli/test_cp.py +++ b/src/allmydata/test/cli/test_cp.py @@ -275,6 +275,33 @@ class Cp(GridTestMixin, CLITestMixin, unittest.TestCase): with open(os.path.join(self.basedir, "test%d" % (i,), "file"), "rb") as f: self.assertEquals(f.read(), data) + @defer.inlineCallbacks + def test_cp_immutable_file(self): + self.basedir = "cli/Cp/cp_immutable_file" + self.set_up_grid(oneshare=True) + + filename = os.path.join(self.basedir, "source_file") + data = b"abc\xff\x00\xee" + with open(filename, "wb") as f: + f.write(data) + + # Create immutable file: + yield self.do_cli("create-alias", "tahoe") + (rc, out, _) = yield self.do_cli("put", filename, "tahoe:file1") + filecap = out.strip() + self.assertEqual(rc, 0) + + # Copy it: + (rc, _, _) = yield self.do_cli("cp", "tahoe:file1", "tahoe:file2") + self.assertEqual(rc, 0) + + # Make sure resulting file is the same: + (rc, _, _) = yield self.do_cli("cp", "--recursive", "--caps-only", + "tahoe:", self.basedir) + self.assertEqual(rc, 0) + with open(os.path.join(self.basedir, "file2")) as f: + self.assertEqual(f.read().strip(), filecap) + def test_cp_replaces_mutable_file_contents(self): self.basedir = "cli/Cp/cp_replaces_mutable_file_contents" self.set_up_grid(oneshare=True) From 8ec41fff458890073a8c347b9aee102c2dd7e1ef Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Fri, 21 May 2021 11:11:48 -0400 Subject: [PATCH 05/23] News file. --- newsfragments/3714.minor | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 newsfragments/3714.minor diff --git a/newsfragments/3714.minor b/newsfragments/3714.minor new file mode 100644 index 000000000..e69de29bb From 9e6915ca78de3e0016175f89897142c6794f5acf Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Fri, 21 May 2021 11:12:41 -0400 Subject: [PATCH 06/23] Not used. --- src/allmydata/test/cli/test_put.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/allmydata/test/cli/test_put.py b/src/allmydata/test/cli/test_put.py index d916ae7a2..03306ab71 100644 --- a/src/allmydata/test/cli/test_put.py +++ b/src/allmydata/test/cli/test_put.py @@ -491,7 +491,6 @@ class Put(GridTestMixin, CLITestMixin, unittest.TestCase): self.basedir = "cli/Put/leading_slash" self.set_up_grid(oneshare=True) - DATA1 = b"data" * 100 fn1 = os.path.join(self.basedir, "DATA1") d = self.do_cli("create-alias", "tahoe") From 0d5344174fee90a3cdd5c3aa041171ff50111bae Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Fri, 21 May 2021 11:57:32 -0400 Subject: [PATCH 07/23] First integration test for put/get. --- integration/test_get_put.py | 51 +++++++++++++++++++++++++++++++++++++ newsfragments/3715.minor | 0 2 files changed, 51 insertions(+) create mode 100644 integration/test_get_put.py create mode 100644 newsfragments/3715.minor diff --git a/integration/test_get_put.py b/integration/test_get_put.py new file mode 100644 index 000000000..16df70d38 --- /dev/null +++ b/integration/test_get_put.py @@ -0,0 +1,51 @@ +""" +Integration tests for getting and putting files, including reading from stdin +and stdout. +""" + +from subprocess import Popen, PIPE + +import pytest + +from .util import run_in_thread, cli + +DATA = b"abc123 this is not utf-8 decodable \xff\x00\x33 \x11" +try: + DATA.decode("utf-8") +except UnicodeDecodeError: + pass # great, what we want +else: + raise ValueError("BUG, the DATA string was decoded from UTF-8") + + +@pytest.fixture(scope="session") +def get_put_alias(alice): + cli(alice, "create-alias", "getput") + + +def read_bytes(path): + with open(path, "rb") as f: + return f.read() + + +@run_in_thread +def test_put_from_stdin(alice, get_put_alias, tmpdir): + """ + It's possible to upload a file via `tahoe put`'s STDIN, and then download + it to a file. + """ + tempfile = str(tmpdir.join("file")) + p = Popen( + ["tahoe", "--node-directory", alice.node_dir, "put", "-", "getput:fromstdin"], + stdin=PIPE + ) + p.stdin.write(DATA) + p.stdin.close() + assert p.wait() == 0 + + cli(alice, "get", "getput:fromstdin", tempfile) + assert read_bytes(tempfile) == DATA + + +def test_get_from_stdin(): + pass diff --git a/newsfragments/3715.minor b/newsfragments/3715.minor new file mode 100644 index 000000000..e69de29bb From 6adda0c43a937fa35a41f3f1961680efd5f8413b Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Fri, 21 May 2021 12:02:20 -0400 Subject: [PATCH 08/23] A second integration test for get/put. --- integration/test_get_put.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/integration/test_get_put.py b/integration/test_get_put.py index 16df70d38..bbdc363ea 100644 --- a/integration/test_get_put.py +++ b/integration/test_get_put.py @@ -47,5 +47,18 @@ def test_put_from_stdin(alice, get_put_alias, tmpdir): assert read_bytes(tempfile) == DATA -def test_get_from_stdin(): - pass +def test_get_to_stdout(alice, get_put_alias, tmpdir): + """ + It's possible to upload a file, and then download it to stdout. + """ + tempfile = tmpdir.join("file") + with tempfile.open("wb") as f: + f.write(DATA) + cli(alice, "put", str(tempfile), "getput:tostdout") + + p = Popen( + ["tahoe", "--node-directory", alice.node_dir, "get", "getput:tostdout", "-"], + stdout=PIPE + ) + assert p.stdout.read() == DATA + assert p.wait() == 0 From 7e8e93200f016f124d2ab8592950250302b0710b Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Mon, 24 May 2021 10:13:08 -0400 Subject: [PATCH 09/23] Don't "fix" things on Python 3 that are already fixed. --- src/allmydata/windows/fixups.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/allmydata/windows/fixups.py b/src/allmydata/windows/fixups.py index 732a792f5..e8d05a659 100644 --- a/src/allmydata/windows/fixups.py +++ b/src/allmydata/windows/fixups.py @@ -1,4 +1,6 @@ from __future__ import print_function + +from future.utils import PY3 from past.builtins import unicode # This code isn't loadable or sensible except on Windows. Importers all know @@ -122,6 +124,10 @@ def initialize(): SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX) + if PY3: + # The rest of this appears to be Python 2-specific + return + original_stderr = sys.stderr # If any exception occurs in this code, we'll probably try to print it on stderr, From 704da984ac15e0b03e907f9fa8fbdb24168285dd Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Mon, 24 May 2021 10:13:30 -0400 Subject: [PATCH 10/23] News file. --- newsfragments/3700.minor | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 newsfragments/3700.minor diff --git a/newsfragments/3700.minor b/newsfragments/3700.minor new file mode 100644 index 000000000..e69de29bb From 0966ce17aa74d8a179bbe15e84893a379cf48688 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Mon, 24 May 2021 10:33:21 -0400 Subject: [PATCH 11/23] Try to fix on Windows. --- src/allmydata/test/cli/test_backup.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/allmydata/test/cli/test_backup.py b/src/allmydata/test/cli/test_backup.py index 4bd4b8bfa..8c544df26 100644 --- a/src/allmydata/test/cli/test_backup.py +++ b/src/allmydata/test/cli/test_backup.py @@ -12,6 +12,7 @@ if PY2: import __builtin__ as builtins else: import builtins +from six import ensure_str import os.path from six.moves import cStringIO as StringIO @@ -374,7 +375,9 @@ class Backup(GridTestMixin, CLITestMixin, StallMixin, unittest.TestCase): def test_exclude_options_unicode(self): nice_doc = u"nice_d\u00F8c.lyx" try: - doc_pattern_arg = u"*d\u00F8c*".encode(get_io_encoding()) + doc_pattern_arg = u"*d\u00F8c*" + if PY2: + doc_pattern_arg = doc_pattern_arg.encode(get_io_encoding()) except UnicodeEncodeError: raise unittest.SkipTest("A non-ASCII command argument could not be encoded on this platform.") @@ -396,7 +399,7 @@ class Backup(GridTestMixin, CLITestMixin, StallMixin, unittest.TestCase): self._check_filtering(filtered, root_listdir, (u'_darcs', u'subdir'), (nice_doc, u'lib.a')) # read exclude patterns from file - exclusion_string = doc_pattern_arg + b"\nlib.?" + exclusion_string = doc_pattern_arg + ensure_str("\nlib.?") excl_filepath = os.path.join(basedir, 'exclusion') fileutil.write(excl_filepath, exclusion_string) backup_options = parse(['--exclude-from', excl_filepath, 'from', 'to']) From 8ca6a72396589d0d8b1a855c3e0f7e3dbaf810cf Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Mon, 24 May 2021 10:50:49 -0400 Subject: [PATCH 12/23] Write out the file in an encoding that matches what the reader expects. --- src/allmydata/test/cli/test_backup.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/allmydata/test/cli/test_backup.py b/src/allmydata/test/cli/test_backup.py index 8c544df26..9a60b0285 100644 --- a/src/allmydata/test/cli/test_backup.py +++ b/src/allmydata/test/cli/test_backup.py @@ -6,7 +6,7 @@ from __future__ import division from __future__ import print_function from __future__ import unicode_literals -from future.utils import PY2 +from future.utils import PY2, PY3 if PY2: from future.builtins import filter, map, zip, ascii, chr, hex, input, next, oct, open, pow, round, super, bytes, dict, list, object, range, str, max, min # noqa: F401 import __builtin__ as builtins @@ -18,6 +18,7 @@ import os.path from six.moves import cStringIO as StringIO from datetime import timedelta import re +import locale from twisted.trial import unittest from twisted.python.monkey import MonkeyPatcher @@ -400,6 +401,10 @@ class Backup(GridTestMixin, CLITestMixin, StallMixin, unittest.TestCase): (nice_doc, u'lib.a')) # read exclude patterns from file exclusion_string = doc_pattern_arg + ensure_str("\nlib.?") + if PY3: + # On Python 2 this gives some garbage encoding. Also on Python 2 we + # expect exclusion string to be bytes. + exclusion_string = exclusion_string.encode(locale.getpreferredencoding(False)) excl_filepath = os.path.join(basedir, 'exclusion') fileutil.write(excl_filepath, exclusion_string) backup_options = parse(['--exclude-from', excl_filepath, 'from', 'to']) From cf299684c29190eb47a43be58ec9e90a58be8093 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Tue, 25 May 2021 10:40:44 -0400 Subject: [PATCH 13/23] Unneeded. --- src/allmydata/test/cli/test_cp.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/allmydata/test/cli/test_cp.py b/src/allmydata/test/cli/test_cp.py index 45efae949..d55bc01bd 100644 --- a/src/allmydata/test/cli/test_cp.py +++ b/src/allmydata/test/cli/test_cp.py @@ -264,10 +264,6 @@ class Cp(GridTestMixin, CLITestMixin, unittest.TestCase): "cp", "--recursive", dircap, "tahoe:test3/") self.assertEqual(rc, 0, (rc, err)) - (rc, out, err) = yield self.do_cli("ls", "tahoe:test1") - (rc, out, err) = yield self.do_cli("ls", "tahoe:test2") - (rc, out, err) = yield self.do_cli("ls", "tahoe:test3") - # Now copy to local directory, testing duplicates on origin side: yield self.do_cli("cp", "--recursive", "tahoe:", self.basedir) From 2c7a4c7e0745a53b283ca901ffa5aadbc0b5c16d Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Tue, 25 May 2021 11:45:36 -0400 Subject: [PATCH 14/23] Try to fix Windows failure on Python 3. --- src/allmydata/test/test_runner.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/allmydata/test/test_runner.py b/src/allmydata/test/test_runner.py index 7cc89c287..a74447d27 100644 --- a/src/allmydata/test/test_runner.py +++ b/src/allmydata/test/test_runner.py @@ -17,6 +17,7 @@ from six import ensure_text import os.path, re, sys from os import linesep +import locale from eliot import ( log_call, @@ -92,6 +93,10 @@ def run_bintahoe(extra_argv, python_options=None): argv.extend(extra_argv) argv = list(unicode_to_argv(arg) for arg in argv) p = Popen(argv, stdout=PIPE, stderr=PIPE) + if PY2: + encoding = "utf-8" + else: + encoding = locale.getpreferredencoding(False) out = p.stdout.read().decode("utf-8") err = p.stderr.read().decode("utf-8") returncode = p.wait() @@ -103,7 +108,7 @@ class BinTahoe(common_util.SignalMixin, unittest.TestCase): """ The runner script receives unmangled non-ASCII values in argv. """ - tricky = u"\u2621" + tricky = u"\u00F6" out, err, returncode = run_bintahoe([tricky]) self.assertEqual(returncode, 1) self.assertIn(u"Unknown command: " + tricky, out) From 39334ebc420b0feb47f5af1f2fa92e8aa3193534 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Tue, 25 May 2021 14:12:40 -0400 Subject: [PATCH 15/23] Run tests on Windows with Python 3. --- .github/workflows/ci.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e5ab5d5c5..875f21cc9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,6 +18,7 @@ jobs: fail-fast: false matrix: os: + - windows-latest - macos-latest - ubuntu-latest python-version: @@ -26,11 +27,6 @@ jobs: - 3.7 - 3.8 - 3.9 - include: - # For now we're only doing Windows on 2.7, will be fixed in - # https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3701 - - os: windows-latest - python-version: 2.7 steps: # See https://github.com/actions/checkout. A fetch-depth of 0 From 19c7de7a7abecc3af9f80a26c636f971d467bf28 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Tue, 25 May 2021 14:13:06 -0400 Subject: [PATCH 16/23] News file. --- newsfragments/3701.minor | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 newsfragments/3701.minor diff --git a/newsfragments/3701.minor b/newsfragments/3701.minor new file mode 100644 index 000000000..e69de29bb From 52cd90941fdb7e1f3f8147397d866a05a5badd73 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Tue, 25 May 2021 14:29:22 -0400 Subject: [PATCH 17/23] Actually use the encoding. --- src/allmydata/test/test_runner.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/allmydata/test/test_runner.py b/src/allmydata/test/test_runner.py index a74447d27..a9ec83524 100644 --- a/src/allmydata/test/test_runner.py +++ b/src/allmydata/test/test_runner.py @@ -97,8 +97,8 @@ def run_bintahoe(extra_argv, python_options=None): encoding = "utf-8" else: encoding = locale.getpreferredencoding(False) - out = p.stdout.read().decode("utf-8") - err = p.stderr.read().decode("utf-8") + out = p.stdout.read().decode(encoding) + err = p.stderr.read().decode(encoding) returncode = p.wait() return (out, err, returncode) From 7f70315c83b28f8031eeca53f54c95213c7f1088 Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Tue, 25 May 2021 14:49:44 -0400 Subject: [PATCH 18/23] Skip tests on Python 3. --- src/allmydata/test/test_windows.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/allmydata/test/test_windows.py b/src/allmydata/test/test_windows.py index 01e4a57c1..bae56bfed 100644 --- a/src/allmydata/test/test_windows.py +++ b/src/allmydata/test/test_windows.py @@ -79,6 +79,7 @@ slow_settings = settings( ) @skipUnless(platform.isWindows(), "get_argv is Windows-only") +@skipUnless(PY2, "Not used on Python 3.") class GetArgvTests(SyncTestCase): """ Tests for ``get_argv``. @@ -172,6 +173,7 @@ class GetArgvTests(SyncTestCase): @skipUnless(platform.isWindows(), "intended for Windows-only codepaths") +@skipUnless(PY2, "Not used on Python 3.") class UnicodeOutputTests(SyncTestCase): """ Tests for writing unicode to stdout and stderr. From 33d89dbe8f66b84ed864dda23c3c560f0a422f23 Mon Sep 17 00:00:00 2001 From: Sajith Sasidharan Date: Wed, 26 May 2021 07:26:57 -0400 Subject: [PATCH 19/23] Move IRC from freenode.net to libera.chat Following some organizational developments, freenode.net's volunteer staff has quit and formed libera.chat, a new IRC network. Like many other FOSS projects, Tahoe-LAFS project too has decided to move to libera.chat for our IRC needs. --- README.rst | 2 +- newsfragments/3721.documentation | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 newsfragments/3721.documentation diff --git a/README.rst b/README.rst index 6c8951fd4..39f2ae582 100644 --- a/README.rst +++ b/README.rst @@ -72,7 +72,7 @@ You can find the full Tahoe-LAFS documentation at our `documentation site `__. +- Chat with Tahoe-LAFS developers at #tahoe-lafs chat on irc.libera.chat or `Slack `__. - Join our `weekly conference calls `__ with core developers and interested community members. diff --git a/newsfragments/3721.documentation b/newsfragments/3721.documentation new file mode 100644 index 000000000..36ae33236 --- /dev/null +++ b/newsfragments/3721.documentation @@ -0,0 +1 @@ +Our IRC channel, #tahoe-lafs, has been moved to irc.libera.chat. From 206d416830699184ea11f50d5ac2345577afeac3 Mon Sep 17 00:00:00 2001 From: Sajith Sasidharan Date: Wed, 26 May 2021 07:48:50 -0400 Subject: [PATCH 20/23] Highlight IRC channel name, link to libera.chat website --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 39f2ae582..b76f614c9 100644 --- a/README.rst +++ b/README.rst @@ -72,7 +72,7 @@ You can find the full Tahoe-LAFS documentation at our `documentation site `__. +- Chat with Tahoe-LAFS developers at `#tahoe-lafs` channel on `libera.chat `__ IRC network or `Slack `__. - Join our `weekly conference calls `__ with core developers and interested community members. From cb61bfbe619d0074e382138ecbba3d01c9071fde Mon Sep 17 00:00:00 2001 From: Sajith Sasidharan Date: Wed, 26 May 2021 07:51:29 -0400 Subject: [PATCH 21/23] Highlight IRC channel name correctly --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index b76f614c9..1c7a8d6ee 100644 --- a/README.rst +++ b/README.rst @@ -72,7 +72,7 @@ You can find the full Tahoe-LAFS documentation at our `documentation site `__ IRC network or `Slack `__. +- Chat with Tahoe-LAFS developers at ``#tahoe-lafs`` channel on `libera.chat `__ IRC network or `Slack `__. - Join our `weekly conference calls `__ with core developers and interested community members. From e5d636746eaa99a2515213cb1c9c156aa821842c Mon Sep 17 00:00:00 2001 From: Itamar Turner-Trauring Date: Wed, 26 May 2021 09:16:07 -0400 Subject: [PATCH 22/23] Can't use latest Twisted for typechecks, on Windows older Twisted requires compilation which fails, sticking to 3.7 is workaround since it has Windows wheels. --- tox.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tox.ini b/tox.ini index 172887a5e..d33fe2eae 100644 --- a/tox.ini +++ b/tox.ini @@ -9,9 +9,9 @@ python = 2.7: py27-coverage,codechecks 3.6: py36-coverage - 3.7: py37-coverage + 3.7: py37-coverage,typechecks,codechecks3 3.8: py38-coverage - 3.9: py39-coverage,typechecks,codechecks3 + 3.9: py39-coverage pypy-3.7: pypy3 [pytest] From 53ab18885dabb8d4a5e8d1ab5b2130bc1d89d0ba Mon Sep 17 00:00:00 2001 From: Sajith Sasidharan Date: Wed, 26 May 2021 09:19:12 -0400 Subject: [PATCH 23/23] Update docs to point to irc.libera.chat --- docs/running.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/running.rst b/docs/running.rst index 82b0443f9..898afa10b 100644 --- a/docs/running.rst +++ b/docs/running.rst @@ -235,7 +235,7 @@ Socialize ========= You can chat with other users of and hackers of this software on the -#tahoe-lafs IRC channel at ``irc.freenode.net``, or on the `tahoe-dev mailing +#tahoe-lafs IRC channel at ``irc.libera.chat``, or on the `tahoe-dev mailing list`_. .. _tahoe-dev mailing list: https://tahoe-lafs.org/cgi-bin/mailman/listinfo/tahoe-dev