47 Commits

Author SHA1 Message Date
Casey Rodarmor
379a001f47
Fix warnings and clippy errors
type: reform
2021-07-02 21:02:53 -07:00
Casey Rodarmor
452486a782
Placate clippy
type: reform
2021-05-02 22:00:43 -07:00
Casey Rodarmor
42e20a4a6a
Suppress stderr output if --quiet is passed
Instead of checking if `options.quiet` is set whenever printing, disable
all printing to stderr if the `--quiet` flag is passed.

Although it isn't strictly necessary, I still don't construct a progress
bar if `options.quiet` is true, since progress bars might be a little
more expensive than just printing error messages.

A future diff might add checking to the `errln` and `outln` macros, so
that they don't print at all if the respective output stream is
inactive.

type: reform
2020-09-08 16:10:51 -07:00
Casey Rodarmor
7ca9ed62d5
Mark Info::infohash as potentially lossy
`Info::infohash` will discard fields not present in the `Info` struct,
and can thus produce an erronous infohash.

To try to prevent this function from being called in those
circumstances, rename it to `Info::infohash_lossy`, and add a comment
explaining why it is dangerous.

Embarassingly, `Info::infohash` was called in
`TorrentSummary::from_input`, and thus transitively by the torrent show
subcommand, where it is definitely not safe, since torrent show is
intended to be used with arbitrary torrents. This is now fixed.

There was also a build failure caused by a cache issue, so change the
cache keys to invalidate the caches.

type: fixed
2020-09-06 20:23:45 -07:00
Casey Rodarmor
213624cf8e
Metainfo refactoring
- Combine test Metainfo values into a small number of globally available
  values.
- Serialize update URLs as `URL` insted of `String`.
- Add additional `show` tests

type: reform
2020-05-04 03:10:21 -07:00
Annie Cherkaev
f1514dd301
Add support for BEP 39.
Add update-url field to info struct.

See BEP 39 for more details:
http://bittorrent.org/beps/bep_0039.html

type: added
fixes:
- https://github.com/casey/intermodal/issues/98
2020-04-27 17:47:40 -07:00
Casey Rodarmor
cecd2f66a5
Fix help strings
Fix inconsistent argument value names in help strings.

type: fixed
2020-04-22 00:29:14 -07:00
Casey Rodarmor
5ba885dbc4
Take input to imdl torrent create as positional
Allow taking the `--input` argument to `imdl torrent create` as a
positional argument, so the following now works:

    imdl torrent create foo

Taking input by flag `--input` still works.

type: changed
fixes:
- https://github.com/casey/intermodal/issues/375
2020-04-21 22:23:39 -07:00
Celeo
deca555ac3
Allow suppressing output with --quiet
Add a global flag `--quiet`, which allows supressing output from
`imdl torrent create` and `imdl torrent verify`.

Since it's a global option, it should be given before the subcommand,
e.g.:

    imdl --quiet torrent create --input .

type: added
fixes:
- https://github.com/casey/intermodal/issues/174
2020-04-20 21:37:07 -07:00
Celeo
9b72873ed1
Optionally respect .gitignore in imdl torrent create
Add a '--ignore' flag that, when passed, causes `imdl torretn create` to
skip files listed in `.gitignore`, `.ignore`, `.git/info/exclude`, and
`git config --get core.excludesFile`.

Also switches from the `walkdir` crate to the `ignore` crate, which uses
`walkdir` internally, and which handles `.gitignore` and `.ignore`
files.

This changes the behavior of `-include-hidden` on MacOS to no longer
skip entries with the hidden attribute set, due to `ignore` not exposing
`walkdir`'s filter functionality.

A PR[0] is pending to add filtering to `ignore`, so hopefully this
functionality can be re-implemented soon.

[0] https://github.com/BurntSushi/ripgrep/pull/1557

type: added
fixes:
- https://github.com/casey/intermodal/issues/378
2020-04-20 19:20:12 -07:00
Casey Rodarmor
faf46c0f0e
Test that globs match torrent contents
Globs should match paths within the torrent root, not including the
torrent root. Test that this is the case.

