├── .gitignore ├── cygwin64 ├── ssh.exe ├── cygz.dll ├── rsync.exe ├── cyglz4-1.dll ├── cygpath.exe ├── cygwin1.dll ├── LICENSE for Cygwin.txt ├── cygiconv-2.dll ├── cygintl-8.dll ├── cygkrb5-3.dll ├── cygzstd-1.dll ├── cygcom_err-2.dll ├── cygcrypto-3.dll ├── cygk5crypto-3.dll ├── cygxxhash-0.dll ├── cyggcc_s-seh-1.dll ├── cyggssapi_krb5-2.dll ├── cygkrb5support-0.dll └── RemoveUnnecessaryDlls.ps1 ├── Cargo.toml ├── README.md ├── src └── main.rs └── Cargo.lock /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | -------------------------------------------------------------------------------- /cygwin64/ssh.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/ssh.exe -------------------------------------------------------------------------------- /cygwin64/cygz.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/cygz.dll -------------------------------------------------------------------------------- /cygwin64/rsync.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/rsync.exe -------------------------------------------------------------------------------- /cygwin64/cyglz4-1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/cyglz4-1.dll -------------------------------------------------------------------------------- /cygwin64/cygpath.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/cygpath.exe -------------------------------------------------------------------------------- /cygwin64/cygwin1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/cygwin1.dll -------------------------------------------------------------------------------- /cygwin64/LICENSE for Cygwin.txt: -------------------------------------------------------------------------------- 1 | see https://www.cygwin.com/licensing.html for more information. -------------------------------------------------------------------------------- /cygwin64/cygiconv-2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/cygiconv-2.dll -------------------------------------------------------------------------------- /cygwin64/cygintl-8.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/cygintl-8.dll -------------------------------------------------------------------------------- /cygwin64/cygkrb5-3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/cygkrb5-3.dll -------------------------------------------------------------------------------- /cygwin64/cygzstd-1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/cygzstd-1.dll -------------------------------------------------------------------------------- /cygwin64/cygcom_err-2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/cygcom_err-2.dll -------------------------------------------------------------------------------- /cygwin64/cygcrypto-3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/cygcrypto-3.dll -------------------------------------------------------------------------------- /cygwin64/cygk5crypto-3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/cygk5crypto-3.dll -------------------------------------------------------------------------------- /cygwin64/cygxxhash-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/cygxxhash-0.dll -------------------------------------------------------------------------------- /cygwin64/cyggcc_s-seh-1.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/cyggcc_s-seh-1.dll -------------------------------------------------------------------------------- /cygwin64/cyggssapi_krb5-2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/cyggssapi_krb5-2.dll -------------------------------------------------------------------------------- /cygwin64/cygkrb5support-0.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rn7s2/rsync-win/HEAD/cygwin64/cygkrb5support-0.dll -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rsync-win" 3 | version = "0.1.3" 4 | description = "Rsync for Windows" 5 | categories = ["command-line-utilities"] 6 | authors = ["rn7s2"] 7 | homepage = "https://github.com/rn7s2/rsync-win" 8 | edition = "2024" 9 | 10 | [dependencies] 11 | clap = { version = "4.5.40", features = ["derive"] } 12 | home = "0.5.11" 13 | -------------------------------------------------------------------------------- /cygwin64/RemoveUnnecessaryDlls.ps1: -------------------------------------------------------------------------------- 1 | $dlls = (Get-ChildItem *.dll) 2 | 3 | for ($i = 0; $i -lt $dlls.Length; $i++) { 4 | Write-Host $dlls[$i].Name 5 | Move-Item $dlls[$i].Name "test/$($dlls[$i].Name)" 6 | 7 | ./cygpath.exe -V 8 | $ok1 = ($LASTEXITCODE -eq 0) 9 | 10 | ./rsync.exe -V 11 | $ok2 = ($LASTEXITCODE -eq 0) 12 | 13 | ./ssh.exe -V 14 | $ok3 = ($LASTEXITCODE -eq 0) 15 | 16 | if ($ok1 -and $ok2 -and $ok3) { 17 | Write-Host "it's ok to remove $($dlls[$i].Name)" 18 | } else { 19 | Move-Item "test/$($dlls[$i].Name)" $dlls[$i].Name 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # rsync-win 2 | 3 | `rsync` for Windows. 4 | 5 | See [releases](https://github.com/rn7s2/rsync-win/releases) page for binaries. 6 | 7 | I had a bad time trying to find a working `rsync` for Windows. I read some blogs about [cwRsync](https://www.itefix.net/cwrsync), but I just couldn't get it to work. 8 | 9 | Finally, I repacked the `rsync.exe`, `ssh.exe` and `cygpath.exe` from Cygwin, and wrote a `Rust` wrapper around it. 10 | 11 | It works for me, and I hope it works for you too. 12 | 13 | # Installation 14 | 15 | 1. Goto [releases](https://github.com/rn7s2/rsync-win/releases) page & download `rsync-win.zip`. 16 | 2. Extract. Keep `cygwin64` folder along side with `rsync-win.exe`. 17 | 3. Add the directory of `rsync-win.exe` to `PATH`. 18 | 4. Restart your terminal and try executing `rsync-win -h`. 19 | 20 | # Usage 21 | 22 | - bandwidth limit `2048 KBytes/s`, `-a`, `-v`, show progress, copy from remote machine to local, exclude `*.log` files, and save to `./target/` directory. 23 | 24 | ``` 25 | rsync-win --bwlimit=2048 -av --exclude='*.log' --progress -s @: -d ./target/ 26 | ``` 27 | 28 | - Help 29 | 30 | ``` 31 | Rsync for Windows 32 | 33 | Allowed formats for /: 34 | local: C:/path/to/file 35 | ssh: [USER@]HOST:/path/to/file (use --ssh-port to specify the port) 36 | rsync: rsync://[USER@]HOST[:PORT]/path/to/file 37 | 38 | 39 | Usage: rsync-win.exe [OPTIONS] --src --dest 40 | 41 | Options: 42 | -i, --identity SSH identity file [default: "C:/Users//.ssh/id_rsa"] 43 | -v, --verbose 44 | -q, --quiet 45 | -c, --checksum 46 | -a, --archive 47 | -r, --recursive 48 | --delete 49 | --exclude 50 | --partial 51 | --progress 52 | --bwlimit 53 | -4, --ipv4 54 | -6, --ipv6 55 | --ssh-port 56 | -s, --src 57 | -d, --dest 58 | -h, --help Print help 59 | -V, --version Print version 60 | ``` 61 | 62 | Some blogs: 63 | 64 | - [如何讓 OpenSSH for Windows 也能支援 Rsync 遠端加密連線傳輸](https://blog.miniasp.com/post/2021/12/15/How-to-use-Rsync-with-OpenSSH-for-Windows) 65 | 66 | - [如何在 Windows 安裝 Cygwin 的 SSHD 服務並正確使用 Rsync 同步檔案](https://blog.miniasp.com/post/2021/12/13/How-to-use-Cygwin-cygsshd-and-rsync-in-Windows) 67 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use std::{ 2 | env, io, 3 | path::PathBuf, 4 | process::{Command, Stdio}, 5 | }; 6 | 7 | use clap::Parser; 8 | 9 | #[derive(Parser)] 10 | #[command(version, about = "Rsync for Windows 11 | 12 | Allowed formats for /: 13 | local: C:/path/to/file 14 | ssh: [USER@]HOST:/path/to/file (use --ssh-port to specify the port) 15 | rsync: rsync://[USER@]HOST[:PORT]/path/to/file 16 | ", long_about = None)] 17 | struct Args { 18 | /// SSH identity file [default: "C:/Users//.ssh/id_rsa"] 19 | #[clap(short, long)] 20 | identity: Option, 21 | 22 | #[clap(short, long)] 23 | verbose: bool, 24 | 25 | #[clap(short, long)] 26 | quiet: bool, 27 | 28 | #[clap(short, long)] 29 | checksum: bool, 30 | 31 | #[clap(short, long)] 32 | archive: bool, 33 | 34 | #[clap(short, long)] 35 | recursive: bool, 36 | 37 | #[clap(long)] 38 | delete: bool, 39 | 40 | #[clap(long)] 41 | exclude: Option, 42 | 43 | #[clap(long)] 44 | partial: bool, 45 | 46 | #[clap(long)] 47 | progress: bool, 48 | 49 | #[clap(long)] 50 | bwlimit: Option, 51 | 52 | #[clap(short = '4', long)] 53 | ipv4: bool, 54 | 55 | #[clap(short = '6', long)] 56 | ipv6: bool, 57 | 58 | #[clap(long)] 59 | ssh_port: Option, 60 | 61 | #[clap(short, long)] 62 | src: String, 63 | 64 | #[clap(short, long)] 65 | dest: String, 66 | } 67 | 68 | fn main() { 69 | let args = Args::parse(); 70 | 71 | let mut rsync_args = if is_ssh_path(&args.src) || is_ssh_path(&args.dest) { 72 | prepare_rsync_options_with_ssh(&args) 73 | } else { 74 | prepare_rsync_options(&args) 75 | }; 76 | rsync_args.push(path_win_to_unix(&args.src)); 77 | rsync_args.push(path_win_to_unix(&args.dest)); 78 | 79 | Command::new(path_rsync()) 80 | .args(&rsync_args) 81 | .stdout(Stdio::inherit()) 82 | .stderr(Stdio::inherit()) 83 | .output() 84 | .expect("execute rsync failed"); 85 | } 86 | 87 | fn is_ssh_path(path: &str) -> bool { 88 | if path.contains("rsync://") { 89 | false 90 | } else { 91 | path.contains('@') 92 | } 93 | } 94 | 95 | fn prepare_rsync_options_with_ssh(args: &Args) -> Vec { 96 | fn default_identity_file() -> String { 97 | let mut path = home::home_dir().expect("get home dir failed"); 98 | path.push(".ssh/id_rsa"); 99 | path.to_str().unwrap().to_string() 100 | } 101 | 102 | fn prepare_ssh_args(identity: &str, port: &Option) -> String { 103 | fn path_ssh() -> io::Result { 104 | let mut dir = path_cygwin_dir(); 105 | dir.push("ssh.exe"); 106 | Ok(dir) 107 | } 108 | 109 | let port = if let Some(p) = port { *p } else { 22 }; 110 | format!( 111 | r#""{}" -o "StrictHostKeyChecking=no" -o "IdentitiesOnly=yes" -i "{}" -p {}"#, 112 | path_ssh().expect("get ssh path failed").display(), 113 | identity, 114 | port, 115 | ) 116 | } 117 | 118 | let identity = path_win_to_unix( 119 | match &args.identity { 120 | Some(path) => path.clone(), 121 | None => default_identity_file(), 122 | } 123 | .as_str(), 124 | ); 125 | 126 | let mut options = prepare_rsync_options(args); 127 | options.push("-e".to_owned()); 128 | options.push(prepare_ssh_args(&identity, &args.ssh_port)); 129 | options 130 | } 131 | 132 | fn prepare_rsync_options(args: &Args) -> Vec { 133 | let mut options = Vec::new(); 134 | if args.verbose { 135 | options.push("-v".to_owned()); 136 | } 137 | if args.quiet { 138 | options.push("-q".to_owned()); 139 | } 140 | if args.checksum { 141 | options.push("-c".to_owned()); 142 | } 143 | if args.archive { 144 | options.push("-a".to_owned()); 145 | } 146 | if args.recursive { 147 | options.push("-r".to_owned()); 148 | } 149 | if args.delete { 150 | options.push("--delete".to_owned()); 151 | } 152 | if let Some(exclude) = &args.exclude { 153 | options.push(format!("--exclude='{}'", exclude)); 154 | } 155 | if args.partial { 156 | options.push("--partial".to_owned()); 157 | } 158 | if args.progress { 159 | options.push("--progress".to_owned()); 160 | } 161 | if let Some(bwlimit) = &args.bwlimit { 162 | options.push(format!("--bwlimit={}", bwlimit)); 163 | } 164 | if args.ipv4 { 165 | options.push("-4".to_owned()); 166 | } 167 | if args.ipv6 { 168 | options.push("-6".to_owned()); 169 | } 170 | options 171 | } 172 | 173 | fn path_win_to_unix(path: &str) -> String { 174 | fn path_cygpath() -> io::Result { 175 | let mut dir = path_cygwin_dir(); 176 | dir.push("cygpath.exe"); 177 | Ok(dir) 178 | } 179 | 180 | let out = Command::new(path_cygpath().expect("convert path failed")) 181 | .args(["-u", path]) 182 | .output() 183 | .expect("failed to execute process"); 184 | String::from_utf8(out.stdout) 185 | .expect("convert path failed: not a valid utf8 sequence") 186 | .trim() 187 | .to_string() 188 | } 189 | 190 | fn path_rsync() -> PathBuf { 191 | let mut dir = path_cygwin_dir(); 192 | dir.push("rsync.exe"); 193 | dir 194 | } 195 | 196 | fn path_cygwin_dir() -> PathBuf { 197 | let mut dir = env::current_exe() 198 | .expect("get full filesystem path of the current running executable failed"); 199 | dir.pop(); 200 | dir.push("cygwin64"); 201 | dir 202 | } 203 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "anstream" 7 | version = "0.6.19" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" 10 | dependencies = [ 11 | "anstyle", 12 | "anstyle-parse", 13 | "anstyle-query", 14 | "anstyle-wincon", 15 | "colorchoice", 16 | "is_terminal_polyfill", 17 | "utf8parse", 18 | ] 19 | 20 | [[package]] 21 | name = "anstyle" 22 | version = "1.0.11" 23 | source = "registry+https://github.com/rust-lang/crates.io-index" 24 | checksum = "862ed96ca487e809f1c8e5a8447f6ee2cf102f846893800b20cebdf541fc6bbd" 25 | 26 | [[package]] 27 | name = "anstyle-parse" 28 | version = "0.2.7" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" 31 | dependencies = [ 32 | "utf8parse", 33 | ] 34 | 35 | [[package]] 36 | name = "anstyle-query" 37 | version = "1.1.3" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "6c8bdeb6047d8983be085bab0ba1472e6dc604e7041dbf6fcd5e71523014fae9" 40 | dependencies = [ 41 | "windows-sys", 42 | ] 43 | 44 | [[package]] 45 | name = "anstyle-wincon" 46 | version = "3.0.9" 47 | source = "registry+https://github.com/rust-lang/crates.io-index" 48 | checksum = "403f75924867bb1033c59fbf0797484329750cfbe3c4325cd33127941fabc882" 49 | dependencies = [ 50 | "anstyle", 51 | "once_cell_polyfill", 52 | "windows-sys", 53 | ] 54 | 55 | [[package]] 56 | name = "clap" 57 | version = "4.5.40" 58 | source = "registry+https://github.com/rust-lang/crates.io-index" 59 | checksum = "40b6887a1d8685cebccf115538db5c0efe625ccac9696ad45c409d96566e910f" 60 | dependencies = [ 61 | "clap_builder", 62 | "clap_derive", 63 | ] 64 | 65 | [[package]] 66 | name = "clap_builder" 67 | version = "4.5.40" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "e0c66c08ce9f0c698cbce5c0279d0bb6ac936d8674174fe48f736533b964f59e" 70 | dependencies = [ 71 | "anstream", 72 | "anstyle", 73 | "clap_lex", 74 | "strsim", 75 | ] 76 | 77 | [[package]] 78 | name = "clap_derive" 79 | version = "4.5.40" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | checksum = "d2c7947ae4cc3d851207c1adb5b5e260ff0cca11446b1d6d1423788e442257ce" 82 | dependencies = [ 83 | "heck", 84 | "proc-macro2", 85 | "quote", 86 | "syn", 87 | ] 88 | 89 | [[package]] 90 | name = "clap_lex" 91 | version = "0.7.5" 92 | source = "registry+https://github.com/rust-lang/crates.io-index" 93 | checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" 94 | 95 | [[package]] 96 | name = "colorchoice" 97 | version = "1.0.4" 98 | source = "registry+https://github.com/rust-lang/crates.io-index" 99 | checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 100 | 101 | [[package]] 102 | name = "heck" 103 | version = "0.5.0" 104 | source = "registry+https://github.com/rust-lang/crates.io-index" 105 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 106 | 107 | [[package]] 108 | name = "home" 109 | version = "0.5.11" 110 | source = "registry+https://github.com/rust-lang/crates.io-index" 111 | checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" 112 | dependencies = [ 113 | "windows-sys", 114 | ] 115 | 116 | [[package]] 117 | name = "is_terminal_polyfill" 118 | version = "1.70.1" 119 | source = "registry+https://github.com/rust-lang/crates.io-index" 120 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 121 | 122 | [[package]] 123 | name = "once_cell_polyfill" 124 | version = "1.70.1" 125 | source = "registry+https://github.com/rust-lang/crates.io-index" 126 | checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" 127 | 128 | [[package]] 129 | name = "proc-macro2" 130 | version = "1.0.95" 131 | source = "registry+https://github.com/rust-lang/crates.io-index" 132 | checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 133 | dependencies = [ 134 | "unicode-ident", 135 | ] 136 | 137 | [[package]] 138 | name = "quote" 139 | version = "1.0.40" 140 | source = "registry+https://github.com/rust-lang/crates.io-index" 141 | checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" 142 | dependencies = [ 143 | "proc-macro2", 144 | ] 145 | 146 | [[package]] 147 | name = "rsync-win" 148 | version = "0.1.3" 149 | dependencies = [ 150 | "clap", 151 | "home", 152 | ] 153 | 154 | [[package]] 155 | name = "strsim" 156 | version = "0.11.1" 157 | source = "registry+https://github.com/rust-lang/crates.io-index" 158 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 159 | 160 | [[package]] 161 | name = "syn" 162 | version = "2.0.103" 163 | source = "registry+https://github.com/rust-lang/crates.io-index" 164 | checksum = "e4307e30089d6fd6aff212f2da3a1f9e32f3223b1f010fb09b7c95f90f3ca1e8" 165 | dependencies = [ 166 | "proc-macro2", 167 | "quote", 168 | "unicode-ident", 169 | ] 170 | 171 | [[package]] 172 | name = "unicode-ident" 173 | version = "1.0.18" 174 | source = "registry+https://github.com/rust-lang/crates.io-index" 175 | checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" 176 | 177 | [[package]] 178 | name = "utf8parse" 179 | version = "0.2.2" 180 | source = "registry+https://github.com/rust-lang/crates.io-index" 181 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 182 | 183 | [[package]] 184 | name = "windows-sys" 185 | version = "0.59.0" 186 | source = "registry+https://github.com/rust-lang/crates.io-index" 187 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 188 | dependencies = [ 189 | "windows-targets", 190 | ] 191 | 192 | [[package]] 193 | name = "windows-targets" 194 | version = "0.52.6" 195 | source = "registry+https://github.com/rust-lang/crates.io-index" 196 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 197 | dependencies = [ 198 | "windows_aarch64_gnullvm", 199 | "windows_aarch64_msvc", 200 | "windows_i686_gnu", 201 | "windows_i686_gnullvm", 202 | "windows_i686_msvc", 203 | "windows_x86_64_gnu", 204 | "windows_x86_64_gnullvm", 205 | "windows_x86_64_msvc", 206 | ] 207 | 208 | [[package]] 209 | name = "windows_aarch64_gnullvm" 210 | version = "0.52.6" 211 | source = "registry+https://github.com/rust-lang/crates.io-index" 212 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 213 | 214 | [[package]] 215 | name = "windows_aarch64_msvc" 216 | version = "0.52.6" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 219 | 220 | [[package]] 221 | name = "windows_i686_gnu" 222 | version = "0.52.6" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 225 | 226 | [[package]] 227 | name = "windows_i686_gnullvm" 228 | version = "0.52.6" 229 | source = "registry+https://github.com/rust-lang/crates.io-index" 230 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 231 | 232 | [[package]] 233 | name = "windows_i686_msvc" 234 | version = "0.52.6" 235 | source = "registry+https://github.com/rust-lang/crates.io-index" 236 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 237 | 238 | [[package]] 239 | name = "windows_x86_64_gnu" 240 | version = "0.52.6" 241 | source = "registry+https://github.com/rust-lang/crates.io-index" 242 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 243 | 244 | [[package]] 245 | name = "windows_x86_64_gnullvm" 246 | version = "0.52.6" 247 | source = "registry+https://github.com/rust-lang/crates.io-index" 248 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 249 | 250 | [[package]] 251 | name = "windows_x86_64_msvc" 252 | version = "0.52.6" 253 | source = "registry+https://github.com/rust-lang/crates.io-index" 254 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 255 | --------------------------------------------------------------------------------