Commit graph

335 commits

Author SHA1 Message Date
psinghal20
6407dc4eb4 chore: format code via rustfmt 2018-10-01 22:00:23 +02:00
psinghal20
2ebef2d46f feat: enable display of error messages 2018-10-01 22:00:23 +02:00
sharkdp
27caa33729 cargo fmt 2018-09-27 23:01:38 +02:00
sharkdp
8fb25f15c9 Just reference --max-depth in --maxdepth help 2018-09-13 22:33:18 +02:00
Mahmoud Al-Qudsi
d375b5e1f5 Add --maxdepth as hidden alias for --max-depth
For muscle memory compatibility with `rg`. This variant will not show in
the help or in the program options, and is only checked if `--maxdepth`
is not specified.
2018-09-13 22:33:18 +02:00
sharkdp
aa70c5a446 Add --type empty
Add a new `empty`/`e` type to search for empty files and/or directories.

To search for both empty files and directories, use one of the
following:

    fd --type empty
    fd -te

    fd --type empty --type file --type directory

To search for empty files, use

    fd --type empty --type file
    fd -te -tf

To search for empty directories, use

    fd --type empty --type directory
    fd -te -td

closes #273
2018-08-19 17:05:04 +02:00
sharkdp
50a2bab5cd Use short-circuiting for --type searches
Reverses the order of boolean checks for `--type` searches,
making them about 10% to 50% faster(!).
2018-08-19 16:27:23 +02:00
sharkdp
641976cf7a Remove duplicated lstat syscall
Removes a unnecessary `lstat` syscall by calling `.metadata()` only
once. This makes `--type executable` searches about 15% faster.
2018-08-19 16:23:06 +02:00
sharkdp
c428f52209 Run cargo fmt 2018-08-03 21:20:48 +02:00
Alexandru Macovei
4dee8b7940 fix build for rust 1.20.0 2018-07-02 19:55:03 +02:00
Alexandru Macovei
9a45947234 simplify SizeFilter as enum with value instead of struct
Also move the touched cfg(test) code into cfg(test) module and trim test names
2018-07-02 19:55:03 +02:00
sharkdp
c1ef68662c Update for new rustfmt 2018-05-14 21:00:00 +02:00
sharkdp
4172ed03f0 Do not include non-files when using --size 2018-04-25 23:08:05 +02:00
Steve Pentland
0bbc7f5219 Update regex and match, update comments 2018-04-25 08:14:12 +02:00
Steve Pentland
ace3f512d3 Make compatible with min rust version 2018-04-25 08:14:12 +02:00
Steve Pentland
2f3b472dfd Changes from review 2018-04-25 08:14:12 +02:00
Steve Pentland
0207c1371e Initial impl of size constraints.
This adds find-style size constraints with + or - indicating greater
or less than, a numerical size, and a unit
2018-04-25 08:14:12 +02:00
sharkdp
6a9f16e159 Run latest version of rustfmt 2018-04-13 23:13:22 +02:00
sharkdp
388b90e624 Update USAGE and man page 2018-03-26 10:25:33 +02:00
sharkdp
37483036e0 Implement --ignore-file 2018-03-26 08:28:22 +02:00
David Peter
8c1b037279
Normalize absolute paths, fixes #268 (#270)
* Normalize absolute paths, fixes #268
* Split unit tests into several tests
2018-03-25 23:47:58 +02:00
sharkdp
f9a32583a5 Move is_executable to fshelper module 2018-03-25 19:48:09 +02:00
sharkdp
2cf8e7b8a5 Move is_executable to internal module 2018-03-25 18:37:50 +02:00
Pramod Bisht
67f6fdf6a7 Code formating 2018-03-25 16:53:12 +02:00
Pramod Bisht
8ce127e443 changed executable=> executable_only 2018-03-25 16:53:12 +02:00
Pramod Bisht
b1e48efc4a Addresses #246
Some implementation to search by filetype `executables`
2018-03-25 16:53:12 +02:00
sharkdp
5397787824 Skip fifos, sockets, .. when using --type f/d/l 2018-03-15 21:38:52 +01:00
sharkdp
ffd49c60bd Error if user supplied path instead of pattern 2018-03-15 07:53:00 +01:00
sharkdp
89a8f5573d Formatting change 2018-03-15 07:53:00 +01:00
sharkdp
c654159bf2 Update to ansi_term 0.11 2018-03-12 23:19:20 +01:00
Josh Stone
588b0dc7c9 Update to regex-syntax 0.5
The new regex 0.2.7 has updated to regex-syntax 0.5, so it seems prudent
to update fd's dependency too, if only to avoid duplication.
2018-03-12 22:11:00 +01:00
sharkdp
88fb9d73d1 Run updated version of rustfmt 2018-03-12 17:46:13 +01:00
sharkdp
47d95284aa Skip invalid utf8 filenames, closes #250 2018-02-26 08:20:31 +01:00
sharkdp
631931b431 Only construct entry_path if needed 2018-02-25 18:17:11 +01:00
sharkdp
40d811c7be Rewrite of file-type filtering leading to 5% speed-up 2018-02-25 18:17:11 +01:00
sharkdp
e5ee5eb7b3 Minor speedup for strip_prefix 2018-02-25 10:25:59 +01:00
sharkdp
b4be1f161c Add support for .fdignore files 2018-02-21 22:55:26 +01:00
Pramod Bisht
7a3994decb Changes as per the instruction of cargo fmt -- --write-mode=diff 2018-02-19 21:17:11 +01:00
Pramod Bisht
7e8c2248d0 Fixes: #234
Giving suggestion to use `--fixed-strings` in case user passes invalid metacharacters as a regex.
2018-02-19 21:17:11 +01:00
sharkdp
814d37030e Implement -F/--fixed-strings/--literal 2018-02-10 15:55:06 +01:00
Martin Larralde
370d9f081f Use RegexSet instead of hand-written parser 2018-02-10 14:18:37 +01:00
Martin Larralde
86fe9977e8 Implement multiple suffixes extension support with tests (#214) 2018-02-10 14:18:37 +01:00
Steve Pentland
b4d39270d6 Allow -exec to work as --exec (#226)
* Replace usage of `-exec` by `--exec`, except when it is used as a value that is given to `--exec/-exec/-x`.
* Limit usage of --exec option to single instance.
2018-01-29 20:32:46 +01:00
Dock O'Neal
bc2b7a33ae Fixing exec hang by disabling ctrl-c handling for exec 2018-01-25 07:47:04 +01:00
sharkdp
941caeb053 Update documentation 2018-01-03 10:40:28 +01:00
David Peter
32a34cf8c9
Introduce maximum output buffer size (#212)
Closes #191
2018-01-03 10:40:08 +01:00
sharkdp
39fb41f05a Move exit codes to 'internal' module 2018-01-03 10:00:22 +01:00
Dock
26ad7da347 Using wants_to_quit to exit the sender as well as the reciever (#211)
Closes #210
2018-01-03 09:26:11 +01:00
sharkdp
a5f5ad6254 Re-enable code style check 2018-01-01 16:00:32 +01:00
Thejaswi Kadur
faf934da4b Added support for filtering by multiple filetypes and extensions (#205)
Closes #177 
Closes #199
2018-01-01 12:09:33 +01:00
Dock
4d66c84109 Correct exit codes (#202)
* Changed exit code on ctrl-c to 130 to match specification
* Changed exit code when stdout errors. 1 for general error.
2017-12-18 06:53:34 -08:00
sharkdp
aaf9e024d5 Updates for 6.1.0 2017-12-09 21:40:13 -08:00
Matthias Reitinger
5784823aca Unify execute_command across platforms 2017-12-09 21:10:48 -08:00
Dock
51aea57a6a Add multiple path support (#182)
* Adding support for multiple paths. (panic)

- Started adding multiple file support
- fd panics with multiple files right now

* Moved the ctrlc handler to main.

- Moved the ctrlc handler to main so we can search multiple files

* Tests now allow custom directory setup

- TestEnv::new() now takes two arguments, the directories to create and
the files to create inside those directories.

* rust-fmt changes

* rust-fmt changes

* Moving code around, no need to do everything in one big loop

- PathDisplay was never actually used for anything, removed it during refactor of main
- Removed redundant logic for absolute paths
- Moved code placed needlessly inside a loop in the last commit outside of that loop.

* Moving code around, no need to do everything in one big loop

- PathDisplay was never actually used for anything, removed it during refactor of main
- Removed redundant logic for absolute paths
- Moved code placed needlessly inside a loop in the last commit outside of that loop.

* Removed commented code in testenv

* Refactored walk::scan to accept the path buffer vector. Using the ParallelWalker allows for multithreaded searching of multiple directories

* Moved ctrlc handler back into walker, it is only called once from main now.

* Moved the colored output check back to it's original place

* Removing shell-escape, not sure how it got added...

* Added test for `fd 'a.foo' test1` to show that a.foo is only found in the test1 and not the test2 direcotry

* Removing side effect from walk::scan, `dir_vec` is no longer a mutable reference and an iterator is being used instead.

* Running rustfmt to format code correctly
2017-12-06 14:52:23 -08:00
Ubuntu
c165ff0546 Refactorying main.rs : remove unused variable (empty_pattern) 2017-12-03 12:21:09 +01:00
ptzz
9bd1d12c00 Add --no-ignore-vcs option
When passed, .gitignore files will not be respected.
2017-11-22 23:18:22 +01:00
Dock
c0bfc65d88 Handle terminal signals (#128)
fixes #87
2017-11-22 23:05:09 +01:00
sharkdp
5ed7514096 Update error message if command could not be found 2017-11-15 23:24:11 +01:00
Matthias Reitinger
3c5d8a1e86 Fix typos 2017-11-15 23:18:36 +01:00
Matthias Reitinger
ccdbc76f5a Fix execute_command on Unix 2017-11-15 23:18:36 +01:00
Matthias Reitinger
5f4a1203b4 Update documentation for --exec syntax change 2017-11-15 23:18:36 +01:00
Matthias Reitinger
0f82fe7ec0 Rename TokenizedCommand to CommandTemplate 2017-11-15 23:18:36 +01:00
Matthias Reitinger
c18caaa6f6 Remove CommandTicket to avoid Vec allocation 2017-11-15 23:18:36 +01:00
Matthias Reitinger
18709b1ede Remove shell with --exec 2017-11-15 23:18:36 +01:00
sharkdp
26f71dd21a Remove superfluous path.replace
See #153
2017-11-11 08:58:55 +01:00
David Peter
46db4a3860 Fix Windows module 2017-10-26 22:20:12 +02:00
sharkdp
b3f1e1844d Move 'win' crate back into local module
This is necessary to publish on crates.io
2017-10-26 21:59:12 +02:00
sharkdp
bba5c4f607 Fix some clippy warnings 2017-10-26 21:13:56 +02:00
J.W
614f576c47 Add TODOs and FIXMEs about Windows 2017-10-26 20:56:32 +02:00
J.W
dc29ef70c4 Fix Input::remove_extension and Input::dirname 2017-10-26 20:56:32 +02:00
J.W
6b232a82ee Fix --exec 2017-10-26 20:56:32 +02:00
J.W
87ba4e3bb0 Fix root directory for Windows 2017-10-26 20:56:32 +02:00
sharkdp
9d26b74c2a Workaround for the unsafe block.
See #147
2017-10-25 22:45:00 +02:00
sharkdp
5ad69fb2fb Add support for exclude-patterns
* Add `--exclude`/`-E` option.
* Support for multiple exclude patterns

Example:
``` bash
> fd --exclude 'tests/**/*.rs' mod
src/exec/mod.rs
src/fshelper/mod.rs
src/lscolors/mod.rs
```

Closes #89
2017-10-25 22:22:12 +02:00
J.W
e38b7d7bff Fix --type: skip if file type is unknown 2017-10-25 18:29:40 +02:00
John L. Villalovos
4bf7ab67d0 Typo fix: Change 'descent' to 'descend'
The correct word is 'descend'

Change-Id: I6833bd28e84841799f3f060239a36876949d890e
2017-10-25 18:18:33 +02:00
sharkdp
e9cf8af911 Updates and preparations for v5.0 2017-10-22 12:10:51 +02:00
Antti Keränen
701b8f209b Relicense under MIT/Apache-2.0 2017-10-22 10:36:42 +02:00
J.W
570ea78d24 jakwings/fd@a44e677 -> subdirectory "win" 2017-10-21 00:33:49 +02:00
J.W
ce73c086b6 Auto disable colored output for unsupported Windows shells 2017-10-21 00:33:49 +02:00
Michael Aaron Murphy
6a01faf6e1 Escape exec Inputs 2017-10-21 00:29:46 +02:00
Jose Narvaez
6dc704a18e Removed unnecessary exclusion of Redox in cond-compilation and narrowed what we import from . 2017-10-20 12:59:36 +02:00
Jose Narvaez
715b07599b RedoxOS support. 2017-10-20 12:59:36 +02:00
J.W
8d85debc12 Refactor path handling (fixes #113)
* Fix path check
* Fix full path matching
* Allow more simple driver names in Windows tests
* Factor out special is_dir() check for "." and ".."
2017-10-18 20:04:34 +02:00
Michael Aaron Murphy
16eed82ca1 Handle OS-specific path separators when manipulating paths 2017-10-15 11:20:55 -04:00
Michael Aaron Murphy
2a23905af5 Fix merge conflicts 2017-10-15 09:37:48 -04:00
J.W
54d9dde0d4 Use .canonicalize() to check paths & Reword comments 2017-10-15 15:01:24 +02:00
J.W
e649c8fa79 Use a uniform output format for searching ../
closes #107, fixes #82 by the way
2017-10-15 15:01:24 +02:00
Michael Aaron Murphy
ad1b4f3b2b Optimize grouping for *nix archs 2017-10-14 21:45:31 -04:00
Michael Aaron Murphy
1bc58b2fbb Group outputs from exec 2017-10-14 18:06:49 -04:00
Michael Aaron Murphy
718f723d31 Enable absolute paths w/ exec 2017-10-14 16:42:47 -04:00
Michael Aaron Murphy
884bd41cae Apply cargo fmt 2017-10-14 14:04:04 -04:00
Michael Aaron Murphy
fb1cd3a322 Fix for older builds
Rust 1.19 will be a requirement, however.
2017-10-14 13:38:54 -04:00
Michael Aaron Murphy
137fe2e697 Merge Conflicts 2017-10-14 12:35:16 -04:00
Michael Aaron Murphy
4a5a5faf4d Implement --exec feature
Closes #84
2017-10-14 12:24:17 -04:00
J.W
f2632d5fce Dot "." also matches newline by default (closes #111) 2017-10-14 16:12:11 +02:00
sharkdp
c38ef0e9b2 Fix description of smart-case in help text 2017-10-14 12:09:34 +02:00
Matthias Reitinger
7150c9a3a9 Refactor output.rs 2017-10-14 11:11:06 +02:00
Matthias Reitinger
0b04f39398 Split up print_entry in colorized and uncolorized helper functions. 2017-10-14 11:11:06 +02:00
Matthias Reitinger
0677e6331d Fix too many path separators on Windows (#93). 2017-10-14 11:11:06 +02:00
Matthias Reitinger
b441528067 Improve smart case to only consider literal uppercase chars (#103) 2017-10-14 11:03:21 +02:00
sharkdp
8fc3a83d92 Use absolute path to perform search, fixes #81
Previously, we were using the relative path to extract the search
string. For the current directory, the returned relative path was equal
to `""`. This is why the current directory did not show in the search
results (see #81).

This commit also changes the way that `--full-path` works, which was
previously working on relative paths. It seems more useful to search the
absolute path, though. Otherwise, search results could change just by
calling fd (with a given search path) from a different directory.
2017-10-13 18:16:26 +02:00
Antti Keränen
049b9ec06b Format the source code using rustfmt 2017-10-12 19:33:14 +02:00
J.W
e075e1cf7c Add -i, --ignore-case 2017-10-12 07:28:05 +02:00
Rav Chandra
35e5ecd492 liberally accept >2 -u options as per ripgrep 2017-10-11 23:15:21 +02:00
Rav Chandra
4f2d9e77b3 Add ripgrep aliases for no-ignore and hidden 2017-10-11 23:15:21 +02:00
Garrett Squire
ccb899a511 break main into separate modules 2017-10-11 08:21:09 +02:00
Jean-Christophe Petkovich
affe41949d Switch symlink arg from 's' to 'l' (#83)
closes #80
2017-10-09 21:25:30 +02:00
sharkdp
d8da6ec83c Update long help text 2017-10-07 15:15:30 +02:00
David Peter
4731dc670c Enhanced Windows support, see #70
* Use easier way to convert path components
* Fix failing tests on Windows
2017-10-07 09:40:44 +02:00
Alejandro Baez
a84536a173 app: refactor to ripgrep style for long_help 2017-10-07 09:13:39 +02:00
sharkdp
0aae4a3d46 Update help text 2017-10-05 21:35:22 +02:00
sharkdp
34e4620e26 Code style udpates 2017-10-05 21:31:44 +02:00
Florian Hofmair
396b9baaa5 Use clap to generate shell completions 2017-10-04 18:00:25 +02:00
Antti Keränen
4ec33d064c Add a comment about the default value of --threads 2017-10-03 20:21:49 +02:00
sharkdp
7399558a06 Re-structure '--help' text 2017-10-03 19:30:39 +02:00
Antti Keränen
4b61beaa75 Add flag to force color
Color can now be forced on even when piping the output. Changed the
--no-color flag to --color which uses the same options that ripgrep
uses for --color (excluding ansi).

Closes #49.
2017-10-03 18:32:24 +02:00
Matthias Reitinger
2256affd8f Fix extension comparison logic 2017-10-03 18:28:54 +02:00
Matthias Reitinger
32a321aafd Extract entry extension only when there is an extension filter 2017-10-03 18:28:54 +02:00
Matthias Reitinger
83db8673cf Add extension filtering 2017-10-03 18:28:54 +02:00
sharkdp
60df14f0a3 Fix build on Windows 2017-09-27 21:25:50 +02:00
sharkdp
adaf4f6d73 Reduce number of 'stat' syscalls from 3 to 1, see #36 2017-09-18 19:27:26 +02:00
sharkdp
c1b8d1eae1 Minor style changes 2017-09-17 09:37:39 +02:00
exitium
2a3dd5b631 Add file type filtering 2017-09-17 09:25:01 +02:00
sharkdp
fbce0d4f39 Fix clippy warnings 2017-09-15 21:03:47 +02:00
sharkdp
1397dbcc6f Fix warning 2017-09-15 20:56:07 +02:00
sharkdp
b4c8a8ba56 Use N-1 search threads, where N = # cores 2017-09-09 16:13:27 +02:00
sharkdp
1268e982f6 Add --dereference as an alias for --follow 2017-09-09 15:40:32 +02:00
sharkdp
31c76989ad Change short flag for --follow to -L, see #33 2017-09-09 15:34:25 +02:00
sharkdp
f92dfb86bb Update help text 2017-09-09 15:25:48 +02:00
sharkdp
977e0ac694 Spawn a separate thread for the receiver 2017-09-09 15:25:48 +02:00
sharkdp
550e3b3572 Implement short-time buffering for sorted output 2017-09-09 15:25:48 +02:00
sharkdp
e06189e654 Initial version of parallel directory traversal
see #32
2017-09-09 15:25:48 +02:00
sharkdp
2d1d24c38c Rename config parameter for print0 and fix sorting in tests 2017-08-01 22:36:38 +02:00
Michael Mior
1b0c8f349a Add --print0 option 2017-07-19 17:10:06 -04:00
sharkdp
54f33e5227 Use absolute paths if root dir is an absolute path, fixes #40 2017-06-11 20:55:01 +02:00
sharkdp
1b1f644398 Throw an error if root directory is non-existent, fixes #39 2017-06-11 20:41:32 +02:00
sharkdp
24070b0be0 Handle invalid UTF-8, fixes #34 2017-06-11 15:38:56 +02:00
sharkdp
087e709acd Use clap, change --sensitive to --case-sensitive
see #33
2017-06-11 14:25:58 +02:00
sharkdp
1adcf76f1b Use atty instead of isatty 2017-06-10 17:30:48 +02:00
sharkdp
c8d4ec89a3 Use references instead of values 2017-06-09 14:39:57 +02:00
Sebastiaan Vermeulen
f7910c125d windows compatibility (#35)
windows compatibility
2017-06-09 12:18:12 +02:00
sharkdp
2ea23c0000 Exit gracefully on broken pipe, fixes #24 2017-06-07 23:58:08 +02:00
sharkdp
8c6a9c8e32 Set static lifetime, fixes #23 2017-06-06 20:36:17 +02:00
sharkdp
4d950ae97c Highlight executable files 2017-06-05 21:51:10 +02:00
sharkdp
8adb5b9f84 Add option to print absolute paths, closes #10 2017-06-05 21:18:27 +02:00
sharkdp
db8d0cc342 Fix clippy warning 2017-06-05 18:12:35 +02:00
sharkdp
634016b9a0 Add optional second argument, closes #5 2017-06-05 16:25:13 +02:00
sharkdp
bf013da8ff Code clean-ups, documentation 2017-06-05 14:14:04 +02:00
sharkdp
0f5ede48d5 Restructure according to Cargo doc 2017-06-05 11:56:39 +02:00
sharkdp
787e459c90 Fix clippy warnings 2017-06-03 23:28:41 +02:00
sharkdp
ec1f23cf34 Extend LS_COLORS parser 2017-06-02 21:54:28 +02:00
sharkdp
961169aff9 Enable stylization by filename 2017-06-01 23:08:02 +02:00
sharkdp
c6209471a2 Re-structure code, add unit tests, use LS_COLORS 2017-06-01 22:46:15 +02:00
sharkdp
0757a50c31 Add more unit tests, search directories and symlinks too 2017-05-24 22:16:55 +02:00
sharkdp
ae12e00533 Switch to 'ignore', closes #4 2017-05-15 22:38:34 +02:00
sharkdp
b18eded6aa Use -f instead of -F 2017-05-15 21:48:14 +02:00
sharkdp
c45cf26577 Search only filename by default, closes #22 2017-05-15 21:44:47 +02:00
sharkdp
f9cb3326c8 Only parse dir_colors if output is colored, closes #21 2017-05-15 21:41:31 +02:00
sharkdp
bb63a4c6d7 Fix search with hidden root path 2017-05-14 22:32:50 +02:00
sharkdp
b170396fc7 Another small fix for the ANSI regex 2017-05-14 22:06:23 +02:00
sharkdp
a76230b13d Small fix for ANSI code regex 2017-05-14 20:52:50 +02:00
sharkdp
f25c73c5de Support for normal ANSI colors 2017-05-14 20:49:14 +02:00
sharkdp
eb02069451 Parse dircolors files, closes #20 2017-05-14 19:49:12 +02:00
sharkdp
33ddee7541 Colorize each path component, closes #19 2017-05-14 17:53:14 +02:00
sharkdp
5bde3513e6 Document recursion depth 2017-05-14 17:19:45 +02:00
sharkdp
750e1ed962 Add short command line option for --hidden, see #18 2017-05-14 15:46:44 +02:00
sharkdp
9aa4f0a124 Update help message 2017-05-13 10:04:26 +02:00
sharkdp
3e5d9d81e7 Re-structure 2017-05-12 23:23:57 +02:00
sharkdp
b4a252a391 Detect interactive terminal, closes #11 2017-05-12 22:50:52 +02:00
sharkdp
e43353a0bb Configurable search depth, closes #13 2017-05-12 22:44:06 +02:00
sharkdp
7076dcbc68 Option to search hidden directories, closes #12 2017-05-12 22:29:44 +02:00
sharkdp
1986fc4373 --filename instead of --full-path 2017-05-12 22:20:14 +02:00
sharkdp
e20bd9d3f8 Code-cleanup 2017-05-12 19:34:31 +02:00
sharkdp
051af3d320 Option to follow symlinks, disable colors, closes #16, closes #17 2017-05-12 15:44:09 +02:00
sharkdp
6482f3ac09 Implement smart-case, closes #7 2017-05-12 13:32:30 +02:00
sharkdp
fba5e02c25 Colored output, closes #8 2017-05-12 13:02:20 +02:00
sharkdp
b1baa5cb76 Code cleanup, error handling, closes #1 2017-05-12 12:39:13 +02:00
sharkdp
23e51da3c9 Add case-sensitive flag, closes #9 2017-05-12 12:09:46 +02:00
sharkdp
2b9db47474 Match case-insensitive by default 2017-05-12 12:02:25 +02:00
sharkdp
12bfee0bec Re-write in rust 2017-05-12 11:50:54 +02:00
David Peter
04892d2290 Require boost 1.60 2017-05-10 10:09:29 +02:00
David Peter
43adfc8e61 Updates for older compiler/boost version 2017-05-10 09:56:25 +02:00
sharkdp
4a36b0ef31 Case insensitivity, closes #3 2017-05-09 23:40:57 +02:00
sharkdp
aab0a2dcfb Add initial code 2017-05-09 23:28:16 +02:00