diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/main.rs b/src/main.rs index af20f71..132b418 100644 --- a/src/main.rs +++ b/src/main.rs | |||
| @@ -123,16 +123,18 @@ struct LinkArgs { | |||
| 123 | 123 | ||
| 124 | fn command_link(global_flags: Flags, args: LinkArgs) -> anyhow::Result<()> { | 124 | fn command_link(global_flags: Flags, args: LinkArgs) -> anyhow::Result<()> { |
| 125 | let mut dotup = utils::read_dotup(&global_flags)?; | 125 | let mut dotup = utils::read_dotup(&global_flags)?; |
| 126 | let origins = if args.directory { | 126 | if !args.directory && args.origin.is_dir() { |
| 127 | vec![args.origin] | 127 | let directory = args.origin; |
| 128 | } else if args.origin.is_dir() { | 128 | let origins = utils::collect_files_in_dir_recursive(&directory)?; |
| 129 | utils::collect_files_in_dir_recursive(args.origin)? | 129 | for origin in origins { |
| 130 | // unwrap: origin is under directory so stripping should not fail | ||
| 131 | let path_extra = origin.strip_prefix(&directory).unwrap(); | ||
| 132 | let destination = args.destination.join(path_extra); | ||
| 133 | dotup.link(&origin, &destination); | ||
| 134 | } | ||
| 130 | } else { | 135 | } else { |
| 131 | vec![args.origin] | 136 | dotup.link(&args.origin, &args.destination); |
| 132 | }; | 137 | }; |
| 133 | for origin in origins { | ||
| 134 | dotup.link(origin, &args.destination); | ||
| 135 | } | ||
| 136 | utils::write_dotup(&dotup)?; | 138 | utils::write_dotup(&dotup)?; |
| 137 | Ok(()) | 139 | Ok(()) |
| 138 | } | 140 | } |
