Commit Graph

86 Commits

Author SHA1 Message Date
Casey Rodarmor
d71bdffda1
Refactor tests and improve verification
Improve verification somewhat, but mostly refactor tests
to use test tree, and be nicer to read and write.

type: changed
2020-04-07 19:01:07 -07:00
Casey Rodarmor
2fb5bdb933
Test that metainfo bencode representation is correct
Check that metadata is serialized to expected bencode representation.

type: testing
2020-04-07 19:01:06 -07:00
Casey Rodarmor
1227628306
Use list of SHA1 digests for piece list
type: reform
2020-04-07 19:01:06 -07:00
Casey Rodarmor
9787344d9e
Fix torrent verify about message
type: fixed
2020-04-07 19:01:05 -07:00
Casey Rodarmor
165a7ea444
Support adding DHT bootstrap nodes to created torrents
The --dht-node flag can be used to add DHT bootstrap nodes to new torrents.

This is the only piece of metainfo-related functionality in BEP 5, so we can mark BEP
5 as implemented.

type: added
2020-04-07 19:01:05 -07:00
Casey Rodarmor
6549850dac
Add initial implementation of imdl torrent verify
Adds the command `imdl` torrent verify` to verify the contents of torrents.

This implementation is extremely naive. It does successfully verify torrents,
but it will produce unsatisfying results when a torrent fails verification. In
particular, it won't give any information about which pieces in a file were
corrupt.

type: added
2020-04-07 19:01:05 -07:00
Casey Rodarmor
b0f449b6ae
Drop serde_bencode in favor of bendy
For now depend on my branch on Github, until serde support and the value
type land in the main repo.

type: reform
2020-04-07 19:01:05 -07:00
Casey Rodarmor
9b696f78a7
Don't display tier labels if tiers only contain a single entry
type: changed
2020-04-07 19:01:05 -07:00
Casey Rodarmor
f7e9e80f97
Show files in single-file mode
Since it may be useful for scripting purposes, show file list, even for
single-file torrents.

type: changed
2020-04-07 19:01:04 -07:00
Casey Rodarmor
43d87c06b6
Display torrent file tree
Display the contents of torrents as tree of files when showing torrents
with `imdl torrent show` and after `imdl torrent create`.

The formatting and structure of the code was lifted entirely from torf.

type: added
2020-04-07 19:01:04 -07:00
Casey Rodarmor
a574368ffc
Allow including and excluding files from torrent with globs
To include only files that match a glob, pass `--glob GLOB`. To exclude
files that match a glob, pass `--glob GLOB`. Multiple globs may be
passed, with later globs taking precedence over earlier ones.

type: added
2020-04-07 19:01:04 -07:00
Casey Rodarmor
9158c230df
Skip hidden files, symlinks, and junk in created torrents
By default, skip the following when creating a torrent:

- Junk files, like `Thumbs.db`
- Files and directories that begin with a `.`
- Files and directories that have the OS or Windows hidden attribute set
- Symlinks

These can be overridden with, respectively:
- `--include-junk`
- `--include-hidden`
- `--include-hidden`
- `--follow-symlinks`

type: changed
2020-04-07 19:01:04 -07:00
Casey Rodarmor
3739a92857
Support creating multi-file torrents
type: added
2020-04-07 19:01:04 -07:00
Casey Rodarmor
551617de4f
Don't overwrite destination torrent without --force
type: changed
2020-04-07 19:01:04 -07:00
Casey Rodarmor
df3326510c
Write torrent to stdout if - is passed to --output
type: added
2020-04-07 19:01:03 -07:00
Casey Rodarmor
5a1de1acd2
Select piece length when none is provided
When no piece length is provided to imdl torrent create, a piece
length is selected based on the size of the input. The hueristic is
lifted directly from libtorrent.

Also adds a imdl torrent piece-length command, which prints a table
of the piece lengths chosen at different content sizes, which is useful
for understanding and debugging the piece length selection algorithm.

type: added
2020-04-07 19:01:03 -07:00
Casey Rodarmor
35a0e8f9b7
Improve torrent display formatting
- Use colors
- Use cut-friendly formatting when not writing to terminal
- Show sizes as number of bytes when not writing to terminal

type: changed
2020-04-07 19:01:03 -07:00
Casey Rodarmor
5c5dac1fe5
Add source to generated torrent with --source
Support adding a `source` key under the `info` dictionary. The `source`
key is commonly used to create distinct torrents for different trackers.

type: added
2020-04-07 19:01:03 -07:00
Casey Rodarmor
b9ca02fbaa
Show information about torrents after creation
type: changed
2020-04-07 19:01:03 -07:00
Casey Rodarmor
99a069a021
Add imdl torrent show
The `imdl torrent show` command displays information about on-disk
torrent files. The formatting of the command's output is copied from
torf, an excellent command-line torrent creator, editor, and viewer.

type: added
2020-04-07 19:01:02 -07:00
Casey Rodarmor
6df45e0244
Restrict piece length
- Must be greater than zero
- Must be a power of two (but can override with `--allow uneven-piece-length`
- Must be greater than 16KiB (but can override with `--allow small-piece-length`
- Must be less than u32 max

type: changed
2020-04-07 19:01:02 -07:00
Casey Rodarmor
635692fdfa
Accept --piece-length arguments with SI units
Valid units include MiB, KiB, and GiB.

type: changed
2020-04-07 19:01:02 -07:00
Casey Rodarmor
6461a00ba3
Test that wss:// trackers are accepted
type: testing
2020-04-07 19:01:00 -07:00
Casey Rodarmor
9dd8a56298
Release v0.0.1
- Add changelog
- Update publish-check recipe to match github actions
- Add publish recipe
- Update dependencies
- Add minimimal-deps compatibility check

type: release
2020-04-07 19:00:59 -07:00
Casey Rodarmor
e8ab0e1c4f
Open torrents with imdl create --open ...
Invokes an OS-dependent opener to open the `.torrent` file after
creation.

type: added
2020-04-07 19:00:59 -07:00
Casey Rodarmor
a8446c82db
Test UDP tracker URLs parse
Also change UDP tracker protocol extensions from unsupported to N/A.

type: testing
2020-04-07 19:00:59 -07:00
Casey Rodarmor
70e0091ec0
Add help messages to CLI flags and options
type: documentation
2020-04-07 19:00:58 -07:00
Casey Rodarmor
b83d8d7ef5
[torrent stats] Pretty print torrents if --print is passed
type: added
2020-04-07 19:00:58 -07:00
Casey Rodarmor
87e9b982b6
Sort Create opt struct fields
Sort fields of torrent::Create.

type: reform
2020-04-07 19:00:51 -07:00
Casey Rodarmor
1749fce2b2
Slighly improve readability of Hasher::hash_root
type: reform
2020-04-07 19:00:48 -07:00
Casey Rodarmor
d1f8f24d8e
Add colored output
Colored output can be controlled on the command line with
`--use-color auto|always|never`. The default is `auto`, which enables
color if `imdl` detects that it is printing to a terminal.

Color can be disabled entirely by setting the `NO_COLOR` environment
variable.

type: added
2020-04-07 19:00:47 -07:00
Casey Rodarmor
b334fa49b2
Redirect stdin and stdout and capture for tests
type: testing
2020-04-07 19:00:47 -07:00
Casey Rodarmor
fd06943726
Rename: Environment -> Env
type: reform
2020-04-07 19:00:44 -07:00
Casey Rodarmor
7420c91553
Rename bencode::Error::ExtraData -> TrailingData
type: reform
2020-04-07 19:00:40 -07:00
Casey Rodarmor
9f83661374
Configure clippy and lint on push
Enable as many lints as I can stand. I'll definitely add more exceptions as
`clippy::pedantic` and `clippy::restriction` wear me down.

type: testing
2020-04-07 18:55:45 -07:00
Casey Rodarmor
98335f435d
Initial commit
type: added
2020-04-07 18:55:30 -07:00