Change license to AGPL
This commit:
- Updates the `LICENSE` file
- Start every file with something like:
// Copyright YEAR_FIRST_PUBLISHED Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
---
First, I removed existing license headers with this Ruby 3.1.2 script:
require 'set'
EXTENSIONS_TO_CHECK = Set['.h', '.hpp', '.cpp', '.m', '.mm', '.pch', '.swift']
same = 0
different = 0
all_files = `git ls-files`.lines.map { |line| line.strip }
all_files.each do |relative_path|
if relative_path == 'Pods'
next
end
unless EXTENSIONS_TO_CHECK.include? File.extname(relative_path)
next
end
path = File.expand_path(relative_path)
contents = File.read(path)
new_contents = contents.sub(/\/\/\n\/\/ Copyright .*\n\/\/\n\n/, '')
if contents == new_contents
same += 1
else
different += 1
end
File.write(path, new_contents)
end
puts "updated #{different} file(s), left #{same} untouched"
I'm sure this script could be improved, but it worked well enough.
Then, I created `Scripts/lint/lint-license-headers` and ran it to auto-
fix a lot of files. This changed the mode of some files, but I think
that's actually desirable. For example,
`SignalServiceKit/src/Util/AppContext.m` previously had a mode of
`0755/-rwxr-xr-x`, and it's now `0644/-rw-r--r--`.
Then I fixed some stragglers and updated the precommit script.
See [a similar change in the Desktop app][0].
[0]: 8bfaf598af
This fixes our remaining SwiftLint violations, which were small.
It also updates the precommit script to fail if any violations are
found, even warnings. This will cause CI to fail if you include a file
that isn't SwiftLint-compatible.
Smartling exposes a simple REST API that’s fairly easy to adopt.
Some differences from the old approach:
- We get UTF-8 back instead of UTF-16, so there’s no need to use iconv.
- We don’t support “nb_NO”, so we don’t need to remove it each time we
fetch translations.
- We get back English fallbacks for .stringsdict files, so there’s no
need to merge them manually ourselves.
- We no longer support country-specific locales *and* the root language,
so we don’t need to merge, for example, “es” into “es-MX”.
- We handle language mapping & duplication inside the Swift script,
which will hopefully be more reliable than cp’ing directories.
This should have no direct user impact.
We currently have two ways of sorting `#import` and `#include`
statements:
1. With our precommit script
2. With `clang-format` (via `git-clang-format`)
It *looks* like we aren't using `clang-format` (because of the
`SortIncludes: false` option in `.clang-format`) but we are,
which you can see by running `clang-format --dump-config`. As a separate
issue, it seems like we're not picking up the `clang-format`
configuration file (`clang-format --style=file:.clang-format
--dump-config` gives different results).
I've run into situations where the two of them "fight", so I think the
best thing to do is pick one. After some discussion, we decided to pick
`clang-format`.
On my machine, the `./precommit.py --all` took 344.15 seconds (more than
5 minutes). This change speeds it up so that it takes less than 10
seconds.
It primarily achieves this by running `swiftlint` twice instead of twice
per file. There are some other smaller changes, too:
- Use a `set` for common operations
- Avoid a needless call to `text.split`
- Use built-in `pathlib.Path().parts` instead of a home-rolled solution
Tested this by running `./precommit.py` with all flags.
Python 3 removed the [`cmp` function][0] which this script relied on.
Calling it was unnecessary, so I removed it (and cleaned up some of the
surrounding code).
Tested this with the `--all`, `--path`, and `--ref` flags.
[0]: https://docs.python.org/2.7/library/functions.html#cmp
Fixes the `objc_keywords` list in `check_diff_for_keywords`.
This list stores strings and Python automagically concatenates strings if there is no comma between them.
As a result the first two items of the list: `OWSAbstractMethod\(` and `OWSAssert\(` were wrongly conacatenated into `"OWSAbstractMethod\(OWSAssert\("`.
This has been found with LGTM 0ddaedbfad/files/Scripts/precommit.py (x84c147336239d4b6):1