Skip to content

Commit e200a56

Browse files
committed
Merge branch 'test-version-delete'
2 parents dd27cae + 959c566 commit e200a56

File tree

8 files changed

+84
-9
lines changed

8 files changed

+84
-9
lines changed

src/types.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ pub enum Change {
4040
versions: Vec<CrateVersion>,
4141
},
4242
/// A crate version was deleted.
43+
///
44+
/// Note that this is equivalent to deleting a line from a crates version file.
45+
/// Should more than one lines be removed per commit, the order of these changes is nondeterministic.
4346
VersionDeleted(CrateVersion),
4447
}
4548

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:efca9de35ae159baebe515c0493d779a4847cdad81f6c10bfe10ba29f489cf51
3-
size 622600
2+
oid sha256:1815d2acb56808df48ff0a06c15b20114959d33ee9bdcaf37e1674a4b7ffbded
3+
size 589032

tests/fixtures/index-parts/commit.list

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,3 +332,4 @@ reproduce-#26-1
332332
reproduce-#26-2
333333
reproduce-#26-3
334334
reproduce-#26-4
335+
single-version-deletion
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
diff --git a/an/si/ansi-color-codec b/an/si/ansi-color-codec
2+
index f240492..7ca212b 100644
3+
--- a/an/si/ansi-color-codec
4+
+++ b/an/si/ansi-color-codec
5+
@@ -1,7 +1,5 @@
6+
{"name":"ansi-color-codec","vers":"0.2.9","deps":[{"name":"clap","req":"^4.0.23","features":["derive"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"ctrlc","req":"^3.2.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"a18b40315b9f13d98ae2ee8df35cdb810d696d197f859c15365fb6d34ecbba11","features":{},"yanked":true,"links":null}
7+
-{"name":"ansi-color-codec","vers":"0.3.1","deps":[{"name":"clap","req":"^4.0.23","features":["derive"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"ctrlc","req":"^3.2.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"b14431739f0b027eede3789fc83f1c13deae067f369e8456ef5d183ddbdf82c4","features":{},"yanked":true,"links":null}
8+
{"name":"ansi-color-codec","vers":"0.3.2","deps":[{"name":"clap","req":"^4.0.23","features":["derive"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"ctrlc","req":"^3.2.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"fed46d46cba320856b6a9186d60129dfad6c142a5a6c00c922cfa6990140c26f","features":{},"yanked":true,"links":null}
9+
{"name":"ansi-color-codec","vers":"0.3.3","deps":[{"name":"clap","req":"^4.0.23","features":["derive"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"ctrlc","req":"^3.2.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"ad5a24fc4e47f61b52b8b4c6544bb47db648666f5a742b8776cc90a98a4c2459","features":{},"yanked":true,"links":null}
10+
-{"name":"ansi-color-codec","vers":"0.3.4","deps":[{"name":"clap","req":"^4.0.23","features":["derive"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"ctrlc","req":"^3.2.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"1048f2e4c18e0a4ca910a8f78da2b31c8257f5ffe4922432c85ac1677933722b","features":{},"yanked":true,"links":null}
11+
{"name":"ansi-color-codec","vers":"0.3.5","deps":[{"name":"clap","req":"^4.0.23","features":["derive"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"ctrlc","req":"^3.2.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"9b56ec379f35520cdb52f98d3269cd26d59088414fef86817d4f933c06b9374a","features":{},"yanked":true,"links":null}
12+
{"name":"ansi-color-codec","vers":"0.3.11","deps":[{"name":"clap","req":"^4.0.23","features":["derive"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"ctrlc","req":"^3.2.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"92d898f94a19fefba0f0b9906376ef7e1be7e542cd958fd0fd4de1c7c2c9818a","features":{},"yanked":false,"links":null}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
trigger a single-version deletion event created when deleting a line from a version file

tests/fixtures/make-index-parts.sh

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ root="$(cd "${0%/*}" && pwd)"
99
out="$root/index-parts"
1010
mkdir -p "$out"
1111
(
12-
cd "${1:?first argument is the clone of https://github.com/arlosi/crates.io-index}"
12+
cd "${1:?first argument is the clone of https://github.com/arlosi/crates.io-index (use the 'regenerate' branch}"
1313
paths="gi/ .github"
1414
revlist="$root/.tmp.revs"
1515
{ git log --format=format:%H $paths; echo; } | tail -r > "$revlist"
@@ -124,4 +124,23 @@ index 36a32366eb..f24049269d 100644
124124
EOF
125125
echo "$base_name" >> "$commit_list"
126126
echo 'reproduce issue #26: yanking ansi-color-codec 0.3.5 92c18bdf30' > "$base.msg"
127+
128+
base_name='single-version-deletion'
129+
base="$out/$base_name"
130+
cat <<EOF > "$base.diff"
131+
diff --git a/an/si/ansi-color-codec b/an/si/ansi-color-codec
132+
index f240492..7ca212b 100644
133+
--- a/an/si/ansi-color-codec
134+
+++ b/an/si/ansi-color-codec
135+
@@ -1,7 +1,5 @@
136+
{"name":"ansi-color-codec","vers":"0.2.9","deps":[{"name":"clap","req":"^4.0.23","features":["derive"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"ctrlc","req":"^3.2.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"a18b40315b9f13d98ae2ee8df35cdb810d696d197f859c15365fb6d34ecbba11","features":{},"yanked":true,"links":null}
137+
-{"name":"ansi-color-codec","vers":"0.3.1","deps":[{"name":"clap","req":"^4.0.23","features":["derive"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"ctrlc","req":"^3.2.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"b14431739f0b027eede3789fc83f1c13deae067f369e8456ef5d183ddbdf82c4","features":{},"yanked":true,"links":null}
138+
{"name":"ansi-color-codec","vers":"0.3.2","deps":[{"name":"clap","req":"^4.0.23","features":["derive"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"ctrlc","req":"^3.2.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"fed46d46cba320856b6a9186d60129dfad6c142a5a6c00c922cfa6990140c26f","features":{},"yanked":true,"links":null}
139+
{"name":"ansi-color-codec","vers":"0.3.3","deps":[{"name":"clap","req":"^4.0.23","features":["derive"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"ctrlc","req":"^3.2.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"ad5a24fc4e47f61b52b8b4c6544bb47db648666f5a742b8776cc90a98a4c2459","features":{},"yanked":true,"links":null}
140+
-{"name":"ansi-color-codec","vers":"0.3.4","deps":[{"name":"clap","req":"^4.0.23","features":["derive"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"ctrlc","req":"^3.2.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"1048f2e4c18e0a4ca910a8f78da2b31c8257f5ffe4922432c85ac1677933722b","features":{},"yanked":true,"links":null}
141+
{"name":"ansi-color-codec","vers":"0.3.5","deps":[{"name":"clap","req":"^4.0.23","features":["derive"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"ctrlc","req":"^3.2.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"9b56ec379f35520cdb52f98d3269cd26d59088414fef86817d4f933c06b9374a","features":{},"yanked":true,"links":null}
142+
{"name":"ansi-color-codec","vers":"0.3.11","deps":[{"name":"clap","req":"^4.0.23","features":["derive"],"optional":false,"default_features":true,"target":null,"kind":"normal"},{"name":"ctrlc","req":"^3.2.3","features":[],"optional":false,"default_features":true,"target":null,"kind":"normal"}],"cksum":"92d898f94a19fefba0f0b9906376ef7e1be7e542cd958fd0fd4de1c7c2c9818a","features":{},"yanked":false,"links":null}
143+
EOF
144+
echo "$base_name" >> "$commit_list"
145+
echo 'trigger a single-version deletion event created when deleting a line from a version file' > "$base.msg"
127146
)

tests/index/changes_between_commits.rs

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,16 +85,55 @@ fn addition() -> crate::Result {
8585
}
8686

8787
#[test]
88-
fn deletion() -> crate::Result {
88+
fn crate_deletion_with_single_version() -> crate::Result {
8989
let changes = changes(index_ro()?, "@^{/Delete crates}")?;
9090
assert_eq!(changes.len(), 1);
91+
let (name, versions) = changes
92+
.first()
93+
.and_then(|c| c.crate_deleted())
94+
.expect("CrateDeleted event");
95+
assert_eq!(name, "girl");
9196
assert_eq!(
92-
changes.first().and_then(|c| c.crate_deleted().map(|t| t.0)),
93-
Some("girl")
97+
versions.len(),
98+
1,
99+
"there was only one version, it's still detected as crate deletion though"
94100
);
95101
Ok(())
96102
}
97103

104+
#[test]
105+
fn crate_deletion_with_multiple_versions() -> crate::Result {
106+
let changes = changes(index_ro()?, "@^{/Delete crate\n}")?;
107+
assert_eq!(changes.len(), 1);
108+
let (name, versions) = changes
109+
.first()
110+
.and_then(|c| c.crate_deleted())
111+
.expect("CrateDeleted event");
112+
assert_eq!(name, "git-fuse");
113+
assert_eq!(versions.len(), 4, "there were 4 versions in the file");
114+
Ok(())
115+
}
116+
117+
#[test]
118+
fn delete_single_version() -> crate::Result {
119+
let changes = changes(index_ro()?, "@^{/trigger a single-version deletion}")?;
120+
assert_eq!(changes.len(), 2);
121+
let mut changes: Vec<_> = changes
122+
.iter()
123+
.map(|change| {
124+
change
125+
.version_deleted()
126+
.expect("only single versions deleted here")
127+
.version
128+
.clone()
129+
})
130+
.collect();
131+
changes.sort();
132+
assert_eq!(changes[0], "0.3.1");
133+
assert_eq!(changes[1], "0.3.4");
134+
Ok(())
135+
}
136+
98137
#[test]
99138
fn new_version() -> crate::Result {
100139
let changes = changes(index_ro()?, ":/Updating crate `git-repository#0.22.1`")?;

tests/index/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use std::sync::atomic::AtomicBool;
77

88
mod changes_between_commits;
99

10-
const NUM_CHANGES_SINCE_EVER: usize = 3523;
10+
const NUM_CHANGES_SINCE_EVER: usize = 3521;
1111

1212
#[test]
1313
fn peek_changes() -> crate::Result {
@@ -102,8 +102,8 @@ fn changes_since_last_fetch() {
102102
"seen branch was updated again"
103103
);
104104
assert_eq!(
105-
num_seen_after_reset, 1,
106-
"normalization has no changes, but the commit before has one"
105+
num_seen_after_reset, 2,
106+
"normalization has no changes, but the commit before has one, and apparently the version-deleted commit also adds one here"
107107
);
108108

109109
assert_eq!(

0 commit comments

Comments
 (0)