Commit graph

352 commits

Author SHA1 Message Date
0da628dc61 licensing: add LGPL-2.0-or-later
Fedora treats LGPL-2.0 the same as LGPL-2.1, so the mapping
should be identical to 2.1.

Fixes #156.
2021-11-22 12:22:45 +01:00
c5eda336f0 spec: add missing articles in the generated description
Also wrap it to ~80 columns.
2021-11-22 12:13:54 +01:00
7b853072f5 cargo-inspector: don't print the traceback if a file is missing
$ cargo-inspector -n zola
Traceback (most recent call last):
  File "/usr/bin/cargo-inspector", line 33, in <module>
    sys.exit(load_entry_point('rust2rpm==18', 'console_scripts', 'cargo-inspector')())
  File "/home/zbyszek/python/rust2rpm/rust2rpm/inspector.py", line 78, in main
    files = [_cargo_toml(args.path, f) for f in files]
  File "/home/zbyszek/python/rust2rpm/rust2rpm/inspector.py", line 78, in <listcomp>
    files = [_cargo_toml(args.path, f) for f in files]
  File "/home/zbyszek/python/rust2rpm/rust2rpm/inspector.py", line 50, in _cargo_toml
    raise FileNotFoundError(f'Cargo.toml not found for binary {binary_or_cargo_toml}')
FileNotFoundError: Cargo.toml not found for binary zola

becomes

$ cargo-inspector -n zola
FileNotFoundError: Cargo.toml not found for binary zola
2021-11-22 11:07:50 +00:00
aa849b8aa5 Supress tracebacks for "expected" exceptions in more places
afbee03f26 tried to suppress tracebacks, but I was testing it by calling
'PYTHONPATH=… python -m rust2rpm' and completely missed the fact that the
setuptools entrypoint wrapper calls main() directly and is not covered by
this.

Also, the same should be done for cargo-inspector.
2021-11-22 11:07:50 +00:00
Michel Alexandre Salim
1b5ad32178 Fix CDDL mapping
Fedora's Software Good Licenses List:
https://fedoraproject.org/wiki/Licensing:Main#Good_Licenses

has had CDDL-1.0 and CDDL-1.1 distinguished from each other since 2017.

Update our mapping - and remove the incorrect text that CDDL 1.1 might
not be acceptable.

Signed-off-by: Michel Alexandre Salim <michel@michel-slm.name>
2021-11-16 13:40:33 -08:00
Davide Cavalca
21d77319e1 Detect more license files 2021-11-10 21:27:25 -08:00
Daniel Gonçalves
07f24fc13c Add python 3.10 to tox.ini 2021-10-14 18:41:02 +02:00
Alberto Planas
31a778c4f2 rust2rpm: return single metadata
When generating the spec file, takes care of asserting that there is a
single metadata.  If not, write a warning.
2021-10-13 14:25:21 +02:00
Alberto Planas
1883197d9c Fixes from the last review 2021-10-12 15:10:33 +02:00
Alberto Planas
981aeed93d Remove duplicated output at the end 2021-10-12 15:10:33 +02:00
Alberto Planas
9269105f5b inspector: dont collect all workspaces by default 2021-10-12 15:10:33 +02:00
Alberto Planas
1c2247ea93 metadata: virtual manifest dont have JSON 2021-10-12 15:10:33 +02:00
Alberto Planas
653037692f metadata: fix __repr__ for None feature 2021-10-12 15:10:33 +02:00
Alberto Planas
9bcfa374ec Document _cargo_toml 2021-10-12 15:10:33 +02:00
Alberto Planas
b8c292f0aa Drop _go_to_top_cargo_toml 2021-10-12 15:10:33 +02:00
Alberto Planas
7b93f1a01a metadata: parse read-manifest directly 2021-10-12 15:10:33 +02:00
Alberto Planas
f1e1cd58a6 inspector: update path flag help 2021-10-12 15:10:33 +02:00
Alberto Planas
8839912832 inspector: rename force flag 2021-10-12 15:10:33 +02:00
Alberto Planas
ccd5b3aa66 metadata: simplify expression 2021-10-12 15:10:33 +02:00
Alberto Planas
e1f0828151 inspector: work directly with a set 2021-10-12 15:10:33 +02:00
Alberto Planas
e2c6c69c0a metadata: support workspaces for non-virtual crates 2021-10-12 15:10:33 +02:00
Alberto Planas
246ee489a0 Add bundled() provider for vendoring
This commit add basic support for crate vendoring in Rust. The user will
use something like `cargo vendor` to create a vendor directory (that can
later be deployed as a tgz) that contains all the dependencies.

