aboutsummaryrefslogtreecommitdiff
path: root/src/remote/git.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/remote/git.rs')
-rw-r--r--src/remote/git.rs49
1 files changed, 43 insertions, 6 deletions
diff --git a/src/remote/git.rs b/src/remote/git.rs
index f74af42..75e6292 100644
--- a/src/remote/git.rs
+++ b/src/remote/git.rs
@@ -12,9 +12,18 @@ impl Git {
}
impl super::Remote for Git {
- fn can_handle(&self, _: &str) -> bool {
- // If we ever implement another remote we will want a check strategy
- true
+ fn can_handle(&self, remote: &str) -> bool {
+ let command = format!("git ls-remote {remote}");
+ match Command::new("sh")
+ .arg("-c")
+ .arg(&command)
+ .stdout(Stdio::null())
+ .stderr(Stdio::null())
+ .status()
+ {
+ Ok(status) => status.success(),
+ _ => false,
+ }
}
fn sync_up(&self, remote: &str, directory: &Path) -> Result<()> {
@@ -141,10 +150,38 @@ mod tests {
}
#[test]
- fn test_dummy_handle() {
+ fn test_can_handle_git_remotes() {
+ let git = Git::new();
+
+ let test_dir = setup_test_dir();
+ let remote_dir = test_dir.join("remote");
+ let remote_dir_as_string = remote_dir.display().to_string();
+
+ create_dir_all(&remote_dir).expect("Could not create remote test directory");
+ create_remote(&remote_dir);
+ assert!(git.can_handle(&remote_dir_as_string));
+ cleanup_test_dir(&test_dir);
+ }
+
+ #[test]
+ fn test_can_not_handle_not_git_remotes() {
let git = Git::new();
- let can_handle = git.can_handle("anything");
- assert!(can_handle);
+
+ let test_dir = setup_test_dir();
+ let remote_dir = test_dir.join("remote");
+ let remote_dir_as_string = remote_dir.display().to_string();
+
+ create_dir_all(&remote_dir).expect("Could not create remote test directory");
+ assert!(!git.can_handle(&remote_dir_as_string));
+ cleanup_test_dir(&test_dir);
+ }
+
+ #[test]
+ fn test_can_not_handle_invalid_paths() {
+ let git = Git::new();
+
+ let invalid_remote = String::from("test\0");
+ assert!(!git.can_handle(&invalid_remote));
}
#[test]