Clone Tools
  • last updated a few seconds ago
Constraints
Constraints: committers
 
Constraints: files
Constraints: dates
Implement missing optimizations

This commit introduces some missing union optimizations during

exclude rule merging. Those weren't implemented because we didn't

see them in our test cases, but we had customer logs showing such

operations.

It's worth noting this commit adds an utility class which transforms

a JSON dump from a log entry into code which can be used to create

test cases.

    • -1
    • +33
    ./factories/NormalizingExcludeFactory.java
  1. … 3 more files in changeset.
Implement missing optimizations

This commit introduces some missing union optimizations during

exclude rule merging. Those weren't implemented because we didn't

see them in our test cases, but we had customer logs showing such

operations.

It's worth noting this commit adds an utility class which transforms

a JSON dump from a log entry into code which can be used to create

test cases.

    • -1
    • +33
    ./factories/NormalizingExcludeFactory.java
    • -0
    • +164
    ./factories/Unions.java
  1. … 3 more files in changeset.
Merge remote-tracking branch 'origin/release'

* origin/release:

Fix JUnit Jupiter related typos

Fix early reset of cached filtered states

Add more missing optimizations

Fix cached filtered states being reset too early

Add debug log processing script

Add ability to trace stack overflows only

Do not use heuristic to tell if we should revisit a node

Optimize A ∩ (B ∪ C)

Add missing optimization of intersection

Add missing optimization of intersection

Add a logging exclude factory

Add test coverage for intersections of 3 elements

Add more logging to exclusion of edges

Use constant mask instead of class hashcode

Add randomization of sets

Rework test setup for exclude merging

Move 'processing of dependency excludes' to upgrading guide

    • -15
    • +1
    ./simple/DefaultIvyPatternMatcherExcludeRuleSpec.java
  1. … 2 more files in changeset.
Add more missing optimizations

  1. … 2 more files in changeset.
Add more missing optimizations

  1. … 2 more files in changeset.
Add ability to trace stack overflows only

    • -15
    • +49
    ./factories/LoggingExcludeFactory.java
Add ability to trace stack overflows only

    • -15
    • +49
    ./factories/LoggingExcludeFactory.java
Add ability to trace stack overflows only

    • -15
    • +49
    ./factories/LoggingExcludeFactory.java
Do not use heuristic to tell if we should revisit a node

The previous implementation assumed that if we visited a node once,

and then revisit later, and that the exclusion filter "excludes

the same things if we ignore artifacts", then we don't need to revisit.

The problem with this approach is that it's a heuristic, that in

practice compares the exclude specs. But, two exclude specs can

be _equivalent_ (they would exclude the same things) but not _equal_

(their structure is different, because for example they were reduced

differently because of ordering).

This commit removes this faulty `equalsIgnoreArtifact` method in

favor of a direct comparison of the result of excluding edges. If

both specs are equivalent, they will exclude the same edges.

    • -76
    • +0
    ./simple/DefaultCompositeExclude.java
    • -6
    • +0
    ./simple/DefaultExcludeEverything.java
    • -14
    • +0
    ./simple/DefaultIvyPatternMatcherExcludeRuleSpec.java
    • -13
    • +0
    ./simple/DefaultModuleArtifactExclude.java
    • -6
    • +0
    ./simple/DefaultModuleIdSetExclude.java
  1. … 2 more files in changeset.
Do not use heuristic to tell if we should revisit a node

The previous implementation assumed that if we visited a node once,

and then revisit later, and that the exclusion filter "excludes

the same things if we ignore artifacts", then we don't need to revisit.

The problem with this approach is that it's a heuristic, that in

practice compares the exclude specs. But, two exclude specs can

be _equivalent_ (they would exclude the same things) but not _equal_

(their structure is different, because for example they were reduced

differently because of ordering).

This commit removes this faulty `equalsIgnoreArtifact` method in

favor of a direct comparison of the result of excluding edges. If

both specs are equivalent, they will exclude the same edges.

    • -76
    • +0
    ./simple/DefaultCompositeExclude.java
    • -6
    • +0
    ./simple/DefaultExcludeEverything.java
    • -14
    • +0
    ./simple/DefaultIvyPatternMatcherExcludeRuleSpec.java
    • -13
    • +0
    ./simple/DefaultModuleArtifactExclude.java
    • -6
    • +0
    ./simple/DefaultModuleIdSetExclude.java
  1. … 2 more files in changeset.
Do not use heuristic to tell if we should revisit a node

The previous implementation assumed that if we visited a node once,

and then revisit later, and that the exclusion filter "excludes

the same things if we ignore artifacts", then we don't need to revisit.

The problem with this approach is that it's a heuristic, that in

practice compares the exclude specs. But, two exclude specs can

be _equivalent_ (they would exclude the same things) but not _equal_

(their structure is different, because for example they were reduced

differently because of ordering).

This commit removes this faulty `equalsIgnoreArtifact` method in

favor of a direct comparison of the result of excluding edges. If

both specs are equivalent, they will exclude the same edges.

    • -76
    • +0
    ./simple/DefaultCompositeExclude.java
    • -6
    • +0
    ./simple/DefaultExcludeEverything.java
    • -14
    • +0
    ./simple/DefaultIvyPatternMatcherExcludeRuleSpec.java
    • -13
    • +0
    ./simple/DefaultModuleArtifactExclude.java
    • -6
    • +0
    ./simple/DefaultModuleIdSetExclude.java
  1. … 2 more files in changeset.