type: testing
fixes:
- https://github.com/casey/intermodal/issues/377
2020-04-18 13:46:50 -07:00
Casey Rodarmor
0a870ed2ee
Get current time early when creating torrents
Since getting the system time is fallible, do it early when creating a
torrent, so as to avoid potentially wasting time searching and hashing.

type: reform
fixes:
- https://github.com/casey/intermodal/issues/207
2020-04-18 13:24:44 -07:00
Casey Rodarmor
727d5c1028
Fix Z Shell completions
The clap-generated zsh completion scripts use unescaped double-quoted
strings for the subocommand description text, which causes backtick
characters to be evaluated.

Remove backticks from the subcommand descriptions, to un-break the zsh
completion scripts.

type: fixed
pr: https://github.com/casey/intermodal/pull/365
2020-04-11 04:22:22 -07:00
Casey Rodarmor
ff6f6d4c3d
Test that --globs match entire file paths
E.g. `--glob x*` matches `x/y`.

type: testing
pr: https://github.com/casey/intermodal/pull/357
2020-04-10 17:11:00 -07:00
Casey Rodarmor
6edab1fa3f
Use TestEnv::assert_ok everywhere
`TestEnv::assert_ok` prints stderr and stdout, and so provides more
information in the event of an error.

type: reform
fixes:
- https://github.com/casey/intermodal/issues/330
2020-04-07 19:38:06 -07:00
Casey Rodarmor
8e3f5516af
Use attractive paths in user-facing messages
If a user passes `--input foo`, print "Searching `foo` for files…",
instead of the resolved, absolute path to `foo`, since the former is
what the user typed in.

This was way harder, and had way more edge cases, than I thought it would
be!

One takaway, lexical path cleaning is excellent.

type: changed
fixes:
- https://github.com/casey/intermodal/issues/252
- https://github.com/casey/intermodal/issues/332
2020-04-07 19:37:51 -07:00
Casey Rodarmor
1cfc021453
Forbid empty input, output, and path targets
When an empty path is passed to `Env::resolve`, the result is the
current working directory. This is bad, so forbid the user to pass in
empty paths.

type: fixed
2020-04-07 19:01:43 -07:00
Eric Siegel
c23b0635ee
Add ability to create single-file torrents from stdin
Torrents may now be created from standard input by passing `--input -`.

Since `--name` and `--output` cannot be deduced, they are required when
`--input -`.

type: added
2020-04-07 19:01:43 -07:00
Casey Rodarmor
97018031c1
Introduce "sort specs" to allow fine-grained sorting of files in torrents
Sort specs are of the form `KEY:ORDER`, and allow sorting files in a
torrent by multiple criteria. Multiple sort specs can be passed with
`--sort-by` upon torrent creation.

type: added
2020-04-07 19:01:33 -07:00
Casey Rodarmor
362a81d42f
Use strum crate to derive enum↔string conversions
type: reform
2020-04-07 19:01:33 -07:00
Eric
1cd6c276fd
Allow sorting files in torrents
The order in which files appear in torrents can now be controlled
with the `--order` flag:

    imdl torrent create --input foo --order alphabetical-asc

See `--help` documentation for possible values.

type: added
2020-04-07 19:01:32 -07:00
Casey Rodarmor
6328118c00
Use open crate to open files and URLs
Opening URLs on Windows is very complex, so delegate to the
`open` crate.

type: changed
2020-04-07 19:01:31 -07:00
Casey Rodarmor
972a1ec628
Merge Github Actions workflows
type: development
2020-04-07 19:01:30 -07:00
Casey Rodarmor
86aeec3ce9
Fix release process issues
- Trigger GitHub Actions workflow on release tags
- Make build script tolerate not being called in git directory
- Omit git hash in created by message if not built in git directory
- Test created by message format

type: distribution
2020-04-07 19:01:29 -07:00
Casey Rodarmor
1c84172ad4
Skip torrent file creation with imdl torrent create --dry-run
Torrent files will not be written to disk with `--dry-run`:

    imdl torrrent create --input foo --dry-run

type: added
2020-04-07 19:01:28 -07:00
Casey Rodarmor
0d7c1c0c27
Print magnet link to stdout with --link
Magnet links can be printed to standard output with:

    imdl torrent create --input PATH --link