This patch will analyze the output of `cargo manifest` to calculate the
closure of dependencies, and via the new parameter `--provides-vendor`,
print all the 'bundled(crate(NAME/FEATURE)) = 0.0.0' provided by the
binary.

The algorithm is not perfect, as today it will include all the features
resolved for the crate (not all the availables, tho), but basically is
something like:

1.- A dependency generator macro, cargo_bundled, will call
cargo-inspector like this:

  # In STDIN we will provide the name of the binary
  cargo-inspector --provides-vendor --path %{_builddir}

2.- cargo-inspector will search inside the 'path' tree a Cargo.toml that
generate the binary name send via STDIN.

3.- From this point, we go up to the tree to find the top-most
Cargo.toml, as this will be the directory where .cargo/config is living.
We make this directory our `cwd`.

4.- Using the metadata from `cargo manifest`, we generate the closure of
dependencies required by this binary. To simplify the problem, the
current code do not resolve the features, and accept the one resolved by
cargo as valid. Most of the time this will be OK, maybe will include
some extra features needed for other binaries.

5.- Print the 'bundled()' data.

This code will only be executed in the directory 'vendor' is present in
the top-most directory found on step 3.
2021-10-12 15:10:33 +02:00
Alberto Planas
3487db7b75 metadata: add simple version evaluator 2021-10-12 15:10:33 +02:00
Alberto Planas
31bfe95446 inspector: find Cargo.toml from binary 2021-10-12 15:10:33 +02:00
Alberto Planas
b746a2ec5c metadata: support virtual manifest 2021-10-12 15:10:33 +02:00
afbee03f26 Suppress tracebacks for "expected" errors
We shouldn't crash when network communication fails, or when a subprocess fails.
The traceback is unsightly, and causes bug reports to be files. Let's just print
the error.

$ PYTHONPATH=$HOME/python/rust2rpm python -m rust2rpm ./asdfasdf.asdf
error: the manifest-path must be a path to a Cargo.toml file
Subcommand failed with code 101: cargo read-manifest --manifest-path=./asdfasdf.asdf
$ PYTHONPATH=$HOME/python/rust2rpm python -m rust2rpm asdfasdf
Failed to download metadata: 404 Client Error: Not Found for url: https://crates.io/api/v1/crates/asdfasdf/versions

Fixes #145.

(This does the relatively easy thing of printing the original message. In
principle we could try to figure out what the exact error was and print uniform
error messages. But that'd be quite a lot of work, and fairly brittle, because
we'd need to cover all possible errors. So let's do this thing which should
be good enough in 95% of cases.)
2021-10-12 12:47:57 +00:00
Zbigniew Jędrzejewski-Szmek
057dd98350 Merge #149 Adding some tests 2021-10-11 17:50:21 +00:00
Daniel Gonçalves
bc8357dc3c Add python 3.8 and 3.9 to tox.ini 2021-10-10 15:33:48 +02:00
Daniel Gonçalves
6fe36bfafd Add hyphens to underscores tests 2021-10-10 14:30:07 +02:00
Davide Cavalca
bc04fe22cf Optionally check if a package already exists in Fedora 2021-10-06 09:14:54 -07:00
Zbigniew Jędrzejewski-Szmek
f0de38ad72 Merge #147 Fix bug introduced by recent patches and clean up the code a bit 2021-09-30 08:36:41 +00:00
a2b42c056c Rector explicit indexing into a tuple unpacking 2021-09-29 22:32:50 +02:00
bdaa087c17 Refactor the code to generate file lists
The code was very hard to read because it was doing explicit lists
concatenations. Let's make the code more python by using 'yield' on
the interesting items, and hide the creation of the list in a decorator.
2021-09-29 22:32:50 +02:00
Daniel Gonçalves
2523fd3c14 rust2rpm: replace hyphens by underscores in version
- fix issue#124
2021-09-28 17:53:24 +00:00
Daniel Gonçalves
0089888cd7 rust2rpm: replace hyphens by underscores in version
- fix issue#124
2021-09-28 19:06:29 +02:00
120d609f58 Fix crash when path to a toml file is given
Fixes a programming error introduced in b284d61ee7, the
variables were not defined.
2021-09-28 13:34:19 +02:00
Zbigniew Jędrzejewski-Szmek
676ad35a1b Merge #137 Files autodetection fixes 2021-09-28 10:42:13 +00:00
7e0afd5da2 fedora: check existing spec file for rpmautospec
If we have a new file: assume yes. If there was an old file, convert
only when the old file had %autochangelog.

