Skip to content

Commit 0454efb

Browse files
authored
add bindings for git_branch_name_is_valid (#715)
1 parent 9103941 commit 0454efb

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

Diff for: libgit2-sys/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -2740,6 +2740,7 @@ extern "C" {
27402740
force: c_int,
27412741
) -> c_int;
27422742
pub fn git_branch_name(out: *mut *const c_char, branch: *const git_reference) -> c_int;
2743+
pub fn git_branch_name_is_valid(valid: *mut c_int, name: *const c_char) -> c_int;
27432744
pub fn git_branch_remote_name(
27442745
out: *mut git_buf,
27452746
repo: *mut git_repository,

Diff for: src/branch.rs

+19-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,16 @@ impl<'repo> Branch<'repo> {
2828
Branch { inner: reference }
2929
}
3030

31+
/// Ensure the branch name is well-formed.
32+
pub fn name_is_valid(name: &str) -> Result<bool, Error> {
33+
let name = CString::new(name)?;
34+
let mut valid: libc::c_int = 0;
35+
unsafe {
36+
try_call!(raw::git_branch_name_is_valid(&mut valid, name.as_ptr()));
37+
}
38+
Ok(valid == 1)
39+
}
40+
3141
/// Gain access to the reference that is this branch
3242
pub fn get(&self) -> &Reference<'repo> {
3343
&self.inner
@@ -151,7 +161,7 @@ impl<'repo> Drop for Branches<'repo> {
151161

152162
#[cfg(test)]
153163
mod tests {
154-
use crate::BranchType;
164+
use crate::{Branch, BranchType};
155165

156166
#[test]
157167
fn smoke() {
@@ -175,4 +185,12 @@ mod tests {
175185

176186
b1.delete().unwrap();
177187
}
188+
189+
#[test]
190+
fn name_is_valid() {
191+
assert!(Branch::name_is_valid("foo").unwrap());
192+
assert!(!Branch::name_is_valid("").unwrap());
193+
assert!(!Branch::name_is_valid("with spaces").unwrap());
194+
assert!(!Branch::name_is_valid("~tilde").unwrap());
195+
}
178196
}

0 commit comments

Comments
 (0)