Skip to content

Commit 6fcc820

Browse files
committed
Move to YAML
1 parent b53ff15 commit 6fcc820

File tree

4 files changed

+581
-136
lines changed

4 files changed

+581
-136
lines changed

src/bin/josh-filter.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ fn run_filter(args: Vec<String>) -> josh::JoshResult<i32> {
103103
.long("check-permission")
104104
.short("c"),
105105
)
106+
.arg(clap::Arg::with_name("missing-permission").long("missing-permission"))
106107
.arg(
107108
clap::Arg::with_name("whitelist")
108109
.long("whitelist")
@@ -272,13 +273,13 @@ fn run_filter(args: Vec<String>) -> josh::JoshResult<i32> {
272273
permissions_filter = josh::filter::make_permissions_filter(filterobj, whitelist, blacklist)
273274
}
274275

275-
let updated_refs = josh::filter_ref(
276-
&transaction,
277-
filterobj,
278-
&src,
279-
&t,
280-
permissions_filter,
281-
)?;
276+
let missing_permissions = args.is_present("missing-permission");
277+
if missing_permissions {
278+
filterobj = permissions_filter;
279+
permissions_filter = josh::filter::empty();
280+
}
281+
282+
let updated_refs = josh::filter_ref(&transaction, filterobj, &src, &t, permissions_filter)?;
282283
if args.value_of("update") != Some("FILTERED_HEAD") && updated_refs == 0 {
283284
println!(
284285
"Warning: reference {} wasn't updated",

src/filter/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ impl std::fmt::Debug for Filter {
2929
return to_op(*self).fmt(f);
3030
}
3131
}
32+
3233
pub fn nop() -> Filter {
3334
to_filter(Op::Nop)
3435
}

src/lib.rs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ pub fn filter_ref(
180180
s
181181
} else {
182182
tracing::trace!("apply_to_commit (permissions)");
183+
println!("perm {:?}", permissions);
183184

184185
filter::apply_to_commit(permissions, &original_commit, &transaction)?
185186
};
@@ -197,6 +198,7 @@ pub fn filter_ref(
197198
}
198199
}
199200

201+
println!("filter {:?}", filterobj);
200202
let filter_commit = if let Some(s) = transaction.get_ref(filterobj, oid) {
201203
s
202204
} else {
@@ -324,39 +326,40 @@ pub fn get_acl(
324326
) -> JoshResult<(filter::Filter, filter::Filter)> {
325327
let users =
326328
std::fs::read_to_string(users).map_err(|_| josh_error("failed to read users file"))?;
327-
let users: Users = toml::from_str(&users)
329+
let users: Users = serde_yaml::from_str(&users)
328330
.map_err(|err| josh_error(format!("failed to parse users file: {}", err).as_str()))?;
329331
let groups =
330332
std::fs::read_to_string(groups).map_err(|_| josh_error("failed to read groups file"))?;
331-
let groups: Groups = toml::from_str(&groups)
333+
let groups: Groups = serde_yaml::from_str(&groups)
332334
.map_err(|err| josh_error(format!("failed to parse groups file: {}", err).as_str()))?;
333335

334336
return users
335337
.get(user)
336338
.and_then(|u| {
337-
let mut whitelist = filter::nop();
339+
let mut whitelist = filter::empty();
338340
let mut blacklist = filter::empty();
339341
for g in &u.groups {
340-
let group_lists = groups.get(g.as_str()?).and_then(|group| {
341-
group.get(repo).and_then(|repo| {
342-
let w = filter::parse(&repo.whitelist);
343-
let b = filter::parse(&repo.blacklist);
342+
let lists = groups.get(repo).and_then(|repo| {
343+
repo.get(g.as_str()?).and_then(|group| {
344+
let w = filter::parse(&group.whitelist);
345+
let b = filter::parse(&group.blacklist);
344346
Some((w, b))
345347
})
346348
})?;
347-
if let Err(e) = group_lists.0 {
349+
if let Err(e) = lists.0 {
348350
return Some(Err(JoshError(format!("Error parsing whitelist: {}", e))));
349351
}
350-
if let Err(e) = group_lists.1 {
352+
if let Err(e) = lists.1 {
351353
return Some(Err(JoshError(format!("Error parsing blacklist: {}", e))));
352354
}
353-
if let Ok(w) = group_lists.0 {
355+
if let Ok(w) = lists.0 {
354356
whitelist = filter::compose(whitelist, w);
355357
}
356-
if let Ok(b) = group_lists.1 {
358+
if let Ok(b) = lists.1 {
357359
blacklist = filter::compose(blacklist, b);
358360
}
359361
}
362+
println!("w: {:?}, b: {:?}", whitelist, blacklist);
360363
Some(Ok((whitelist, blacklist)))
361364
})
362365
.unwrap_or(Ok((filter::empty(), filter::nop())));

0 commit comments

Comments
 (0)