type: added
2020-04-07 19:01:28 -07:00
Casey Rodarmor
d8055c6e6a
Allow opening magnet links after creation
Magnet links can now be opened after creation:

    imdl torrent link --open --input METAINFO

type: added
2020-04-07 19:01:28 -07:00
Casey Rodarmor
57a358e458
Allow creating magnet links with imdl torrent link
Magnet links can now be created from a metainfo file with:

    imdl torrent link --input METAINFO

type: added
2020-04-07 19:01:27 -07:00
Casey Rodarmor
0033e8381f
Test imdl torrent verify output
- Test all individual `FileError` variants
- Test terminal colors
- Test multiple and single file torrents

type: testing
2020-04-07 19:01:27 -07:00
Casey Rodarmor
1532113782
Print individual file torrent verification errors
If torrent verification fails, print all errors with individual files.

type: changed
2020-04-07 19:01:26 -07:00
Casey Rodarmor
1daa18ef9a
Add progress messages and bar to imdl torrent verify
type: added
2020-04-07 19:01:26 -07:00
Casey Rodarmor
5a0bd2dda7
Add braille spinner char explanation and legend
type: documentation
2020-04-07 19:01:25 -07:00
Casey Rodarmor
2edf8a4fab
Style imdl torrent create progress messages
type: changed
2020-04-07 19:01:25 -07:00
Casey Rodarmor
8c0d918607
Use concat!(...) to format braille tick chars
type: reform
2020-04-07 19:01:22 -07:00
Casey Rodarmor
bb34936c2f
Only write spinner and progress bar when connected to terminal
type: fixed
2020-04-07 19:01:16 -07:00
Casey Rodarmor
2cfdad2597
Fail early if destination .torrent file exists
Check if torrent file to create exists and fail early.

type: changed
2020-04-07 19:01:16 -07:00
Casey Rodarmor
4371bb1402
Improve spinner and progress bar
- Switch to my branch of indicatif on github
- Use binary braille spinner
- Use fine-grained progress bar
- Improve template formatting
- Use SI units for bytes/s

type: changed
2020-04-07 19:01:16 -07:00
Casey Rodarmor
b25b389ae6
Rename Target to OutputTarget
Making it specific to output allows us to be more specific in the
display message, and possibly add output-specific code in the future.

type: reform
2020-04-07 19:01:16 -07:00
Casey Rodarmor
0de2b1719e
Only show torrent summary on create with --show
The torrent summary is large, and makes it easy to miss the create
progress bar and messages. Only show summary if the user passes
`--show` / `-S` to `imdl torrent create`.

type: changed
2020-04-07 19:01:16 -07:00
RJ Rybarczyk
bdaec27caf
Add piece hashing progress bar
type: added
2020-04-07 19:01:15 -07:00
RJ Rybarczyk
c6cd78f565
Add progress messages to imdl torrent create
- Add messages showing overall progress
- Add file search spinner

type: added
2020-04-07 19:01:15 -07:00
Casey Rodarmor
21a87a46f3
Improve imdl torrent create flags
Add short flags and make some long flags shorter.

type: added
2020-04-07 19:01:15 -07:00
Casey Rodarmor
027b229df1
Test piece-hashing edge cases
- Uneven last piece
- Even last piece
- Piece that spans multiple files
- Multiple pieces in one file

type: testing
2020-04-07 19:01:14 -07:00
Casey Rodarmor
2b19a62134
Test creating torrents from . and ..
Test that torrent gets actual name of directory, and is created in the
correct location.

type: testing
2020-04-07 19:01:14 -07:00
Casey Rodarmor
fa6d4e6ad0
Revise command line value names
Make command line value names make sense in context. For example,
`--announce URL` instead of `--announce ANNOUNCE`.

type: documentation
2020-04-07 19:01:14 -07:00
Casey Rodarmor
cba238470d
Remove long_help in favor of help
Maintaining two help strings in order to have a shorter help message
doesn't seem worth it.

type: documentation
2020-04-07 19:01:14 -07:00
Casey Rodarmor
4fffa777b4
Refactor Opt into Arguments, Options, and Subcommand
type: reform
2020-04-07 19:01:14 -07:00