The regexp for %autochangelog is taken from
https://pagure.io/fedora-infra/rpmautospec/pull-request/219.
2021-09-20 12:47:37 +02:00
31afa28c74 Simplify assignment
No functional change.
2021-09-20 12:46:13 +02:00
22804aeab0 fedora: use rpmautospec by default
rpmautspec has some shortcomings (e.g. lack of support for multi-line
changelog entries), but those shortcomings are not very important for
rust packages. Let's just use rpmautospec by default for convenience.
2021-09-17 09:40:05 +02:00
Robert-André Mauchin
b284d61ee7 Files autodetection fixes
Do not include subdirectories as %doc. Fix #136.
Sort license and doc files alphabetically. Fix #135.
Only include doc files from the root directory. Fix #134.
2021-07-14 19:57:56 +02:00
f0b940205c
buildsys: release++ 2021-07-12 16:39:43 +02:00
d7b59b3757
rust2rpm: use changelog timestamp without time and timezone on Fedora 2021-07-12 15:32:15 +02:00
f52cbe0232
rust2rpm: add support for using rpmautospec (autorelease + autochangelog) 2021-07-12 15:23:43 +02:00
Robert-André Mauchin
0a91ff0c03 Quick and dirty license and doc files detection
Signed-off-by: Robert-André Mauchin <zebob.m@gmail.com>
2021-03-29 17:28:12 +02:00
Igor Raits
d231e5d433
fedora-helper: Use f35 as a base for license generation
Signed-off-by: Igor Raits <igor.raits@gmail.com>
2021-03-07 21:40:31 +01:00
5ec3227115 licensing: "Python-2.0" is fine in Fedora
The license is listed on fedora's list of "Good" licenses:
https://fedoraproject.org/wiki/Licensing:Main#Good_Licenses.
It is called "Python" and the notes link to
https://docs.python.org/2/license.html.

https://spdx.org/licenses/Python-2.0.html provides the exact same text
as https://docs.python.org/2/license.html. Thus SPDX's "Python-2.0" is
the same as our "Python".

Fixes #121.
2021-02-12 05:11:52 +00:00
ff4c8a62a0 licensing: convert csv to unix eols
The file was originally like that, but the encodings
have become inconsistent through edits anyway. Let's just
change to a normal encoding.
2021-02-12 05:11:52 +00:00
Jan Staněk
035e458f0a
Parse features with + in their name
If a crate has a feature with `+` in it's name,
the `%__cargo_feature_from_name` macro fails to correctly parse it.
For example, the `cxxbridge-flags` crate declares (among others)
the `c++20` feature; that is currently parsed as follows:

```lua
> string.match("cxxbridge-flags+c++20-devel", "^.+%+(.+)-devel$")
20
```

The adjusted regex matches the *first* `+` as feature name separator:

```lua
> string.match("cxxbridge-flags+c++20-devel", "^[^+]+%+(.+)-devel$")
c++20
```
2021-02-01 13:56:37 +01:00
Igor Raits
1a28095971
buildsys: release++
Signed-off-by: Igor Raits <igor.raits@gmail.com>
2020-12-26 12:50:28 +01:00