Skip to content
Merged
Changes from 15 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
d0c6e74
fix partial sha & add tests
srest2021 Sep 9, 2025
eeadf4f
update tests
srest2021 Sep 9, 2025
501e432
linter
srest2021 Sep 9, 2025
2355ec6
linter
srest2021 Sep 9, 2025
cdd97cc
make git test consistent with other tests
srest2021 Sep 9, 2025
713678c
move git test out of mod
srest2021 Sep 9, 2025
b662ada
use find_matching_rev
srest2021 Sep 9, 2025
04df02d
preserve partial sha when sending to api
srest2021 Sep 10, 2025
6dad2ac
linter
srest2021 Sep 10, 2025
fd030f2
rename
srest2021 Sep 10, 2025
651c7c2
clean up comments
srest2021 Sep 10, 2025
e5983dc
fix logic & tests
srest2021 Sep 10, 2025
43830ac
fix test
srest2021 Sep 10, 2025
7c165ff
linter
srest2021 Sep 10, 2025
898af8a
Merge branch 'master' into srest2021/REPLAY-413
szokeasaurusrex Sep 11, 2025
6cc111f
only valid full & partial SHAs accepted
srest2021 Sep 12, 2025
8b900ad
Merge branch 'master' into srest2021/REPLAY-413
srest2021 Sep 12, 2025
acf91a5
revert prior changes
srest2021 Sep 12, 2025
40b1f39
linteR
srest2021 Sep 12, 2025
9859a9c
Update src/commands/releases/set_commits.rs
srest2021 Sep 15, 2025
85d334c
soft validation
srest2021 Sep 15, 2025
8ddca69
linter
srest2021 Sep 15, 2025
6ecf8b0
Merge branch 'master' into srest2021/REPLAY-413
srest2021 Sep 15, 2025
116ce99
update validaton & help
srest2021 Sep 17, 2025
2c4f96e
Update src/commands/releases/set_commits.rs
srest2021 Sep 17, 2025
4dd3548
Update src/commands/releases/set_commits.rs
srest2021 Sep 17, 2025
6d3fa1c
add 64 char constant
srest2021 Sep 17, 2025
c515e78
Update src/constants.rs
srest2021 Sep 18, 2025
307ed46
Make the example SHA have hex chars only
srest2021 Sep 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 79 additions & 4 deletions src/utils/vcs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,21 @@ fn find_matching_submodule(
Ok(None)
}

/// Helper function to determine which SHA to use for the API
/// Returns the original partial SHA if it looks like a partial SHA,
/// otherwise returns the resolved SHA
fn get_api_sha(original: &str, resolved: &str) -> String {
let is_original_partial = original.len() >= 4
&& original.len() < 40
&& original.chars().all(|c| c.is_ascii_hexdigit());

if is_original_partial {
original.to_owned()
} else {
resolved.to_owned()
}
}
Comment thread
cursor[bot] marked this conversation as resolved.
Outdated

fn find_matching_revs(
spec: &CommitSpec,
repos: &[Repo],
Expand All @@ -487,21 +502,23 @@ fn find_matching_revs(
)
}

let rev = if let Some(rev) = find_matching_rev(
let rev = if let Some(resolved_sha) = find_matching_rev(
spec.reference(),
spec,
repos,
disable_discovery,
remote_name.clone(),
)? {
rev
get_api_sha(&spec.rev, &resolved_sha)
} else {
return Err(error(spec.reference(), &spec.repo));
};

let prev_rev = if let Some(rev) = spec.prev_reference() {
if let Some(rv) = find_matching_rev(rev, spec, repos, disable_discovery, remote_name)? {
Some(rv)
if let Some(resolved_sha) =
find_matching_rev(rev, spec, repos, disable_discovery, remote_name)?
{
Some(get_api_sha(spec.prev_rev.as_ref().unwrap(), &resolved_sha))
} else {
return Err(error(rev, &spec.repo));
}
Expand Down Expand Up @@ -1349,4 +1366,62 @@ mod tests {
std::env::remove_var("GITHUB_EVENT_NAME");
std::env::remove_var("GITHUB_REF");
}

#[test]
fn test_get_api_sha_partial_sha() {
let original = "4eba";
let resolved = "4eba000000000000000000000000000000000000";
assert_eq!(get_api_sha(original, resolved), "4eba");

let original = "4ebad56";
let resolved = "4ebad56000000000000000000000000000000000";
assert_eq!(get_api_sha(original, resolved), "4ebad56");

let original = "abc123def";
let resolved = "abc123def0000000000000000000000000000000";
assert_eq!(get_api_sha(original, resolved), "abc123def");

let original = "4ebad56f915d32a0b8c8c8c8c8c8c8c8c8c8c8c";
let resolved = "4ebad56f915d32a0b8c8c8c8c8c8c8c8c8c8c8c0";
assert_eq!(
get_api_sha(original, resolved),
"4ebad56f915d32a0b8c8c8c8c8c8c8c8c8c8c8c"
);
}
Comment thread
cursor[bot] marked this conversation as resolved.
Outdated

#[test]
fn test_get_api_sha_full_sha() {
let original = "4ebad56f915d32a0b8c8c8c8c8c8c8c8c8c8c8c8c8";
let resolved = "4ebad56f915d32a0b8c8c8c8c8c8c8c8c8c8c8c8c8";
assert_eq!(get_api_sha(original, resolved), resolved);
}

#[test]
fn test_get_api_sha_too_short() {
let original = "4eb";
let resolved = "4eb0000000000000000000000000000000000000";
assert_eq!(get_api_sha(original, resolved), resolved);
}

#[test]
fn test_get_api_sha_symbolic() {
let original = "HEAD";
let resolved = "4ebad56f915d32a0b8c8c8c8c8c8c8c8c8c8c8c8c8";
assert_eq!(get_api_sha(original, resolved), resolved);

let original = "main";
let resolved = "4ebad56f915d32a0b8c8c8c8c8c8c8c8c8c8c8c8c8";
assert_eq!(get_api_sha(original, resolved), resolved);
}

#[test]
fn test_get_api_sha_mixed_case_hex() {
let original = "4EbAd56";
let resolved = "4EbAd56000000000000000000000000000000000";
assert_eq!(get_api_sha(original, resolved), "4EbAd56");

let original = "ABCDEF1";
let resolved = "ABCDEF1000000000000000000000000000000000";
assert_eq!(get_api_sha(original, resolved), "ABCDEF1");
}
}