Skip to content

Commit 53c03e8

Browse files
committed
Update to v1.0.5
- Fix full/partial scan handling, by checking for presence of master branch - Update progress indicator at end of task, not beginning of task - Allow platforms not listed in PLATFORMS_UNIX/WINDOWS
1 parent 88c7e15 commit 53c03e8

File tree

5 files changed

+31
-52
lines changed

5 files changed

+31
-52
lines changed

Cargo.lock

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "panamax"
3-
version = "1.0.4"
3+
version = "1.0.5"
44
authors = ["k3d3 <[email protected]>"]
55
description = "Mirror rustup and crates.io repositories, for offline Rust and Cargo usage."
66
license = "MIT/Apache-2.0"
@@ -21,7 +21,7 @@ env_logger = "0.9.0"
2121
sha2 = "0.9.6"
2222
url = "2.2.2"
2323
glob = "0.3.0"
24-
git2 = "0.13.21"
24+
git2 = "0.14"
2525
serde_json = "1.0.67"
2626
thiserror = "1.0.29"
2727
tokio = { version = "1.11.0", features = ["full"] }

src/crates.rs

+9-14
Original file line numberDiff line numberDiff line change
@@ -105,18 +105,11 @@ pub async fn sync_crates_files(
105105
let origin_master = repo.find_reference("refs/remotes/origin/master")?;
106106
let origin_master_tree = origin_master.peel_to_tree()?;
107107

108-
let master = repo.find_reference("refs/heads/master")?;
109-
let master_tree = master.peel_to_tree()?;
110-
111-
// Perform a full scan if master and origin/master match
112-
let do_full_scan = origin_master.peel_to_commit()?.id() == master.peel_to_commit()?.id();
108+
let master = repo.find_reference("refs/heads/master").ok();
109+
let master_tree = master.as_ref().and_then(|m| m.peel_to_tree().ok());
113110

114111
// Diff between master and origin/master (i.e. everything since the last fetch)
115-
let diff = if do_full_scan {
116-
repo.diff_tree_to_tree(None, Some(&origin_master_tree), None)?
117-
} else {
118-
repo.diff_tree_to_tree(Some(&master_tree), Some(&origin_master_tree), None)?
119-
};
112+
let diff = repo.diff_tree_to_tree(master_tree.as_ref(), Some(&origin_master_tree), None)?;
120113

121114
let mut changed_crates = Vec::new();
122115
let mut removed_crates = Vec::new();
@@ -214,16 +207,18 @@ pub async fn sync_crates_files(
214207
let pb = pb.clone();
215208

216209
tokio::spawn(async move {
217-
pb.inc(1);
218-
219-
sync_one_crate_entry(
210+
let out = sync_one_crate_entry(
220211
&path,
221212
crates_source.as_deref(),
222213
mirror_retries,
223214
&c,
224215
&user_agent,
225216
)
226-
.await
217+
.await;
218+
219+
pb.inc(1);
220+
221+
out
227222
})
228223
})
229224
.buffer_unordered(crates.download_threads)

src/crates_index.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,10 @@ pub fn sync_crates_repo(mirror_path: &Path, crates: &ConfigCrates) -> Result<(),
7777
fetch_opts.proxy_options(proxy_opts);
7878

7979
if !repo_path.join(".git").exists() {
80-
clone_repository(fetch_opts, &crates.source_index, &repo_path)?
80+
clone_repository(fetch_opts, &crates.source_index, &repo_path)?;
81+
// Remove master in order to ensure full scan is performed
82+
let repo = Repository::open(&repo_path)?;
83+
repo.find_reference("refs/heads/master")?.delete()?;
8184
} else {
8285
// Get (fetch) the branch's latest remote "master" commit
8386
let repo = Repository::open(&repo_path)?;

src/rustup.rs

+12-31
Original file line numberDiff line numberDiff line change
@@ -181,35 +181,11 @@ impl Platforms {
181181

182182
pub fn get_platforms(rustup: &ConfigRustup) -> Result<Platforms, MirrorError> {
183183
let unix = match &rustup.platforms_unix {
184-
Some(p) => {
185-
let bad_platforms: Vec<&String> = p
186-
.iter()
187-
.filter(|x| !PLATFORMS_UNIX.contains(&x.as_str()))
188-
.collect();
189-
if !bad_platforms.is_empty() {
190-
eprintln!("Bad values in unix platforms: {:?}", bad_platforms);
191-
return Err(MirrorError::Config(
192-
"bad value for 'platforms_unix'".to_string(),
193-
));
194-
}
195-
p.clone()
196-
}
184+
Some(p) => p.clone(),
197185
None => PLATFORMS_UNIX.iter().map(|x| x.to_string()).collect(),
198186
};
199187
let windows = match &rustup.platforms_windows {
200-
Some(p) => {
201-
let bad_platforms: Vec<&String> = p
202-
.iter()
203-
.filter(|x| !PLATFORMS_WINDOWS.contains(&x.as_str()))
204-
.collect();
205-
if !bad_platforms.is_empty() {
206-
eprintln!("Bad values in windows platforms: {:?}", bad_platforms);
207-
return Err(MirrorError::Config(
208-
"bad value for 'platforms_windows'".to_string(),
209-
));
210-
}
211-
p.clone()
212-
}
188+
Some(p) => p.clone(),
213189
None => PLATFORMS_WINDOWS.iter().map(|x| x.to_string()).collect(),
214190
};
215191
Ok(Platforms { unix, windows })
@@ -290,9 +266,7 @@ async fn create_sync_tasks(
290266
let pb = pb.clone();
291267

292268
tokio::spawn(async move {
293-
pb.inc(1);
294-
295-
sync_one_init(
269+
let out = sync_one_init(
296270
&path,
297271
&source,
298272
platform.as_str(),
@@ -301,7 +275,11 @@ async fn create_sync_tasks(
301275
retries,
302276
&user_agent,
303277
)
304-
.await
278+
.await;
279+
280+
pb.inc(1);
281+
282+
out
305283
})
306284
})
307285
.buffer_unordered(threads)
@@ -676,9 +654,12 @@ pub async fn sync_rustup_channel(
676654
let pb = pb.clone();
677655

678656
tokio::spawn(async move {
657+
let out =
658+
sync_one_rustup_target(&path, &source, &url, &hash, retries, &user_agent).await;
659+
679660
pb.inc(1);
680661

681-
sync_one_rustup_target(&path, &source, &url, &hash, retries, &user_agent).await
662+
out
682663
})
683664
})
684665
.buffer_unordered(threads)

0 commit comments

Comments
 (0)