Optimize A ∩ (B ∪ C)

-> (A ∩ B) ∪ (A ∩ C)

User data shows this can often be reduced to an empty set because

distribution will compute empty sets on both sides.

  1. … 1 more file in changeset.
Optimize A ∩ (B ∪ C)

-> (A ∩ B) ∪ (A ∩ C)

User data shows this can often be reduced to an empty set because

distribution will compute empty sets on both sides.

  1. … 1 more file in changeset.
Optimize A ∩ (B ∪ C)

-> (A ∩ B) ∪ (A ∩ C)

User data shows this can often be reduced to an empty set because

distribution will compute empty sets on both sides.

  1. … 1 more file in changeset.
Add missing optimization of intersection

when module ids are different

  1. … 1 more file in changeset.
Add missing optimization of intersection

when module ids are different

  1. … 1 more file in changeset.
Add missing optimization of intersection

  1. … 1 more file in changeset.
Add missing optimization of intersection

  1. … 1 more file in changeset.
Add a logging exclude factory

This factory is enabled if, and only if, the log level is set to debug (`-d`).

Then it will log all merge operations, and report if there's a stack overflow

in merging exclude specs.

    • -0
    • +96
    ./factories/LoggingExcludeFactory.java
    • -1
    • +1
    ./simple/DefaultExcludeEverything.java
    • -1
    • +1
    ./simple/DefaultIvyPatternMatcherExcludeRuleSpec.java
    • -1
    • +1
    ./simple/DefaultModuleArtifactExclude.java
    • -1
    • +2
    ./simple/DefaultModuleIdSetExclude.java
    • -0
    • +27
    ./simple/ExcludeJsonHelper.java
Add a logging exclude factory

This factory is enabled if, and only if, the log level is set to debug (`-d`).

Then it will log all merge operations, and report if there's a stack overflow

in merging exclude specs.

    • -0
    • +96
    ./factories/LoggingExcludeFactory.java
    • -1
    • +1
    ./simple/DefaultExcludeEverything.java
    • -1
    • +1
    ./simple/DefaultIvyPatternMatcherExcludeRuleSpec.java
    • -1
    • +1
    ./simple/DefaultModuleArtifactExclude.java
    • -1
    • +2
    ./simple/DefaultModuleIdSetExclude.java
    • -0
    • +27
    ./simple/ExcludeJsonHelper.java
Add a logging exclude factory

This factory is enabled if, and only if, the log level is set to debug (`-d`).

Then it will log all merge operations, and report if there's a stack overflow

in merging exclude specs.

    • -0
    • +96
    ./factories/LoggingExcludeFactory.java
    • -1
    • +1
    ./simple/DefaultExcludeEverything.java
    • -1
    • +1
    ./simple/DefaultIvyPatternMatcherExcludeRuleSpec.java
    • -1
    • +1
    ./simple/DefaultModuleArtifactExclude.java
    • -1
    • +2
    ./simple/DefaultModuleIdSetExclude.java
Add test coverage for intersections of 3 elements

and add more test coverage for unions

    • -0
    • +2
    ./factories/NormalizingExcludeFactory.java
  1. … 1 more file in changeset.
Add test coverage for intersections of 3 elements

and add more test coverage for unions

    • -0
    • +2
    ./factories/NormalizingExcludeFactory.java
  1. … 1 more file in changeset.
Use constant mask instead of class hashcode

Use constant mask instead of class hashcode

Add randomization of sets

  1. … 2 more files in changeset.
Add randomization of sets

  1. … 2 more files in changeset.
Revert new exclude rule merging

This is a temporary revert to allow ironing out some issues with

the newer implementation.

    • -0
    • +102
    ./AbstractCompositeExclusion.java
    • -0
    • +187
    ./ImmutableModuleExclusionSet.java
    • -0
    • +95
    ./IvyPatternMatcherExcludeRuleSpec.java
  1. … 25 more files in changeset.
Revert new exclude rule merging

This is a temporary revert to allow ironing out some more issues with

the newer implementation.

    • -0
    • +102
    ./AbstractCompositeExclusion.java
    • -0
    • +118
    ./AbstractModuleExclusion.java
    • -0
    • +82
    ./ArtifactExcludeSpec.java
    • -0
    • +107
    ./EitherExclusion.java
    • -0
    • +46
    ./ExcludeAllModulesSpec.java
    • -0
    • +58
    ./GroupNameExcludeSpec.java
    • -0
    • +187
    ./ImmutableModuleExclusionSet.java
    • -0
    • +95
    ./IvyPatternMatcherExcludeRuleSpec.java
    • -0
    • +49
    ./ModuleExclusion.java
    • -0
    • +57
    ./ModuleIdExcludeSpec.java
    • -0
    • +57
    ./ModuleNameExcludeSpec.java
  1. … 25 more files in changeset.
Revert new exclude rule merging

This is a temporary revert to allow ironing out some issues with

the newer implementation.

    • -0
    • +102
    ./AbstractCompositeExclusion.java
    • -0
    • +187
    ./ImmutableModuleExclusionSet.java
    • -0
    • +95
    ./IvyPatternMatcherExcludeRuleSpec.java
  1. … 25 more files in changeset.