mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2024-12-24 15:16:41 +00:00
Merge pull request #497 from meejah/release-1-13-0-no-checklist
Release 1.13.0 updates
This commit is contained in:
commit
4c7d13dea6
9
CREDITS
9
CREDITS
@ -192,3 +192,12 @@ D: fix the Download! button on the Welcome page
|
||||
N: Jean-Paul Calderone
|
||||
E: exarkun@twistedmatrix.com
|
||||
D: support SFTP public key authentication.
|
||||
|
||||
N: David Stainton
|
||||
E: dstainton415@gmail.com
|
||||
D: various bug-fixes and features
|
||||
|
||||
N: meejah
|
||||
E: meejah@meejah.ca
|
||||
P: 0xC2602803128069A7, 9D5A 2BD5 688E CB88 9DEB CD3F C260 2803 1280 69A7
|
||||
D: various bug-fixes and features
|
||||
|
281
NEWS.rst
281
NEWS.rst
@ -4,66 +4,235 @@
|
||||
User-Visible Changes in Tahoe-LAFS
|
||||
==================================
|
||||
|
||||
Release ?? (??)
|
||||
'''''''''''''''
|
||||
Release 1.13.0 (18-May-2018)
|
||||
''''''''''''''''''''''''''''
|
||||
|
||||
unedited list of changes since last release, needs cleanup, explanation,
|
||||
credit authors, limit to user-visible things
|
||||
New Features
|
||||
------------
|
||||
|
||||
The ``tahoe list-aliases`` command gained the ``--readonly-uri``
|
||||
option in `PR400`_, which lists read-only capabilities (the default
|
||||
shows read/write capabilities if available). This command also gained
|
||||
a ``--json`` option in `PR452`_, providing machine-readable output.
|
||||
|
||||
A new command ``tahoe status`` is added, showing some statistics and
|
||||
currently active operations (similar to the ``/status`` page in the
|
||||
Web UI). See also `PR502`_.
|
||||
|
||||
Immutable uploads now use the "servers of happiness" algorithm for
|
||||
uploading shares. This means better placement of shares on available
|
||||
servers. See `PR416`_.
|
||||
|
||||
To join a new client to a grid, the command ``tahoe invite`` was
|
||||
added. This uses `magic wormhole`_ to connect two computers and
|
||||
exchange the required information to start the client. The "client
|
||||
side" of this command is the also new option ``tahoe
|
||||
create-client --join=``. Together, this provides a way to provision a
|
||||
new client without having to securely transmit the fURL and other
|
||||
details. `PR418`_
|
||||
|
||||
``tahoe backup`` now reports progress. `PR474`_
|
||||
|
||||
The ``tub.port=`` option can now accept ``listen:i2p`` or
|
||||
``listen:tor`` options to use popular anonymity networks with storage
|
||||
servers. See `PR437`_
|
||||
|
||||
The place where storage servers put shares (the "storage path") is now
|
||||
configurable (`PR472`_).
|
||||
|
||||
A PyInstaller-based build is now available (`PR421`_). A "Docker
|
||||
compose" setup for development purposes is now available (`PR445`_).
|
||||
|
||||
|
||||
Bug Fixes in Core
|
||||
-----------------
|
||||
|
||||
Some bugs with pidfile handling were fixed (`PR440`_ and `PR450`_)
|
||||
meaning invalid pidfiles are now deleted. Error-messages related to
|
||||
``tahoe.cfg`` now include the full path to the file.
|
||||
|
||||
|
||||
Web UI Changes
|
||||
--------------
|
||||
|
||||
We set the "Referrer-Policy: no-referrer" header on all requests. The
|
||||
Welcome page now understands the JSON option (`PR430`_) and OPTIONS
|
||||
requests are handled (`PR447`_).
|
||||
|
||||
|
||||
Magic Folder Changes
|
||||
--------------------
|
||||
|
||||
Multiple magic-folders in a single Tahoe client are now
|
||||
supported. Bugs with ``.backup`` files have been fixed, meaning
|
||||
spurious ``.backup`` files will be produced less often
|
||||
(`PR448`_). Handling of default umask on new magic-folder files is
|
||||
fixed in `PR458`_. The user mtime value is now correctly preserved
|
||||
(`PR457`_).
|
||||
|
||||
A bug in ``tahoe magic-folder status`` causing active operations to
|
||||
sometimes not show up is fixed (`PR461`_).
|
||||
|
||||
|
||||
Raw Pull Requests
|
||||
-----------------
|
||||
|
||||
In total, 44 Pull Requests were merged for this release, including
|
||||
contributions of code or review from 15 different GitHub users. Thanks
|
||||
everyone! A complete list of these PRs and contributions:
|
||||
|
||||
`PR380`_: `daira`_
|
||||
`PR400`_: `meejah`_ (with `warner`_)
|
||||
`PR403`_: `meejah`_
|
||||
`PR405`_: `meejah`_ (with `warner`_)
|
||||
`PR406`_: `meejah`_ (with `warner`_)
|
||||
`PR407`_: `david415`_ (with `meejah`_, `warner`_)
|
||||
`PR409`_: `str4d`_ (with `warner`_)
|
||||
`PR410`_: `tpltnt`_ (with `warner`_)
|
||||
`PR412`_: `tpltnt`_ (with `warner`_)
|
||||
`PR414`_: `tpltnt`_ (with `meejah`_, `warner`_)
|
||||
`PR416`_: `david415`_, `meejah`_, `markberger`_, `warner`_
|
||||
`PR417`_: `meejah`_ (with `pataquets`_, `warner`_)
|
||||
`PR418`_: `meejah`_ (with `crwood`_, `exarkun`_, `warner`_)
|
||||
`PR419`_: `tpltnt`_ (with `warner`_)
|
||||
`PR420`_: `ValdikSS`_ (with `warner`_)
|
||||
`PR421`_: `crwood`_ (with `meejah`_, `warner`_)
|
||||
`PR423`_: `warner`_
|
||||
`PR428`_: `warner`_
|
||||
`PR429`_: `exarkun`_ (with `warner`_)
|
||||
`PR430`_: `david415`_, `exarkun`_ (with `warner`_)
|
||||
`PR432`_: `exarkun`_ (with `meejah`_)
|
||||
`PR433`_: `exarkun`_ (with `warner`_)
|
||||
`PR434`_: `exarkun`_ (with `warner`_)
|
||||
`PR437`_: `warner`_
|
||||
`PR438`_: `warner`_ (with `meejah`_)
|
||||
`PR440`_: `exarkun`_, `lpirl`_ (with `meejah`_)
|
||||
`PR444`_: `AnBuKu`_ (with `warner`_)
|
||||
`PR445`_: `bookchin`_ (with `warner`_)
|
||||
`PR447`_: `meejah`_ (with `tpltnt`_, `meejah`_)
|
||||
`PR448`_: `meejah`_ (with `warner`_)
|
||||
`PR450`_: `exarkun`_, `meejah`_, `lpirl`_
|
||||
`PR452`_: `meejah`_ (with `tpltnt`_)
|
||||
`PR453`_: `meejah`_
|
||||
`PR454`_: `meejah`_ (with `tpltnt`_, `meejah`_, `warner`_)
|
||||
`PR456`_: `meejah`_ (with `meejah`_)
|
||||
`PR457`_: `meejah`_ (with `crwood`_, `tpltnt`_)
|
||||
`PR458`_: `meejah`_ (with `tpltnt`_)
|
||||
`PR460`_: `tpltnt`_ (with `exarkun`_, `meejah`_)
|
||||
`PR462`_: `meejah`_ (with `crwood`_)
|
||||
`PR464`_: `meejah`_
|
||||
`PR470`_: `meejah`_ (with `exarkun`_, `tpltnt`_, `warner`_)
|
||||
`PR472`_: `exarkun`_, `meskio`_
|
||||
`PR474`_: `exarkun`_
|
||||
`PR482`_: `crwood`_ (with `warner`_)
|
||||
`PR502`_: `exarkun`_ (with `meejah`_)
|
||||
|
||||
|
||||
Developer and Internal Changes
|
||||
------------------------------
|
||||
|
||||
People hacking on Tahoe-LAFS code will be interested in some internal
|
||||
improvements which shouldn't have any user-visible effects:
|
||||
|
||||
* add "tahoe list-aliases --readonly-uri" PR400
|
||||
* web: return "Referrer-Policy: no-referrer" on all requests
|
||||
* deps: use stdlib "json" instead of external "simplejson" #2766 PR405
|
||||
* internal: use @implementer instead of implements PR406
|
||||
* add "tahoe status" command
|
||||
* other PRs: 407 412 410 419 423
|
||||
* deps: require txi2p>=0.3.2 to work around TLS who-is-client issue #2861 PR409
|
||||
* complain more loudly in setup.py under py3 PR414
|
||||
* immutable upload now uses happiness-metric algorithm #1382 PR416
|
||||
* deps: now need libyaml-dev from system before build PR420
|
||||
* rename "filesystem" to "file store" #2345 PR380
|
||||
* test "tahoe list-aliases --readonly-uri" #2863 PR403
|
||||
* replace deprecated twisted.web.client with treq #2857 PR428
|
||||
* internal: improve happiness integration test #2895 PR432
|
||||
* web internal: refactor response-format (?t=) logic #2893 PR429
|
||||
* web: add JSON welcome page #2476 PR430
|
||||
* improve/stablize some test coverage #2891
|
||||
* internal: fix pyflakes issues #2898 PR434
|
||||
* internal: setup.py use find_packages #2897 PR433
|
||||
* add magic-wormhole -based "tahoe invite" and "tahoe create-client --join="
|
||||
#126 PR418
|
||||
* internal: ValueOrderedDict fixes #2891
|
||||
* add PyInstaller build #2729 PR421
|
||||
* internal: remove unnused NumDict #2891 PR438
|
||||
* internal: setup.py use python_requires= so tox3 works #2876
|
||||
* fix crash when starting with invalid pidfile PR440
|
||||
* delete invalid pidfile #1680 PR450
|
||||
* update debian packaging notes after 'stretch' release PR444
|
||||
* add Dockerfile PR445
|
||||
* internal: rewrite tahoe stop/start/daemonize refs #1148 #275 #1121 #1377 #2149 #719 PR417
|
||||
* add tub.port=listen:i2p / listen:tor, refs #2889 PR437
|
||||
* handle multiple magic-folders
|
||||
* #2880 (something involving magic-folders) PR448
|
||||
* internal magic-folder test improvement PR453
|
||||
* deps: twisted>=16.4.0 for "python -m twisted.trial" PR454
|
||||
* web: handle OPTIONS request #1307 PR447
|
||||
* internal: add docs links to RFCs/etc PR456
|
||||
* docs: #455
|
||||
* magic-folder: don't set +x in default umask #2881 PR458
|
||||
* internal: pytest changes PR462
|
||||
* deps: pin pypiwin32 to 219 until upstream bug resolved PR464
|
||||
TODO: can we remove this now? pypiwin32 is now at 223
|
||||
* magic-folder: preserve user mtime #2882 PR457
|
||||
* internal: upload appveyor generated wheels as artifacts #2903
|
||||
* use secure mkstemp() PR460
|
||||
* add "tahoe list-aliases --json" PR452
|
||||
* tahoe.cfg: allow storage path to be configured #2045 PR472
|
||||
* magic-folder: something about status #2885
|
||||
* deps: setuptools >=28.8.0 for something PR470
|
||||
* tahoe-backup: report progress #1587 PR474
|
||||
* internal: fix tox-vs-setuptools-upgrade #2910
|
||||
* internal: skip some unicode tests on non-unicode platforms #2912
|
||||
* internal: tox: pre-install Incremental to workaround setuptools bug #2913
|
||||
* internal: fix PyInstaller builds PR482
|
||||
* internal: fix PyInstaller builds `PR482`_
|
||||
* internal: use @implementer instead of implements `PR406`_
|
||||
* internal: improve happiness integration test #2895 `PR432`_
|
||||
* web internal: refactor response-format (?t=) logic #2893 `PR429`_
|
||||
* internal: fix pyflakes issues #2898 `PR434`_
|
||||
* internal: setup.py use find_packages #2897 `PR433`_
|
||||
* internal: ValueOrderedDict fixes #2891
|
||||
* internal: remove unnused NumDict #2891 `PR438`_
|
||||
* internal: setup.py use python_requires= so tox3 works #2876
|
||||
* internal: rewrite tahoe stop/start/daemonize refs #1148 #275 #1121 #1377 #2149 #719 `PR417`_
|
||||
* internal: add docs links to RFCs/etc `PR456`_
|
||||
* internal: magic-folder test improvement `PR453`_
|
||||
* internal: pytest changes `PR462`_
|
||||
* internal: upload appveyor generated wheels as artifacts #2903
|
||||
* internal: fix tox-vs-setuptools-upgrade #2910
|
||||
* deps: require txi2p>=0.3.2 to work around TLS who-is-client issue #2861 `PR409`_
|
||||
* deps: now need libyaml-dev from system before build `PR420`_
|
||||
* deps: twisted>=16.4.0 for "python -m twisted.trial" `PR454`_
|
||||
* deps: pin pypiwin32 to 219 until upstream bug resolved `PR464`_
|
||||
* deps: setuptools >=28.8.0 for something `PR470`_
|
||||
* deps: use stdlib "json" instead of external "simplejson" #2766 `PR405`_
|
||||
* complain more loudly in setup.py under py3 `PR414`_
|
||||
* rename "filesystem" to "file store" #2345 `PR380`_
|
||||
* replace deprecated twisted.web.client with treq #2857 `PR428`_
|
||||
* improve/stablize some test coverage #2891
|
||||
* TODO: can we remove this now? pypiwin32 is now at 223
|
||||
* use secure mkstemp() `PR460`_
|
||||
* test "tahoe list-aliases --readonly-uri" #2863 `PR403`_
|
||||
* #455: remove outdated comment
|
||||
* `PR407`_ fix stopService calls
|
||||
* `PR410`_ explicit python2.7 virtualenv
|
||||
* `PR419`_ fix list of supported OSes
|
||||
* `PR423`_ switch travis to a supported Ubuntu
|
||||
|
||||
|
||||
|
||||
.. _PR380: https://github.com/tahoe-lafs/tahoe-lafs/pull/380
|
||||
.. _PR400: https://github.com/tahoe-lafs/tahoe-lafs/pull/400
|
||||
.. _PR403: https://github.com/tahoe-lafs/tahoe-lafs/pull/403
|
||||
.. _PR405: https://github.com/tahoe-lafs/tahoe-lafs/pull/405
|
||||
.. _PR406: https://github.com/tahoe-lafs/tahoe-lafs/pull/406
|
||||
.. _PR407: https://github.com/tahoe-lafs/tahoe-lafs/pull/407
|
||||
.. _PR409: https://github.com/tahoe-lafs/tahoe-lafs/pull/409
|
||||
.. _PR410: https://github.com/tahoe-lafs/tahoe-lafs/pull/410
|
||||
.. _PR412: https://github.com/tahoe-lafs/tahoe-lafs/pull/412
|
||||
.. _PR414: https://github.com/tahoe-lafs/tahoe-lafs/pull/414
|
||||
.. _PR416: https://github.com/tahoe-lafs/tahoe-lafs/pull/416
|
||||
.. _PR417: https://github.com/tahoe-lafs/tahoe-lafs/pull/417
|
||||
.. _PR418: https://github.com/tahoe-lafs/tahoe-lafs/pull/418
|
||||
.. _PR419: https://github.com/tahoe-lafs/tahoe-lafs/pull/419
|
||||
.. _PR420: https://github.com/tahoe-lafs/tahoe-lafs/pull/420
|
||||
.. _PR421: https://github.com/tahoe-lafs/tahoe-lafs/pull/421
|
||||
.. _PR423: https://github.com/tahoe-lafs/tahoe-lafs/pull/423
|
||||
.. _PR428: https://github.com/tahoe-lafs/tahoe-lafs/pull/428
|
||||
.. _PR429: https://github.com/tahoe-lafs/tahoe-lafs/pull/429
|
||||
.. _PR430: https://github.com/tahoe-lafs/tahoe-lafs/pull/430
|
||||
.. _PR432: https://github.com/tahoe-lafs/tahoe-lafs/pull/432
|
||||
.. _PR433: https://github.com/tahoe-lafs/tahoe-lafs/pull/433
|
||||
.. _PR434: https://github.com/tahoe-lafs/tahoe-lafs/pull/434
|
||||
.. _PR437: https://github.com/tahoe-lafs/tahoe-lafs/pull/437
|
||||
.. _PR438: https://github.com/tahoe-lafs/tahoe-lafs/pull/438
|
||||
.. _PR440: https://github.com/tahoe-lafs/tahoe-lafs/pull/440
|
||||
.. _PR444: https://github.com/tahoe-lafs/tahoe-lafs/pull/444
|
||||
.. _PR445: https://github.com/tahoe-lafs/tahoe-lafs/pull/445
|
||||
.. _PR447: https://github.com/tahoe-lafs/tahoe-lafs/pull/447
|
||||
.. _PR448: https://github.com/tahoe-lafs/tahoe-lafs/pull/448
|
||||
.. _PR450: https://github.com/tahoe-lafs/tahoe-lafs/pull/450
|
||||
.. _PR452: https://github.com/tahoe-lafs/tahoe-lafs/pull/452
|
||||
.. _PR453: https://github.com/tahoe-lafs/tahoe-lafs/pull/453
|
||||
.. _PR454: https://github.com/tahoe-lafs/tahoe-lafs/pull/454
|
||||
.. _PR456: https://github.com/tahoe-lafs/tahoe-lafs/pull/456
|
||||
.. _PR457: https://github.com/tahoe-lafs/tahoe-lafs/pull/457
|
||||
.. _PR458: https://github.com/tahoe-lafs/tahoe-lafs/pull/458
|
||||
.. _PR460: https://github.com/tahoe-lafs/tahoe-lafs/pull/460
|
||||
.. _PR462: https://github.com/tahoe-lafs/tahoe-lafs/pull/462
|
||||
.. _PR464: https://github.com/tahoe-lafs/tahoe-lafs/pull/464
|
||||
.. _PR470: https://github.com/tahoe-lafs/tahoe-lafs/pull/470
|
||||
.. _PR472: https://github.com/tahoe-lafs/tahoe-lafs/pull/472
|
||||
.. _PR474: https://github.com/tahoe-lafs/tahoe-lafs/pull/474
|
||||
.. _PR482: https://github.com/tahoe-lafs/tahoe-lafs/pull/482
|
||||
.. _PR502: https://github.com/tahoe-lafs/tahoe-lafs/pull/502
|
||||
.. _AnBuKu: https://github.com/AnBuKu
|
||||
.. _ValdikSS: https://github.com/ValdikSS
|
||||
.. _bookchin: https://github.com/bookchin
|
||||
.. _crwood: https://github.com/crwood
|
||||
.. _daira: https://github.com/daira
|
||||
.. _david415: https://github.com/david415
|
||||
.. _exarkun: https://github.com/exarkun
|
||||
.. _lpirl: https://github.com/lpirl
|
||||
.. _markberger: https://github.com/markberger
|
||||
.. _meejah: https://github.com/meejah
|
||||
.. _meskio: https://github.com/meskio
|
||||
.. _pataquets: https://github.com/pataquets
|
||||
.. _str4d: https://github.com/str4d
|
||||
.. _tpltnt: https://github.com/tpltnt
|
||||
.. _warner: https://github.com/warner
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -92,7 +92,7 @@ Many Python installations already include ``pip``, but in case yours does
|
||||
not, get it with the `pip install instructions`_::
|
||||
|
||||
% pip --version
|
||||
pip 8.1.1 from ... (python 2.7)
|
||||
pip 10.0.1 from ... (python 2.7)
|
||||
|
||||
.. _pip install instructions: https://pip.pypa.io/en/stable/installing/
|
||||
|
||||
@ -104,7 +104,7 @@ instructions from the `virtualenv documentation`_::
|
||||
|
||||
|
||||
% virtualenv --version
|
||||
15.0.1
|
||||
15.1.0
|
||||
|
||||
.. _virtualenv documentation: https://virtualenv.pypa.io/en/latest/installation.html
|
||||
|
||||
@ -158,7 +158,7 @@ from PyPI with ``venv/bin/pip install tahoe-lafs``. After installation, run
|
||||
Successfully installed ...
|
||||
|
||||
% venv/bin/tahoe --version
|
||||
tahoe-lafs: 1.12.1
|
||||
tahoe-lafs: 1.13.0
|
||||
foolscap: ...
|
||||
|
||||
%
|
||||
@ -178,14 +178,14 @@ You can also install directly from the source tarball URL::
|
||||
New python executable in ~/venv/bin/python2.7
|
||||
Installing setuptools, pip, wheel...done.
|
||||
|
||||
% venv/bin/pip install https://tahoe-lafs.org/downloads/tahoe-lafs-1.12.1.tar.bz2
|
||||
Collecting https://tahoe-lafs.org/downloads/tahoe-lafs-1.12.1.tar.bz2
|
||||
% venv/bin/pip install https://tahoe-lafs.org/downloads/tahoe-lafs-1.13.0.tar.bz2
|
||||
Collecting https://tahoe-lafs.org/downloads/tahoe-lafs-1.13.0.tar.bz2
|
||||
...
|
||||
Installing collected packages: ...
|
||||
Successfully installed ...
|
||||
|
||||
% venv/bin/tahoe --version
|
||||
tahoe-lafs: 1.12.1
|
||||
tahoe-lafs: 1.13.0
|
||||
...
|
||||
|
||||
|
||||
@ -208,7 +208,7 @@ the additional libraries needed to run the unit tests::
|
||||
Successfully installed ...
|
||||
|
||||
% venv/bin/tahoe --version
|
||||
tahoe-lafs: 1.12.1.post34.dev0
|
||||
tahoe-lafs: 1.13.0.post34.dev0
|
||||
...
|
||||
|
||||
This way, you won't have to re-run the ``pip install`` step each time you
|
||||
@ -257,7 +257,7 @@ result in a "all tests passed" mesage::
|
||||
% tox
|
||||
GLOB sdist-make: ~/tahoe-lafs/setup.py
|
||||
py27 recreate: ~/tahoe-lafs/.tox/py27
|
||||
py27 inst: ~/tahoe-lafs/.tox/dist/tahoe-lafs-1.12.1.post8.dev0.zip
|
||||
py27 inst: ~/tahoe-lafs/.tox/dist/tahoe-lafs-1.13.0.post8.dev0.zip
|
||||
py27 runtests: commands[0] | tahoe --version
|
||||
py27 runtests: commands[1] | trial --rterrors allmydata
|
||||
allmydata.test.test_auth
|
||||
|
179
release-tools/fetch-pr.py
Normal file
179
release-tools/fetch-pr.py
Normal file
@ -0,0 +1,179 @@
|
||||
# given a PR number, get all contributers and the summary from
|
||||
# GitHub's API
|
||||
|
||||
import sys
|
||||
import json
|
||||
import base64
|
||||
|
||||
from twisted.internet.task import react
|
||||
from twisted.internet.defer import inlineCallbacks, returnValue
|
||||
|
||||
import treq
|
||||
|
||||
base_pr_url = "https://api.github.com/repos/tahoe-lafs/tahoe-lafs/pulls/{}"
|
||||
ignore_handles = ('codecov-io', )
|
||||
|
||||
|
||||
def _find_pull_request_numbers():
|
||||
"""
|
||||
This returns a list of Pull Request numbers that are
|
||||
interesting. It first assumes any command-line arguments are PR
|
||||
numbers. Failing that, it reads stdin and looks for works starting
|
||||
with 'PR'
|
||||
"""
|
||||
if len(sys.argv) < 2:
|
||||
data = sys.stdin.read()
|
||||
if not len(data):
|
||||
print("put some PR numbers on the command-line")
|
||||
raise SystemExit(1)
|
||||
else:
|
||||
all_prs = set()
|
||||
for word in data.split():
|
||||
word = word.strip()
|
||||
if word.startswith('PR'):
|
||||
all_prs.add(word[2:])
|
||||
all_prs = list(all_prs)
|
||||
print("Found {} PRs in stdin text".format(len(all_prs)))
|
||||
else:
|
||||
all_prs = sys.argv[1:]
|
||||
return all_prs
|
||||
|
||||
|
||||
def _read_github_token(fname='token'):
|
||||
"""
|
||||
read a secret github token; a 'token' file contains two lines:
|
||||
username, github token.
|
||||
|
||||
If the token can't be found, SystemExit is raised
|
||||
"""
|
||||
try:
|
||||
with open(fname, 'r') as f:
|
||||
data = f.read().strip()
|
||||
username, token = data.split('\n', 1)
|
||||
except (IOError, EnvironmentError) as e:
|
||||
print("Couldn't open or parse 'token' file: {}".format(e))
|
||||
raise SystemExit(1)
|
||||
except ValueError:
|
||||
print("'token' should contain two lines: username, github token")
|
||||
raise SystemExit(1)
|
||||
return username, token
|
||||
|
||||
|
||||
def _initialize_headers(username, token):
|
||||
"""
|
||||
Create the base headers for all requests.
|
||||
|
||||
:return dict: the headers dict
|
||||
"""
|
||||
return {
|
||||
"User-Agent": "treq",
|
||||
"Authorization": "Basic {}".format(base64.b64encode("{}:{}".format(username, token))),
|
||||
}
|
||||
|
||||
|
||||
@inlineCallbacks
|
||||
def _report_authors(data, headers):
|
||||
print("Commits:")
|
||||
commits_resp = yield treq.get(data['commits_url'], headers=headers)
|
||||
commits_data = yield commits_resp.text()
|
||||
commits = json.loads(commits_data)
|
||||
authors = set()
|
||||
for commit in commits:
|
||||
if commit['author'] is None:
|
||||
print(" {}: no author!".format(commit['sha']))
|
||||
else:
|
||||
author = commit['author']['login']
|
||||
print(" {}: {}".format(commit['sha'], author))
|
||||
if author not in ignore_handles:
|
||||
authors.add(author)
|
||||
returnValue(authors)
|
||||
|
||||
|
||||
@inlineCallbacks
|
||||
def _report_helpers(data, headers):
|
||||
helpers = set()
|
||||
print("Comments:")
|
||||
comments_resp = yield treq.get(data['comments_url'], headers=headers)
|
||||
comments_data = yield comments_resp.text()
|
||||
comments = json.loads(comments_data)
|
||||
for comment in comments:
|
||||
author = comment['user']['login']
|
||||
if author not in ignore_handles:
|
||||
helpers.add(author)
|
||||
print(" {}: {}".format(author, comment['body'].replace('\n', ' ')[:60]))
|
||||
returnValue(helpers)
|
||||
|
||||
@inlineCallbacks
|
||||
def _request_pr_information(username, token, headers, all_prs):
|
||||
"""
|
||||
Download PR information from GitHub.
|
||||
|
||||
:return dict: mapping PRs to a 2-tuple of "contributers" and
|
||||
"helpers" to the PR. Contributers are nicks of people who
|
||||
commited to the PR, and "helpers" either reviewed or commented
|
||||
on the PR.
|
||||
"""
|
||||
pr_info = dict()
|
||||
|
||||
for pr in all_prs:
|
||||
print("Fetching PR{}".format(pr))
|
||||
resp = yield treq.get(
|
||||
base_pr_url.format(pr),
|
||||
headers=headers,
|
||||
)
|
||||
raw_data = yield resp.text()
|
||||
data = json.loads(raw_data)
|
||||
|
||||
code_handles = yield _report_authors(data, headers)
|
||||
help_handles = yield _report_helpers(data, headers)
|
||||
|
||||
pr_info[pr] = (
|
||||
code_handles,
|
||||
help_handles - help_handles.intersection(code_handles),
|
||||
)
|
||||
returnValue(pr_info)
|
||||
|
||||
|
||||
#async def main(reactor):
|
||||
@inlineCallbacks
|
||||
def main(reactor):
|
||||
"""
|
||||
Fetch Pull Request (PR) information from GitHub.
|
||||
|
||||
Either pass a list of PR numbers on the command-line, or pipe text
|
||||
containing references like: "There is a PR123 somewhere" from
|
||||
which instances of "PRxxx" are extrated. From GitHub's API we get
|
||||
all author information and anyone who disucced the PR and print a
|
||||
summary afterwards.
|
||||
|
||||
You need a 'token' file containing two lines: your username, and
|
||||
access token (get this from the GitHub Web UI).
|
||||
"""
|
||||
|
||||
username, token = _read_github_token()
|
||||
pr_info = yield _request_pr_information(
|
||||
username, token,
|
||||
_initialize_headers(username, token),
|
||||
_find_pull_request_numbers(),
|
||||
)
|
||||
|
||||
unique_handles = set()
|
||||
for pr, (code_handles, help_handles) in sorted(pr_info.items()):
|
||||
coders = ', '.join('`{}`_'.format(c) for c in code_handles)
|
||||
helpers = ', '.join('`{}`_'.format(c) for c in help_handles)
|
||||
if helpers:
|
||||
print("`PR{}`_: {} (with {})".format(pr, coders, helpers))
|
||||
else:
|
||||
print("`PR{}`_: {}".format(pr, coders))
|
||||
for h in code_handles.union(help_handles):
|
||||
unique_handles.add(h)
|
||||
|
||||
for pr in sorted(pr_info.keys()):
|
||||
print(".. _PR{}: https://github.com/tahoe-lafs/tahoe-lafs/pull/{}".format(pr, pr))
|
||||
for h in sorted(unique_handles):
|
||||
print(".. _{}: https://github.com/{}".format(h, h))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
#react(lambda r: ensureDeferred(main(r)))
|
||||
react(main)
|
45
relnotes.txt
45
relnotes.txt
@ -1,6 +1,6 @@
|
||||
ANNOUNCING Tahoe, the Least-Authority File Store, v1.12.1
|
||||
ANNOUNCING Tahoe, the Least-Authority File Store, v1.13.0
|
||||
|
||||
The Tahoe-LAFS team is pleased to announce version 1.12.1 of
|
||||
The Tahoe-LAFS team is pleased to announce version 1.13.0 of
|
||||
Tahoe-LAFS, an extremely reliable decentralized storage
|
||||
system. Get it with "pip install tahoe-lafs", or download a
|
||||
tarball here:
|
||||
@ -13,15 +13,29 @@ operators of your storage servers can read or alter your data
|
||||
without your consent. Here is the one-page explanation of its
|
||||
unique security and fault-tolerance properties:
|
||||
|
||||
http://tahoe-lafs.readthedocs.org/en/latest/about.html
|
||||
https://tahoe-lafs.readthedocs.org/en/latest/about.html
|
||||
|
||||
The previous stable release of Tahoe-LAFS was v1.12.0,
|
||||
released on December 17, 2016.
|
||||
The previous stable release of Tahoe-LAFS was v1.12.1,
|
||||
released on January 18, 2017.
|
||||
|
||||
v1.12.1 fixes a few small problems discovered just after the
|
||||
v1.12.0 release in the new "multiple-introducers" feature and
|
||||
the new "--hide-ip" feature (on systems with I2P support but
|
||||
not Tor).
|
||||
v1.13.0 fixes several problems with the magic-folder frontend, adds
|
||||
--json to more commands, adds the "tahoe status" and "tahoe
|
||||
magic-folder status" commands and some internal refactoring. It is
|
||||
also now possible to have multiple magic folders in a single Tahoe
|
||||
client.
|
||||
|
||||
A long-standing feature to improve the share-placement algorithm
|
||||
("servers of happiness") has been updated and merged. "tahoe backup"
|
||||
now reports progress.
|
||||
|
||||
New clients can now be added to a grid using "magic wormhole" [14], a
|
||||
SPAKE2-based method of securely connecting two computers. This adds
|
||||
the "tahoe invite" command for a current grid-participant to invite a
|
||||
new client and a corresponding option "tahoe create-client --join" for
|
||||
the other side. These use a server at ``wormhole.tahoe-lafs.org``
|
||||
currently operated by Least Authority.
|
||||
|
||||
Please see ``NEWS.rst`` for a more complete list of changes.
|
||||
|
||||
|
||||
WHAT IS IT GOOD FOR?
|
||||
@ -133,7 +147,7 @@ Of Fame" [13].
|
||||
|
||||
ACKNOWLEDGEMENTS
|
||||
|
||||
This is the seventeenth release of Tahoe-LAFS to be created
|
||||
This is the eighteenth release of Tahoe-LAFS to be created
|
||||
solely as a labor of love by volunteers. Thank you very much
|
||||
to the team of "hackers in the public interest" who make
|
||||
Tahoe-LAFS possible.
|
||||
@ -141,19 +155,20 @@ Tahoe-LAFS possible.
|
||||
Brian Warner
|
||||
on behalf of the Tahoe-LAFS team
|
||||
|
||||
January 18, 2017
|
||||
May 17, 2018
|
||||
San Francisco, California, USA
|
||||
|
||||
|
||||
[1] https://github.com/tahoe-lafs/tahoe-lafs/blob/tahoe-lafs-1.12.1/NEWS.rst
|
||||
[1] https://github.com/tahoe-lafs/tahoe-lafs/blob/tahoe-lafs-1.13.0/NEWS.rst
|
||||
[2] https://github.com/tahoe-lafs/tahoe-lafs/blob/master/docs/known_issues.rst
|
||||
[3] https://tahoe-lafs.org/trac/tahoe-lafs/wiki/RelatedProjects
|
||||
[4] https://github.com/tahoe-lafs/tahoe-lafs/blob/tahoe-lafs-1.12.1/COPYING.GPL
|
||||
[5] https://github.com/tahoe-lafs/tahoe-lafs/blob/tahoe-lafs-1.12.1/COPYING.TGPPL.rst
|
||||
[6] http://tahoe-lafs.readthedocs.org/en/tahoe-lafs-1.12.1/INSTALL.html
|
||||
[4] https://github.com/tahoe-lafs/tahoe-lafs/blob/tahoe-lafs-1.13.0/COPYING.GPL
|
||||
[5] https://github.com/tahoe-lafs/tahoe-lafs/blob/tahoe-lafs-1.13.0/COPYING.TGPPL.rst
|
||||
[6] https://tahoe-lafs.readthedocs.org/en/tahoe-lafs-1.13.0/INSTALL.html
|
||||
[7] https://tahoe-lafs.org/cgi-bin/mailman/listinfo/tahoe-dev
|
||||
[8] https://tahoe-lafs.org/trac/tahoe-lafs/roadmap
|
||||
[9] https://github.com/tahoe-lafs/tahoe-lafs/blob/master/CREDITS
|
||||
[10] https://tahoe-lafs.org/trac/tahoe-lafs/wiki/Dev
|
||||
[12] https://leastauthority.com/
|
||||
[13] https://tahoe-lafs.org/hacktahoelafs/
|
||||
[14] https://github.com/warner/magic-wormhole
|
||||
|
Loading…
Reference in New Issue
Block a user