The latest release of appimagetool bundles a new enough version of
mksquashfs. We had been building a fork of mksquashfs but all the
relevant patches there had been upstreamed.
Note: we still need a wrapper when calling mksquashfs, as appimagetool
calls it with "-mkfs-time 0" and we have the SOURCE_DATE_EPOCH env var
set; and these two would conflict.
Two ways to fix: either unset SOURCE_DATE_EPOCH for that context, or
build a wrapper that removes the "-mkfs-time 0". The former would be
cleaner but for some reason I did not manage to build reproducibly
that way. The latter seems to work.
related:
- https://github.com/AppImage/AppImageKit/issues/929#issuecomment-580769875
> Now official squashfs 4.4 makes reproducible images by default
- https://github.com/AppImage/AppImageKit/pull/996
To reproduce: enter "." to amount_e in Send tab; then click "Save".
Traceback (most recent call last):
File "/home/user/wspace/electrum/electrum/gui/qt/main_window.py", line 1638, in do_save_invoice
self.pending_invoice = self.read_invoice()
File "/home/user/wspace/electrum/electrum/gui/qt/main_window.py", line 1625, in read_invoice
outputs = self.read_outputs()
File "/home/user/wspace/electrum/electrum/gui/qt/main_window.py", line 1501, in read_outputs
outputs = self.payto_e.get_outputs(self.max_button.isChecked())
File "/home/user/wspace/electrum/electrum/gui/qt/paytoedit.py", line 235, in get_outputs
self.outputs = [PartialTxOutput(scriptpubkey=self.payto_scriptpubkey, value=amount)]
File "/home/user/wspace/electrum/electrum/transaction.py", line 1533, in __init__
TxOutput.__init__(self, *args, **kwargs)
File "/home/user/wspace/electrum/electrum/transaction.py", line 113, in __init__
raise ValueError(f"bad txout value: {value!r}")
ValueError: bad txout value: None
-----
closes https://github.com/spesmilo/electrum/issues/6936
Note: if we used the python crowdin client (https://github.com/crowdin/crowdin-api-client-python),
we would do something like this:
```
from crowdin_api import CrowdinClient
class MyCrowdinClient(CrowdinClient):
TOKEN = ...
client = MyCrowdinClient()
with open(locale_file_name, 'rb') as f:
resp = client.storages.add_storage(f)
storage_id = resp['data']['id']
client.source_files.update_file(projectId=crowdin_project_id, storageId=storage_id, fileId=crowdin_file_id)
client.translations.build_crowdin_project_translation(projectId=crowdin_project_id)
```
The option "brasilian" is inaccurate since we brazilians do speak Portuguese.
We don't consider "brasilian" as a language, so I believe this change I've made is a more accurate option for this public.