Skip to content

Commit 8002111

Browse files
Remove :join filter
Id normally avoid removing filters, but i think this is an exception: I doubt anyone is using this, as it is just a less capable way to get to the same result as doing a filter --reverse or push.
1 parent c3dc5ff commit 8002111

File tree

9 files changed

+342
-361
lines changed

9 files changed

+342
-361
lines changed

docs/src/reference/filters.md

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -168,11 +168,6 @@ for all further ancestors (and so on).
168168
This special value `0000000000000000000000000000000000000000` can be used as a `<sha_n>` to filter
169169
commits that don't match any of the other shas.
170170

171-
### Join multiple histories into one **:join(<sha_0>:filter_0,...,<sha_N>:filter_N)**
172-
173-
Produce the history that would be the result of pushing the passed branches with the
174-
passed filters into the upstream.
175-
176171
### Start filtering from a specific commit **:from(<sha>:filter)**
177172

178173
Produce a history that keeps the original history up to and including the specified commit `<sha>` unchanged,

josh-core/src/filter/grammar.pest

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ filter_spec = { (
2626
| filter_rev
2727
| filter_from
2828
| filter_concat
29-
| filter_join
29+
| filter_unapply
3030
| filter_replace
3131
| filter_squash
3232
| filter_presub
@@ -74,15 +74,16 @@ filter_concat = {
7474
~ ")"
7575
}
7676

77-
filter_join = {
78-
CMD_START ~ "join" ~ "("
77+
filter_unapply = {
78+
CMD_START ~ "unapply" ~ "("
7979
~ NEWLINE*
8080
~ (rev ~ filter_spec)?
8181
~ (CMD_SEP+ ~ (rev ~ filter_spec))*
8282
~ NEWLINE*
8383
~ ")"
8484
}
8585

86+
8687
filter_replace = {
8788
CMD_START ~ "replace" ~ "("
8889
~ NEWLINE*

josh-core/src/filter/mod.rs

Lines changed: 20 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,6 @@ enum Op {
296296
// We use BTreeMap rather than HashMap to guarantee deterministic results when
297297
// converting to Filter
298298
Rev(std::collections::BTreeMap<LazyRef, Filter>),
299-
Join(std::collections::BTreeMap<LazyRef, Filter>),
300299
Linear,
301300
Prune,
302301
Unsign,
@@ -463,15 +462,12 @@ fn lazy_refs2(op: &Op) -> Vec<String> {
463462
lr.append(&mut lazy_refs(*f));
464463
lr
465464
}
466-
Op::Join(filters) => {
467-
let mut lr = lazy_refs2(&Op::Compose(filters.values().copied().collect()));
468-
lr.extend(filters.keys().filter_map(|x| {
469-
if let LazyRef::Lazy(s) = x {
470-
Some(s.to_owned())
471-
} else {
472-
None
473-
}
474-
}));
465+
Op::Unapply(r, f) => {
466+
let mut lr = Vec::new();
467+
if let LazyRef::Lazy(s) = r {
468+
lr.push(s.to_owned());
469+
}
470+
lr.append(&mut lazy_refs(*f));
475471
lr
476472
}
477473
Op::Squash(Some(revs)) => {
@@ -536,23 +532,18 @@ fn resolve_refs2(refs: &std::collections::HashMap<String, git2::Oid>, op: &Op) -
536532
};
537533
Op::HistoryConcat(resolved_ref, f)
538534
}
539-
Op::Join(filters) => {
540-
let lr = filters
541-
.iter()
542-
.map(|(r, f)| {
543-
let f = resolve_refs(refs, *f);
544-
if let LazyRef::Lazy(s) = r {
545-
if let Some(res) = refs.get(s) {
546-
(LazyRef::Resolved(*res), f)
547-
} else {
548-
(r.clone(), f)
549-
}
550-
} else {
551-
(r.clone(), f)
552-
}
553-
})
554-
.collect();
555-
Op::Join(lr)
535+
Op::Unapply(r, f) => {
536+
let f = resolve_refs(refs, *f);
537+
let resolved_ref = if let LazyRef::Lazy(s) = r {
538+
if let Some(res) = refs.get(s) {
539+
LazyRef::Resolved(*res)
540+
} else {
541+
r.clone()
542+
}
543+
} else {
544+
r.clone()
545+
};
546+
Op::Unapply(resolved_ref, f)
556547
}
557548
Op::Squash(Some(filters)) => {
558549
let lr = filters
@@ -614,14 +605,6 @@ fn spec2(op: &Op) -> String {
614605
v.sort();
615606
format!(":rev({})", v.join(","))
616607
}
617-
Op::Join(filters) => {
618-
let mut v = filters
619-
.iter()
620-
.map(|(k, v)| format!("{}{}", k.to_string(), spec(*v)))
621-
.collect::<Vec<_>>();
622-
v.sort();
623-
format!(":join({})", v.join(","))
624-
}
625608
Op::Workspace(path) => {
626609
format!(":workspace={}", parse::quote_if(&path.to_string_lossy()))
627610
}
@@ -864,34 +847,6 @@ fn apply_to_commit2(
864847
))
865848
.transpose();
866849
}
867-
Op::Join(refs) => {
868-
// First loop to populate missing list
869-
for (&_, f) in refs.iter() {
870-
transaction.get(*f, commit.id());
871-
}
872-
let mut result = commit.id();
873-
for (combine_tip, f) in refs.iter() {
874-
if let LazyRef::Resolved(combine_tip) = combine_tip {
875-
let old = some_or!(transaction.get(*f, commit.id()), {
876-
return Ok(None);
877-
});
878-
result = history::unapply_filter(
879-
transaction,
880-
*f,
881-
result,
882-
old,
883-
*combine_tip,
884-
history::OrphansMode::Keep,
885-
None,
886-
&mut None,
887-
)?;
888-
} else {
889-
return Err(josh_error("unresolved lazy ref"));
890-
}
891-
}
892-
transaction.insert(filter, commit.id(), result, true);
893-
return Ok(Some(result));
894-
}
895850
_ => {
896851
if let Some(oid) = transaction.get(filter, commit.id()) {
897852
return Ok(Some(oid));
@@ -1221,7 +1176,8 @@ fn apply2<'a>(transaction: &'a cache::Transaction, op: &Op, x: Apply<'a>) -> Jos
12211176
Op::Prune => Ok(x),
12221177
Op::Unsign => Ok(x),
12231178
Op::Rev(_) => Err(josh_error("not applicable to tree")),
1224-
Op::Join(_) => Err(josh_error("not applicable to tree")),
1179+
Op::Lookup(_) => Err(josh_error("not applicable to tree")),
1180+
Op::Lookup2(_) => Err(josh_error("not applicable to tree")),
12251181
Op::RegexReplace(replacements) => {
12261182
let mut t = x.tree().clone();
12271183
for (regex, replacement) in replacements {

josh-core/src/filter/parse.rs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -160,17 +160,6 @@ fn parse_item(pair: pest::iterators::Pair<Rule>) -> JoshResult<Op> {
160160
_ => Err(josh_error("parse_item: no match {:?}")),
161161
}
162162
}
163-
Rule::filter_join => {
164-
let v: Vec<_> = pair.into_inner().map(|x| x.as_str()).collect();
165-
166-
let hm = v
167-
.iter()
168-
.tuples()
169-
.map(|(oid, filter)| Ok((LazyRef::parse(oid)?, parse(filter)?)))
170-
.collect::<JoshResult<_>>()?;
171-
172-
Ok(Op::Join(hm))
173-
}
174163
Rule::filter_rev => {
175164
let v: Vec<_> = pair.into_inner().map(|x| x.as_str()).collect();
176165

josh-core/src/filter/persist.rs

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -281,15 +281,6 @@ impl InMemoryBuilder {
281281
let params_tree = self.build_rev_params(&v)?;
282282
push_tree_entries(&mut entries, [("rev", params_tree)]);
283283
}
284-
Op::Join(filters) => {
285-
let mut v = filters
286-
.iter()
287-
.map(|(k, v)| (k.to_string(), *v))
288-
.collect::<Vec<_>>();
289-
v.sort();
290-
let params_tree = self.build_rev_params(&v)?;
291-
push_tree_entries(&mut entries, [("join", params_tree)]);
292-
}
293284
Op::HistoryConcat(lr, f) => {
294285
let params_tree = self.build_rev_params(&[(lr.to_string(), *f)])?;
295286
push_tree_entries(&mut entries, [("concat", params_tree)]);
@@ -613,32 +604,6 @@ fn from_tree2(repo: &git2::Repository, tree_oid: git2::Oid) -> JoshResult<Op> {
613604
}
614605
Ok(Op::Rev(filters))
615606
}
616-
"join" => {
617-
let join_tree = repo.find_tree(entry.id())?;
618-
let mut filters = std::collections::BTreeMap::new();
619-
for i in 0..join_tree.len() {
620-
let entry = join_tree
621-
.get(i)
622-
.ok_or_else(|| josh_error("join: missing entry"))?;
623-
let inner_tree = repo.find_tree(entry.id())?;
624-
let key_blob = repo.find_blob(
625-
inner_tree
626-
.get_name("o")
627-
.ok_or_else(|| josh_error("join: missing key"))?
628-
.id(),
629-
)?;
630-
let filter_tree = repo.find_tree(
631-
inner_tree
632-
.get_name("f")
633-
.ok_or_else(|| josh_error("join: missing filter"))?
634-
.id(),
635-
)?;
636-
let key = std::str::from_utf8(key_blob.content())?.to_string();
637-
let filter = from_tree2(repo, filter_tree.id())?;
638-
filters.insert(LazyRef::parse(&key)?, to_filter(filter));
639-
}
640-
Ok(Op::Join(filters))
641-
}
642607
"concat" => {
643608
let concat_tree = repo.find_tree(entry.id())?;
644609
let entry = concat_tree

0 commit comments

Comments
 (0)