use crates::git_workarea::GitContext;
use context::CheckGitContext;
#[derive(Debug)]
pub struct SubmoduleContext<'a> {
pub name: &'a str,
pub path: &'a str,
pub url: &'a str,
pub branch: &'a str,
pub context: GitContext,
}
impl<'a> SubmoduleContext<'a> {
pub fn new(ctx: &'a CheckGitContext, diff_path: &str) -> Option<Self> {
ctx.submodule_config()
.iter()
.filter_map(|(name, config)| {
config.get("url")
.and_then(|url| {
config.get("path")
.map(|path| (url, path))
})
.and_then(|(url, path)| {
if path == diff_path {
let branch = config.get("branch")
.map_or("master", |b| b.as_str());
Some((name, path, url, branch))
} else {
None
}
})
})
.next()
.map(|(name, path, url, branch)| {
let gitdir = ctx.gitdir().join("modules").join(path);
SubmoduleContext {
name: name,
path: path,
url: url,
branch: branch,
context: GitContext::new(gitdir),
}
})
}
}