Fork tooling: a build check and a rename pass in the strip, a notice check in CI
strip.py compiles the stripped tree, so a dual-licensed file that only serves an Enterprise feature fails the import instead of the merge, as v0.16.23's tests/src/directory/issuer.rs does. Upstream's tests of the features the fork rebuilt are expected not to compile there and are listed in build-check-known.txt; an error anywhere else fails the run. Checked against both imports: v0.16.22 passes with its 16 expected errors, v0.16.23 fails on issuer.rs alone. Imports the strip leaves unused are reported. It also renames the upstream name where clients, users or operators meet it as an identifier, from tools/fork/renames.py: wire-protocol names, the web interface's client id, store keys, configuration defaults and the served schema. main is renamed with the same module, so a re-import arrives purged and those lines don't conflict. notice-check.py fails CI when an upstream file the fork changed, measured against the upstream branch, lacks its AGPL 5(a) notice; --fix adds it. It runs beside the name check in a renamed fork-checks job. Also commits v0.16.23's strip report under docs/fork/strip-reports/, which the import in #18 left out.
This commit is contained in:
@@ -0,0 +1,500 @@
|
||||
{
|
||||
"ref": "v0.16.23",
|
||||
"commit": "9d1c75ab68435e4417337f768291e5f947686203",
|
||||
"removed_files": [
|
||||
"crates/common/src/enterprise/alerts.rs",
|
||||
"crates/common/src/enterprise/config.rs",
|
||||
"crates/common/src/enterprise/license.rs",
|
||||
"crates/common/src/enterprise/llm.rs",
|
||||
"crates/common/src/enterprise/masked.rs",
|
||||
"crates/common/src/enterprise/mod.rs",
|
||||
"crates/common/src/telemetry/metrics/store.rs",
|
||||
"crates/common/src/telemetry/metrics/test_data.rs",
|
||||
"crates/common/src/telemetry/tracers/store.rs",
|
||||
"crates/http/src/api/telemetry.rs",
|
||||
"crates/jmap/src/registry/mapping/archived_item.rs",
|
||||
"crates/jmap/src/registry/mapping/masked_email.rs",
|
||||
"crates/jmap/src/registry/mapping/telemetry.rs",
|
||||
"crates/scim-proto/src/attributes.rs",
|
||||
"crates/scim-proto/src/etag.rs",
|
||||
"crates/scim-proto/src/filter.rs",
|
||||
"crates/scim-proto/src/json.rs",
|
||||
"crates/scim-proto/src/lib.rs",
|
||||
"crates/scim-proto/src/message/bulk.rs",
|
||||
"crates/scim-proto/src/message/error.rs",
|
||||
"crates/scim-proto/src/message/list.rs",
|
||||
"crates/scim-proto/src/message/mod.rs",
|
||||
"crates/scim-proto/src/message/patch.rs",
|
||||
"crates/scim-proto/src/message/search.rs",
|
||||
"crates/scim-proto/src/path.rs",
|
||||
"crates/scim-proto/src/schema/group.rs",
|
||||
"crates/scim-proto/src/schema/mod.rs",
|
||||
"crates/scim-proto/src/schema/spc.rs",
|
||||
"crates/scim-proto/src/schema/user.rs",
|
||||
"crates/scim/src/auth.rs",
|
||||
"crates/scim/src/bulk.rs",
|
||||
"crates/scim/src/context.rs",
|
||||
"crates/scim/src/discovery.rs",
|
||||
"crates/scim/src/error.rs",
|
||||
"crates/scim/src/groups/get.rs",
|
||||
"crates/scim/src/groups/mod.rs",
|
||||
"crates/scim/src/groups/patch.rs",
|
||||
"crates/scim/src/groups/set.rs",
|
||||
"crates/scim/src/lib.rs",
|
||||
"crates/scim/src/query/cursor.rs",
|
||||
"crates/scim/src/query/mod.rs",
|
||||
"crates/scim/src/request.rs",
|
||||
"crates/scim/src/users/get.rs",
|
||||
"crates/scim/src/users/mod.rs",
|
||||
"crates/scim/src/users/patch.rs",
|
||||
"crates/scim/src/users/set.rs",
|
||||
"crates/spam-filter/src/analysis/llm.rs",
|
||||
"crates/store/src/backend/composite/mod.rs",
|
||||
"crates/store/src/backend/composite/read_replica.rs",
|
||||
"crates/store/src/backend/composite/sharded_blob.rs",
|
||||
"crates/store/src/backend/composite/sharded_lookup.rs",
|
||||
"crates/trc/src/serializers/binary.rs",
|
||||
"tests/src/directory/oidc.rs",
|
||||
"tests/src/scim/auth.rs",
|
||||
"tests/src/scim/bulk.rs",
|
||||
"tests/src/scim/discovery.rs",
|
||||
"tests/src/scim/groups.rs",
|
||||
"tests/src/scim/limits.rs",
|
||||
"tests/src/scim/mod.rs",
|
||||
"tests/src/scim/query.rs",
|
||||
"tests/src/scim/users.rs",
|
||||
"tests/src/system/archiving.rs",
|
||||
"tests/src/system/tenant.rs"
|
||||
],
|
||||
"removed_snippets": {
|
||||
"crates/common/src/auth/authentication.rs": 3,
|
||||
"crates/common/src/auth/mod.rs": 2,
|
||||
"crates/common/src/auth/permissions.rs": 1,
|
||||
"crates/common/src/cache/directory.rs": 6,
|
||||
"crates/common/src/cache/invalidate.rs": 1,
|
||||
"crates/common/src/cache/principals.rs": 2,
|
||||
"crates/common/src/cache/reload.rs": 1,
|
||||
"crates/common/src/config/mod.rs": 2,
|
||||
"crates/common/src/config/telemetry.rs": 4,
|
||||
"crates/common/src/lib.rs": 2,
|
||||
"crates/common/src/manager/boot.rs": 1,
|
||||
"crates/common/src/network/mta.rs": 1,
|
||||
"crates/common/src/scripts/plugins/llm_prompt.rs": 1,
|
||||
"crates/common/src/storage/quota.rs": 2,
|
||||
"crates/common/src/telemetry/metrics/mod.rs": 1,
|
||||
"crates/common/src/telemetry/metrics/prometheus.rs": 1,
|
||||
"crates/common/src/telemetry/mod.rs": 1,
|
||||
"crates/common/src/telemetry/tracers/mod.rs": 1,
|
||||
"crates/http/src/api/mod.rs": 4,
|
||||
"crates/http/src/auth/permissions.rs": 1,
|
||||
"crates/http/src/request.rs": 4,
|
||||
"crates/jmap/src/registry/get.rs": 1,
|
||||
"crates/jmap/src/registry/mapping/mod.rs": 1,
|
||||
"crates/jmap/src/registry/mapping/principal.rs": 3,
|
||||
"crates/jmap/src/registry/mapping/queued_message.rs": 1,
|
||||
"crates/jmap/src/registry/mapping/task.rs": 1,
|
||||
"crates/jmap/src/registry/mod.rs": 1,
|
||||
"crates/jmap/src/registry/query.rs": 1,
|
||||
"crates/jmap/src/registry/set.rs": 2,
|
||||
"crates/main/src/main.rs": 1,
|
||||
"crates/services/src/task_manager/alarm.rs": 1,
|
||||
"crates/services/src/task_manager/imip.rs": 1,
|
||||
"crates/services/src/task_manager/index.rs": 2,
|
||||
"crates/services/src/task_manager/maintenance.rs": 3,
|
||||
"crates/services/src/task_manager/scheduler.rs": 8,
|
||||
"crates/spam-filter/src/analysis/mod.rs": 1,
|
||||
"crates/spam-filter/src/analysis/score.rs": 2,
|
||||
"crates/store/src/backend/mod.rs": 1,
|
||||
"crates/store/src/backend/mysql/main.rs": 1,
|
||||
"crates/store/src/backend/postgres/main.rs": 1,
|
||||
"crates/store/src/build/blob.rs": 2,
|
||||
"crates/store/src/build/lookup.rs": 1,
|
||||
"crates/store/src/build/memory.rs": 2,
|
||||
"crates/store/src/dispatch/blob.rs": 6,
|
||||
"crates/store/src/dispatch/lookup.rs": 10,
|
||||
"crates/store/src/dispatch/mod.rs": 1,
|
||||
"crates/store/src/dispatch/search.rs": 6,
|
||||
"crates/store/src/dispatch/store.rs": 8,
|
||||
"crates/store/src/lib.rs": 6,
|
||||
"crates/trc/src/serializers/mod.rs": 1
|
||||
},
|
||||
"cargo_edits": [
|
||||
{
|
||||
"file": "crates/main/Cargo.toml",
|
||||
"line": 50,
|
||||
"before": "default = [\"rocks\", \"enterprise\"]",
|
||||
"after": "default = [\"rocks\"]"
|
||||
},
|
||||
{
|
||||
"file": "tests/Cargo.toml",
|
||||
"line": 22,
|
||||
"before": "store = { path = \"../crates/store\", features = [\"test_mode\", \"enterprise\"] }",
|
||||
"after": "store = { path = \"../crates/store\", features = [\"test_mode\"] }"
|
||||
},
|
||||
{
|
||||
"file": "tests/Cargo.toml",
|
||||
"line": 24,
|
||||
"before": "directory = { path = \"../crates/directory\", features = [\"test_mode\", \"enterprise\"] }",
|
||||
"after": "directory = { path = \"../crates/directory\", features = [\"test_mode\"] }"
|
||||
},
|
||||
{
|
||||
"file": "tests/Cargo.toml",
|
||||
"line": 25,
|
||||
"before": "coordinator = { path = \"../crates/coordinator\", features = [\"test_mode\", \"enterprise\"] }",
|
||||
"after": "coordinator = { path = \"../crates/coordinator\", features = [\"test_mode\"] }"
|
||||
},
|
||||
{
|
||||
"file": "tests/Cargo.toml",
|
||||
"line": 26,
|
||||
"before": "jmap = { path = \"../crates/jmap\", features = [\"test_mode\", \"enterprise\"] }",
|
||||
"after": "jmap = { path = \"../crates/jmap\", features = [\"test_mode\"] }"
|
||||
},
|
||||
{
|
||||
"file": "tests/Cargo.toml",
|
||||
"line": 35,
|
||||
"before": "http = { path = \"../crates/http\", features = [\"test_mode\", \"enterprise\"] }",
|
||||
"after": "http = { path = \"../crates/http\", features = [\"test_mode\"] }"
|
||||
},
|
||||
{
|
||||
"file": "tests/Cargo.toml",
|
||||
"line": 37,
|
||||
"before": "scim = { path = \"../crates/scim\", features = [\"test_mode\", \"enterprise\"] }",
|
||||
"after": "scim = { path = \"../crates/scim\", features = [\"test_mode\"] }"
|
||||
},
|
||||
{
|
||||
"file": "tests/Cargo.toml",
|
||||
"line": 39,
|
||||
"before": "services = { path = \"../crates/services\", features = [\"test_mode\", \"enterprise\"] }",
|
||||
"after": "services = { path = \"../crates/services\", features = [\"test_mode\"] }"
|
||||
},
|
||||
{
|
||||
"file": "tests/Cargo.toml",
|
||||
"line": 41,
|
||||
"before": "smtp = { path = \"../crates/smtp\", features = [\"test_mode\", \"enterprise\"] }",
|
||||
"after": "smtp = { path = \"../crates/smtp\", features = [\"test_mode\"] }"
|
||||
},
|
||||
{
|
||||
"file": "tests/Cargo.toml",
|
||||
"line": 42,
|
||||
"before": "common = { path = \"../crates/common\", features = [\"test_mode\", \"enterprise\"] }",
|
||||
"after": "common = { path = \"../crates/common\", features = [\"test_mode\"] }"
|
||||
},
|
||||
{
|
||||
"file": "tests/Cargo.toml",
|
||||
"line": 44,
|
||||
"before": "email = { path = \"../crates/email\", features = [\"test_mode\", \"enterprise\"] }",
|
||||
"after": "email = { path = \"../crates/email\", features = [\"test_mode\"] }"
|
||||
},
|
||||
{
|
||||
"file": "tests/Cargo.toml",
|
||||
"line": 45,
|
||||
"before": "spam-filter = { path = \"../crates/spam-filter\", features = [\"test_mode\", \"enterprise\"] }",
|
||||
"after": "spam-filter = { path = \"../crates/spam-filter\", features = [\"test_mode\"] }"
|
||||
},
|
||||
{
|
||||
"file": "tests/Cargo.toml",
|
||||
"line": 46,
|
||||
"before": "trc = { path = \"../crates/trc\", features = [\"enterprise\"] }",
|
||||
"after": "trc = { path = \"../crates/trc\", features = [] }"
|
||||
},
|
||||
{
|
||||
"file": "tests/Cargo.toml",
|
||||
"line": 47,
|
||||
"before": "managesieve = { path = \"../crates/managesieve\", features = [\"test_mode\", \"enterprise\"] }",
|
||||
"after": "managesieve = { path = \"../crates/managesieve\", features = [\"test_mode\"] }"
|
||||
},
|
||||
{
|
||||
"file": ".github/workflows/ci.yml",
|
||||
"line": 341,
|
||||
"before": "cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats enterprise\"",
|
||||
"after": "cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats\""
|
||||
},
|
||||
{
|
||||
"file": ".github/workflows/ci.yml",
|
||||
"line": 379,
|
||||
"before": "# cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features \"foundationdb s3 redis nats enterprise\"",
|
||||
"after": "# cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features \"foundationdb s3 redis nats\""
|
||||
},
|
||||
{
|
||||
"file": ".github/workflows/ci.yml",
|
||||
"line": 386,
|
||||
"before": "cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats enterprise\"",
|
||||
"after": "cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats\""
|
||||
},
|
||||
{
|
||||
"file": ".github/workflows/ci.yml",
|
||||
"line": 442,
|
||||
"before": "cargo build --release -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats enterprise\"",
|
||||
"after": "cargo build --release -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats\""
|
||||
},
|
||||
{
|
||||
"file": "Dockerfile",
|
||||
"line": 22,
|
||||
"before": "RUN RUSTFLAGS=\"$(cat /flags.txt)\" cargo chef cook --target \"$(cat /target.txt)\" --release --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats enterprise\" --recipe-path /recipe.json",
|
||||
"after": "RUN RUSTFLAGS=\"$(cat /flags.txt)\" cargo chef cook --target \"$(cat /target.txt)\" --release --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats\" --recipe-path /recipe.json"
|
||||
},
|
||||
{
|
||||
"file": "Dockerfile",
|
||||
"line": 24,
|
||||
"before": "RUN RUSTFLAGS=\"$(cat /flags.txt)\" cargo build --target \"$(cat /target.txt)\" --release -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats enterprise\"",
|
||||
"after": "RUN RUSTFLAGS=\"$(cat /flags.txt)\" cargo build --target \"$(cat /target.txt)\" --release -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats\""
|
||||
},
|
||||
{
|
||||
"file": "Dockerfile.build",
|
||||
"line": 111,
|
||||
"before": "RUSTFLAGS=\"-L /usr/lib\" cargo chef cook --recipe-path recipe.json --zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"foundationdb s3 redis nats enterprise\"; \\",
|
||||
"after": "RUSTFLAGS=\"-L /usr/lib\" cargo chef cook --recipe-path recipe.json --zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"foundationdb s3 redis nats\"; \\"
|
||||
},
|
||||
{
|
||||
"file": "Dockerfile.build",
|
||||
"line": 119,
|
||||
"before": "cargo chef cook --recipe-path recipe.json --zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats enterprise\"",
|
||||
"after": "cargo chef cook --recipe-path recipe.json --zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats\""
|
||||
},
|
||||
{
|
||||
"file": "Dockerfile.build",
|
||||
"line": 132,
|
||||
"before": "RUSTFLAGS=\"-L /usr/lib\" cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"foundationdb s3 redis nats enterprise\" && \\",
|
||||
"after": "RUSTFLAGS=\"-L /usr/lib\" cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"foundationdb s3 redis nats\" && \\"
|
||||
},
|
||||
{
|
||||
"file": "Dockerfile.build",
|
||||
"line": 142,
|
||||
"before": "cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats enterprise\" && \\",
|
||||
"after": "cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features \"sqlite postgres mysql rocks s3 redis azure nats\" && \\"
|
||||
},
|
||||
{
|
||||
"file": "Dockerfile.fdb",
|
||||
"line": 56,
|
||||
"before": "RUN cargo build -p stalwart --no-default-features --features \"foundationdb s3 redis azure nats enterprise\" --release",
|
||||
"after": "RUN cargo build -p stalwart --no-default-features --features \"foundationdb s3 redis azure nats\" --release"
|
||||
}
|
||||
],
|
||||
"dangling_mods": [
|
||||
{
|
||||
"file": "crates/common/src/telemetry/metrics/mod.rs",
|
||||
"line": 12,
|
||||
"module": "test_data",
|
||||
"lines": [
|
||||
"#[cfg(any(feature = \"dev_mode\", feature = \"test_mode\"))]",
|
||||
"pub mod test_data;"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "tests/src/directory/mod.rs",
|
||||
"line": 11,
|
||||
"module": "oidc",
|
||||
"lines": [
|
||||
"pub mod oidc;"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "tests/src/lib.rs",
|
||||
"line": 27,
|
||||
"module": "scim",
|
||||
"lines": [
|
||||
"#[cfg(test)]",
|
||||
"pub mod scim;"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "tests/src/system/mod.rs",
|
||||
"line": 8,
|
||||
"module": "archiving",
|
||||
"lines": [
|
||||
"pub mod archiving;"
|
||||
]
|
||||
},
|
||||
{
|
||||
"file": "tests/src/system/mod.rs",
|
||||
"line": 19,
|
||||
"module": "tenant",
|
||||
"lines": [
|
||||
"pub mod tenant;"
|
||||
]
|
||||
}
|
||||
],
|
||||
"problems": [],
|
||||
"feature_gates": {
|
||||
"crates/common/src/cache/reload.rs": 1,
|
||||
"crates/common/src/manager/boot.rs": 1,
|
||||
"crates/common/src/storage/mod.rs": 1,
|
||||
"crates/common/src/storage/quota.rs": 1,
|
||||
"crates/common/src/telemetry/metrics/prometheus.rs": 1,
|
||||
"crates/http/src/api/mod.rs": 1,
|
||||
"crates/http/src/auth/permissions.rs": 1,
|
||||
"crates/jmap/src/registry/get.rs": 1,
|
||||
"crates/jmap/src/registry/mapping/principal.rs": 2,
|
||||
"crates/jmap/src/registry/mapping/queued_message.rs": 1,
|
||||
"crates/jmap/src/registry/mapping/task.rs": 1,
|
||||
"crates/jmap/src/registry/set.rs": 1,
|
||||
"crates/services/src/task_manager/alarm.rs": 1,
|
||||
"crates/services/src/task_manager/imip.rs": 1,
|
||||
"crates/services/src/task_manager/index.rs": 1,
|
||||
"crates/services/src/task_manager/maintenance.rs": 1,
|
||||
"crates/services/src/task_manager/scheduler.rs": 1,
|
||||
"crates/store/src/lib.rs": 1
|
||||
},
|
||||
"edition_checks": {},
|
||||
"schema": {
|
||||
"objects": [
|
||||
"x:AiModel",
|
||||
"x:Alert",
|
||||
"x:ArchivedItem",
|
||||
"x:MaskedEmail",
|
||||
"x:MetricsStore",
|
||||
"x:SpamLlm",
|
||||
"x:Tenant",
|
||||
"x:Trace",
|
||||
"x:TracingStore"
|
||||
],
|
||||
"fields": [
|
||||
"x:AcmeProvider.memberTenantId",
|
||||
"x:ArfExternalReport.memberTenantId",
|
||||
"x:Authentication.defaultTenantRoleIds",
|
||||
"x:CalendarAlarm.template",
|
||||
"x:CalendarScheduling.emailTemplate",
|
||||
"x:CalendarScheduling.httpRsvpTemplate",
|
||||
"x:DataRetention.archiveDeletedAccountsFor",
|
||||
"x:DataRetention.archiveDeletedItemsFor",
|
||||
"x:DataRetention.holdMetricsFor",
|
||||
"x:DataRetention.holdTracesFor",
|
||||
"x:DataRetention.metricsCollectionInterval",
|
||||
"x:Dkim1Signature.memberTenantId",
|
||||
"x:Dkim2Signature.memberTenantId",
|
||||
"x:DmarcExternalReport.memberTenantId",
|
||||
"x:Domain.allowScimProvisioning",
|
||||
"x:Domain.directoryId",
|
||||
"x:Domain.logo",
|
||||
"x:Domain.memberTenantId",
|
||||
"x:Email.maxMaskedAddresses",
|
||||
"x:Enterprise.logoUrl",
|
||||
"x:GroupAccount.externalId",
|
||||
"x:LdapDirectory.memberTenantId",
|
||||
"x:MySqlStore.readReplicas",
|
||||
"x:OidcDirectory.memberTenantId",
|
||||
"x:PostgreSqlStore.readReplicas",
|
||||
"x:Search.indexTelemetry",
|
||||
"x:Search.indexTracingFields",
|
||||
"x:SqlDirectory.memberTenantId",
|
||||
"x:TlsExternalReport.memberTenantId",
|
||||
"x:UserAccount.externalId"
|
||||
]
|
||||
},
|
||||
"third_party": {
|
||||
"crates/common/src/network/acme/directory.rs": [
|
||||
{
|
||||
"line": 7,
|
||||
"text": "Adapted from rustls-acme (https://github.com/FlorianUekermann/rustls-acme), licensed under MIT/Apache-2.0."
|
||||
}
|
||||
],
|
||||
"crates/common/src/network/acme/jose.rs": [
|
||||
{
|
||||
"line": 7,
|
||||
"text": "Adapted from rustls-acme (https://github.com/FlorianUekermann/rustls-acme), licensed under MIT/Apache-2.0."
|
||||
}
|
||||
],
|
||||
"crates/common/src/network/acme/order.rs": [
|
||||
{
|
||||
"line": 7,
|
||||
"text": "Adapted from rustls-acme (https://github.com/FlorianUekermann/rustls-acme), licensed under MIT/Apache-2.0."
|
||||
}
|
||||
],
|
||||
"crates/common/src/scripts/functions/text.rs": [
|
||||
{
|
||||
"line": 239,
|
||||
"text": "MIT licensed."
|
||||
},
|
||||
{
|
||||
"line": 241,
|
||||
"text": "Copyright (c) 2016 Titus Wormer <[email protected]>"
|
||||
}
|
||||
],
|
||||
"crates/common/src/telemetry/tracers/journald.rs": [
|
||||
{
|
||||
"line": 70,
|
||||
"text": "SPDX-FileCopyrightText: 2018 Benjamin Saunders <[email protected]>"
|
||||
},
|
||||
{
|
||||
"line": 71,
|
||||
"text": "SPDX-License-Identifier: MIT"
|
||||
}
|
||||
],
|
||||
"crates/imap-proto/src/utf7.rs": [
|
||||
{
|
||||
"line": 7,
|
||||
"text": "Ported from https://github.com/jstedfast/MailKit/blob/master/MailKit/Net/Imap/ImapEncoding.cs"
|
||||
}
|
||||
],
|
||||
"crates/jmap/src/registry/mapping/log.rs": [
|
||||
{
|
||||
"line": 341,
|
||||
"text": "SPDX-FileCopyrightText: 2017 Michael Coyne <[email protected]>"
|
||||
},
|
||||
{
|
||||
"line": 343,
|
||||
"text": "SPDX-License-Identifier: MIT"
|
||||
},
|
||||
{
|
||||
"line": 346,
|
||||
"text": "Adapted from https://github.com/mjc-gh/rev_lines/blob/main/src/lib.rs"
|
||||
}
|
||||
],
|
||||
"crates/jmap-proto/src/types/date.rs": [
|
||||
{
|
||||
"line": 121,
|
||||
"text": "Ported from http://howardhinnant.github.io/date_algorithms.html#civil_from_days"
|
||||
},
|
||||
{
|
||||
"line": 158,
|
||||
"text": "Ported from https://github.com/protocolbuffers/upb/blob/22182e6e/upb/json_decode.c#L982-L992"
|
||||
}
|
||||
],
|
||||
"crates/nlp/src/tokenizers/japanese.rs": [
|
||||
{
|
||||
"line": 73,
|
||||
"text": "Ported from https://github.com/woxtu/rust-tinysegmenter, MIT license"
|
||||
}
|
||||
],
|
||||
"crates/nlp/src/tokenizers/types.rs": [
|
||||
{
|
||||
"line": 738,
|
||||
"text": "Credits: test suite from linkify crate"
|
||||
}
|
||||
],
|
||||
"crates/registry/src/types/datetime.rs": [
|
||||
{
|
||||
"line": 150,
|
||||
"text": "Ported from http://howardhinnant.github.io/date_algorithms.html#civil_from_days"
|
||||
},
|
||||
{
|
||||
"line": 188,
|
||||
"text": "Ported from https://github.com/protocolbuffers/upb/blob/22182e6e/upb/json_decode.c#L982-L992"
|
||||
}
|
||||
],
|
||||
"crates/store/src/backend/postgres/tls.rs": [
|
||||
{
|
||||
"line": 7,
|
||||
"text": "Credits: https://github.com/jbg/tokio-postgres-rustls"
|
||||
}
|
||||
],
|
||||
"crates/types/src/id.rs": [
|
||||
{
|
||||
"line": 69,
|
||||
"text": "From https://github.com/archer884/crockford by J/A <[email protected]>"
|
||||
},
|
||||
{
|
||||
"line": 70,
|
||||
"text": "License: MIT/Apache 2.0"
|
||||
}
|
||||
],
|
||||
"crates/utils/src/glob.rs": [
|
||||
{
|
||||
"line": 107,
|
||||
"text": "Credits: Algorithm ported from https://research.swtch.com/glob"
|
||||
}
|
||||
]
|
||||
},
|
||||
"third_party_unlisted": [],
|
||||
"ossify_log": "$ ossify.py crates\nProcessing Rust files in: /tmp/claude-1000/-run-media-john-PROJECTS/b60a056e-7e44-433c-bbb6-7e1b1fece570/scratchpad/strip-v0.16.23/tree/crates\n\nFound 957 Rust files\n\n\nSummary:\n- 50 files were completely removed\n- 2 crate roots were emptied\n- 118 proprietary snippets were removed from 50 files\n\n$ ossify.py tests\nProcessing Rust files in: /tmp/claude-1000/-run-media-john-PROJECTS/b60a056e-7e44-433c-bbb6-7e1b1fece570/scratchpad/strip-v0.16.23/tree/tests\n\nFound 211 Rust files\n\n\nSummary:\n- 11 files were completely removed\n- 0 crate roots were emptied\n- 0 proprietary snippets were removed from 0 files\n"
|
||||
}
|
||||
@@ -0,0 +1,211 @@
|
||||
# Strip report: upstream v0.16.23 (9d1c75ab6843)
|
||||
|
||||
- Enterprise-only files removed or emptied: **63**
|
||||
- Enterprise-only snippets removed: **118** in 50 files
|
||||
- Cargo edits turning `enterprise` off: **25**
|
||||
- Dangling module declarations removed: **5**
|
||||
- Verification: **clean**
|
||||
- Left for the rebuilt features to replace: 19 `enterprise` feature gates in 18 files; 0 `is_enterprise_edition()` checks in 0 files
|
||||
- Third-party code: 14 files, **0** not in THIRD-PARTY.md
|
||||
- Upstream schema flags 9 objects and 30 fields as Enterprise
|
||||
|
||||
## Removed files
|
||||
|
||||
- `crates/common/src/enterprise/alerts.rs`
|
||||
- `crates/common/src/enterprise/config.rs`
|
||||
- `crates/common/src/enterprise/license.rs`
|
||||
- `crates/common/src/enterprise/llm.rs`
|
||||
- `crates/common/src/enterprise/masked.rs`
|
||||
- `crates/common/src/enterprise/mod.rs`
|
||||
- `crates/common/src/telemetry/metrics/store.rs`
|
||||
- `crates/common/src/telemetry/metrics/test_data.rs`
|
||||
- `crates/common/src/telemetry/tracers/store.rs`
|
||||
- `crates/http/src/api/telemetry.rs`
|
||||
- `crates/jmap/src/registry/mapping/archived_item.rs`
|
||||
- `crates/jmap/src/registry/mapping/masked_email.rs`
|
||||
- `crates/jmap/src/registry/mapping/telemetry.rs`
|
||||
- `crates/scim-proto/src/attributes.rs`
|
||||
- `crates/scim-proto/src/etag.rs`
|
||||
- `crates/scim-proto/src/filter.rs`
|
||||
- `crates/scim-proto/src/json.rs`
|
||||
- `crates/scim-proto/src/lib.rs`
|
||||
- `crates/scim-proto/src/message/bulk.rs`
|
||||
- `crates/scim-proto/src/message/error.rs`
|
||||
- `crates/scim-proto/src/message/list.rs`
|
||||
- `crates/scim-proto/src/message/mod.rs`
|
||||
- `crates/scim-proto/src/message/patch.rs`
|
||||
- `crates/scim-proto/src/message/search.rs`
|
||||
- `crates/scim-proto/src/path.rs`
|
||||
- `crates/scim-proto/src/schema/group.rs`
|
||||
- `crates/scim-proto/src/schema/mod.rs`
|
||||
- `crates/scim-proto/src/schema/spc.rs`
|
||||
- `crates/scim-proto/src/schema/user.rs`
|
||||
- `crates/scim/src/auth.rs`
|
||||
- `crates/scim/src/bulk.rs`
|
||||
- `crates/scim/src/context.rs`
|
||||
- `crates/scim/src/discovery.rs`
|
||||
- `crates/scim/src/error.rs`
|
||||
- `crates/scim/src/groups/get.rs`
|
||||
- `crates/scim/src/groups/mod.rs`
|
||||
- `crates/scim/src/groups/patch.rs`
|
||||
- `crates/scim/src/groups/set.rs`
|
||||
- `crates/scim/src/lib.rs`
|
||||
- `crates/scim/src/query/cursor.rs`
|
||||
- `crates/scim/src/query/mod.rs`
|
||||
- `crates/scim/src/request.rs`
|
||||
- `crates/scim/src/users/get.rs`
|
||||
- `crates/scim/src/users/mod.rs`
|
||||
- `crates/scim/src/users/patch.rs`
|
||||
- `crates/scim/src/users/set.rs`
|
||||
- `crates/spam-filter/src/analysis/llm.rs`
|
||||
- `crates/store/src/backend/composite/mod.rs`
|
||||
- `crates/store/src/backend/composite/read_replica.rs`
|
||||
- `crates/store/src/backend/composite/sharded_blob.rs`
|
||||
- `crates/store/src/backend/composite/sharded_lookup.rs`
|
||||
- `crates/trc/src/serializers/binary.rs`
|
||||
- `tests/src/directory/oidc.rs`
|
||||
- `tests/src/scim/auth.rs`
|
||||
- `tests/src/scim/bulk.rs`
|
||||
- `tests/src/scim/discovery.rs`
|
||||
- `tests/src/scim/groups.rs`
|
||||
- `tests/src/scim/limits.rs`
|
||||
- `tests/src/scim/mod.rs`
|
||||
- `tests/src/scim/query.rs`
|
||||
- `tests/src/scim/users.rs`
|
||||
- `tests/src/system/archiving.rs`
|
||||
- `tests/src/system/tenant.rs`
|
||||
|
||||
## Removed snippets
|
||||
|
||||
- `crates/common/src/auth/authentication.rs`: 3
|
||||
- `crates/common/src/auth/mod.rs`: 2
|
||||
- `crates/common/src/auth/permissions.rs`: 1
|
||||
- `crates/common/src/cache/directory.rs`: 6
|
||||
- `crates/common/src/cache/invalidate.rs`: 1
|
||||
- `crates/common/src/cache/principals.rs`: 2
|
||||
- `crates/common/src/cache/reload.rs`: 1
|
||||
- `crates/common/src/config/mod.rs`: 2
|
||||
- `crates/common/src/config/telemetry.rs`: 4
|
||||
- `crates/common/src/lib.rs`: 2
|
||||
- `crates/common/src/manager/boot.rs`: 1
|
||||
- `crates/common/src/network/mta.rs`: 1
|
||||
- `crates/common/src/scripts/plugins/llm_prompt.rs`: 1
|
||||
- `crates/common/src/storage/quota.rs`: 2
|
||||
- `crates/common/src/telemetry/metrics/mod.rs`: 1
|
||||
- `crates/common/src/telemetry/metrics/prometheus.rs`: 1
|
||||
- `crates/common/src/telemetry/mod.rs`: 1
|
||||
- `crates/common/src/telemetry/tracers/mod.rs`: 1
|
||||
- `crates/http/src/api/mod.rs`: 4
|
||||
- `crates/http/src/auth/permissions.rs`: 1
|
||||
- `crates/http/src/request.rs`: 4
|
||||
- `crates/jmap/src/registry/get.rs`: 1
|
||||
- `crates/jmap/src/registry/mapping/mod.rs`: 1
|
||||
- `crates/jmap/src/registry/mapping/principal.rs`: 3
|
||||
- `crates/jmap/src/registry/mapping/queued_message.rs`: 1
|
||||
- `crates/jmap/src/registry/mapping/task.rs`: 1
|
||||
- `crates/jmap/src/registry/mod.rs`: 1
|
||||
- `crates/jmap/src/registry/query.rs`: 1
|
||||
- `crates/jmap/src/registry/set.rs`: 2
|
||||
- `crates/main/src/main.rs`: 1
|
||||
- `crates/services/src/task_manager/alarm.rs`: 1
|
||||
- `crates/services/src/task_manager/imip.rs`: 1
|
||||
- `crates/services/src/task_manager/index.rs`: 2
|
||||
- `crates/services/src/task_manager/maintenance.rs`: 3
|
||||
- `crates/services/src/task_manager/scheduler.rs`: 8
|
||||
- `crates/spam-filter/src/analysis/mod.rs`: 1
|
||||
- `crates/spam-filter/src/analysis/score.rs`: 2
|
||||
- `crates/store/src/backend/mod.rs`: 1
|
||||
- `crates/store/src/backend/mysql/main.rs`: 1
|
||||
- `crates/store/src/backend/postgres/main.rs`: 1
|
||||
- `crates/store/src/build/blob.rs`: 2
|
||||
- `crates/store/src/build/lookup.rs`: 1
|
||||
- `crates/store/src/build/memory.rs`: 2
|
||||
- `crates/store/src/dispatch/blob.rs`: 6
|
||||
- `crates/store/src/dispatch/lookup.rs`: 10
|
||||
- `crates/store/src/dispatch/mod.rs`: 1
|
||||
- `crates/store/src/dispatch/search.rs`: 6
|
||||
- `crates/store/src/dispatch/store.rs`: 8
|
||||
- `crates/store/src/lib.rs`: 6
|
||||
- `crates/trc/src/serializers/mod.rs`: 1
|
||||
|
||||
## Dangling module declarations removed
|
||||
|
||||
- `crates/common/src/telemetry/metrics/mod.rs:12`: `mod test_data` (#[cfg(any(feature = "dev_mode", feature = "test_mode"))] / pub mod test_data;)
|
||||
- `tests/src/directory/mod.rs:11`: `mod oidc` (pub mod oidc;)
|
||||
- `tests/src/lib.rs:27`: `mod scim` (#[cfg(test)] / pub mod scim;)
|
||||
- `tests/src/system/mod.rs:8`: `mod archiving` (pub mod archiving;)
|
||||
- `tests/src/system/mod.rs:19`: `mod tenant` (pub mod tenant;)
|
||||
|
||||
## Cargo edits
|
||||
|
||||
- `crates/main/Cargo.toml:50`: `default = ["rocks", "enterprise"]` → `default = ["rocks"]`
|
||||
- `tests/Cargo.toml:22`: `store = { path = "../crates/store", features = ["test_mode", "enterprise"] }` → `store = { path = "../crates/store", features = ["test_mode"] }`
|
||||
- `tests/Cargo.toml:24`: `directory = { path = "../crates/directory", features = ["test_mode", "enterprise"] }` → `directory = { path = "../crates/directory", features = ["test_mode"] }`
|
||||
- `tests/Cargo.toml:25`: `coordinator = { path = "../crates/coordinator", features = ["test_mode", "enterprise"] }` → `coordinator = { path = "../crates/coordinator", features = ["test_mode"] }`
|
||||
- `tests/Cargo.toml:26`: `jmap = { path = "../crates/jmap", features = ["test_mode", "enterprise"] }` → `jmap = { path = "../crates/jmap", features = ["test_mode"] }`
|
||||
- `tests/Cargo.toml:35`: `http = { path = "../crates/http", features = ["test_mode", "enterprise"] }` → `http = { path = "../crates/http", features = ["test_mode"] }`
|
||||
- `tests/Cargo.toml:37`: `scim = { path = "../crates/scim", features = ["test_mode", "enterprise"] }` → `scim = { path = "../crates/scim", features = ["test_mode"] }`
|
||||
- `tests/Cargo.toml:39`: `services = { path = "../crates/services", features = ["test_mode", "enterprise"] }` → `services = { path = "../crates/services", features = ["test_mode"] }`
|
||||
- `tests/Cargo.toml:41`: `smtp = { path = "../crates/smtp", features = ["test_mode", "enterprise"] }` → `smtp = { path = "../crates/smtp", features = ["test_mode"] }`
|
||||
- `tests/Cargo.toml:42`: `common = { path = "../crates/common", features = ["test_mode", "enterprise"] }` → `common = { path = "../crates/common", features = ["test_mode"] }`
|
||||
- `tests/Cargo.toml:44`: `email = { path = "../crates/email", features = ["test_mode", "enterprise"] }` → `email = { path = "../crates/email", features = ["test_mode"] }`
|
||||
- `tests/Cargo.toml:45`: `spam-filter = { path = "../crates/spam-filter", features = ["test_mode", "enterprise"] }` → `spam-filter = { path = "../crates/spam-filter", features = ["test_mode"] }`
|
||||
- `tests/Cargo.toml:46`: `trc = { path = "../crates/trc", features = ["enterprise"] }` → `trc = { path = "../crates/trc", features = [] }`
|
||||
- `tests/Cargo.toml:47`: `managesieve = { path = "../crates/managesieve", features = ["test_mode", "enterprise"] }` → `managesieve = { path = "../crates/managesieve", features = ["test_mode"] }`
|
||||
- `.github/workflows/ci.yml:341`: `cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats enterprise"` → `cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats"`
|
||||
- `.github/workflows/ci.yml:379`: `# cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features "foundationdb s3 redis nats enterprise"` → `# cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features "foundationdb s3 redis nats"`
|
||||
- `.github/workflows/ci.yml:386`: `cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats enterprise"` → `cargo build --release --target ${{matrix.target}} -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats"`
|
||||
- `.github/workflows/ci.yml:442`: `cargo build --release -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats enterprise"` → `cargo build --release -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats"`
|
||||
- `Dockerfile:22`: `RUN RUSTFLAGS="$(cat /flags.txt)" cargo chef cook --target "$(cat /target.txt)" --release --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats enterprise" --recipe-path /recipe.json` → `RUN RUSTFLAGS="$(cat /flags.txt)" cargo chef cook --target "$(cat /target.txt)" --release --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats" --recipe-path /recipe.json`
|
||||
- `Dockerfile:24`: `RUN RUSTFLAGS="$(cat /flags.txt)" cargo build --target "$(cat /target.txt)" --release -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats enterprise"` → `RUN RUSTFLAGS="$(cat /flags.txt)" cargo build --target "$(cat /target.txt)" --release -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats"`
|
||||
- `Dockerfile.build:111`: `RUSTFLAGS="-L /usr/lib" cargo chef cook --recipe-path recipe.json --zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features "foundationdb s3 redis nats enterprise"; \` → `RUSTFLAGS="-L /usr/lib" cargo chef cook --recipe-path recipe.json --zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features "foundationdb s3 redis nats"; \`
|
||||
- `Dockerfile.build:119`: `cargo chef cook --recipe-path recipe.json --zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats enterprise"` → `cargo chef cook --recipe-path recipe.json --zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats"`
|
||||
- `Dockerfile.build:132`: `RUSTFLAGS="-L /usr/lib" cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features "foundationdb s3 redis nats enterprise" && \` → `RUSTFLAGS="-L /usr/lib" cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features "foundationdb s3 redis nats" && \`
|
||||
- `Dockerfile.build:142`: `cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats enterprise" && \` → `cargo zigbuild --release --target ${TARGET} -p stalwart --no-default-features --features "sqlite postgres mysql rocks s3 redis azure nats" && \`
|
||||
- `Dockerfile.fdb:56`: `RUN cargo build -p stalwart --no-default-features --features "foundationdb s3 redis azure nats enterprise" --release` → `RUN cargo build -p stalwart --no-default-features --features "foundationdb s3 redis azure nats" --release`
|
||||
|
||||
## Flagged Enterprise in upstream's schema
|
||||
|
||||
**Objects:** `x:AiModel`, `x:Alert`, `x:ArchivedItem`, `x:MaskedEmail`, `x:MetricsStore`, `x:SpamLlm`, `x:Tenant`, `x:Trace`, `x:TracingStore`
|
||||
|
||||
**Fields:** `x:AcmeProvider.memberTenantId`, `x:ArfExternalReport.memberTenantId`, `x:Authentication.defaultTenantRoleIds`, `x:CalendarAlarm.template`, `x:CalendarScheduling.emailTemplate`, `x:CalendarScheduling.httpRsvpTemplate`, `x:DataRetention.archiveDeletedAccountsFor`, `x:DataRetention.archiveDeletedItemsFor`, `x:DataRetention.holdMetricsFor`, `x:DataRetention.holdTracesFor`, `x:DataRetention.metricsCollectionInterval`, `x:Dkim1Signature.memberTenantId`, `x:Dkim2Signature.memberTenantId`, `x:DmarcExternalReport.memberTenantId`, `x:Domain.allowScimProvisioning`, `x:Domain.directoryId`, `x:Domain.logo`, `x:Domain.memberTenantId`, `x:Email.maxMaskedAddresses`, `x:Enterprise.logoUrl`, `x:GroupAccount.externalId`, `x:LdapDirectory.memberTenantId`, `x:MySqlStore.readReplicas`, `x:OidcDirectory.memberTenantId`, `x:PostgreSqlStore.readReplicas`, `x:Search.indexTelemetry`, `x:Search.indexTracingFields`, `x:SqlDirectory.memberTenantId`, `x:TlsExternalReport.memberTenantId`, `x:UserAccount.externalId`
|
||||
|
||||
## Third-party code
|
||||
|
||||
Comments in the stripped tree that name another copyright holder, another license, or a source the code came from. Files marked **new** aren't in THIRD-PARTY.md yet.
|
||||
|
||||
- `crates/common/src/network/acme/directory.rs`
|
||||
- 7: Adapted from rustls-acme (https://github.com/FlorianUekermann/rustls-acme), licensed under MIT/Apache-2.0.
|
||||
- `crates/common/src/network/acme/jose.rs`
|
||||
- 7: Adapted from rustls-acme (https://github.com/FlorianUekermann/rustls-acme), licensed under MIT/Apache-2.0.
|
||||
- `crates/common/src/network/acme/order.rs`
|
||||
- 7: Adapted from rustls-acme (https://github.com/FlorianUekermann/rustls-acme), licensed under MIT/Apache-2.0.
|
||||
- `crates/common/src/scripts/functions/text.rs`
|
||||
- 239: MIT licensed.
|
||||
- 241: Copyright (c) 2016 Titus Wormer <tituswormer@gmail.com>
|
||||
- `crates/common/src/telemetry/tracers/journald.rs`
|
||||
- 70: SPDX-FileCopyrightText: 2018 Benjamin Saunders <ben.e.saunders@gmail.com>
|
||||
- 71: SPDX-License-Identifier: MIT
|
||||
- `crates/imap-proto/src/utf7.rs`
|
||||
- 7: Ported from https://github.com/jstedfast/MailKit/blob/master/MailKit/Net/Imap/ImapEncoding.cs
|
||||
- `crates/jmap/src/registry/mapping/log.rs`
|
||||
- 341: SPDX-FileCopyrightText: 2017 Michael Coyne <mjc@hey.com>
|
||||
- 343: SPDX-License-Identifier: MIT
|
||||
- 346: Adapted from https://github.com/mjc-gh/rev_lines/blob/main/src/lib.rs
|
||||
- `crates/jmap-proto/src/types/date.rs`
|
||||
- 121: Ported from http://howardhinnant.github.io/date_algorithms.html#civil_from_days
|
||||
- 158: Ported from https://github.com/protocolbuffers/upb/blob/22182e6e/upb/json_decode.c#L982-L992
|
||||
- `crates/nlp/src/tokenizers/japanese.rs`
|
||||
- 73: Ported from https://github.com/woxtu/rust-tinysegmenter, MIT license
|
||||
- `crates/nlp/src/tokenizers/types.rs`
|
||||
- 738: Credits: test suite from linkify crate
|
||||
- `crates/registry/src/types/datetime.rs`
|
||||
- 150: Ported from http://howardhinnant.github.io/date_algorithms.html#civil_from_days
|
||||
- 188: Ported from https://github.com/protocolbuffers/upb/blob/22182e6e/upb/json_decode.c#L982-L992
|
||||
- `crates/store/src/backend/postgres/tls.rs`
|
||||
- 7: Credits: https://github.com/jbg/tokio-postgres-rustls
|
||||
- `crates/types/src/id.rs`
|
||||
- 69: From https://github.com/archer884/crockford by J/A <archer884@gmail.com>
|
||||
- 70: License: MIT/Apache 2.0
|
||||
- `crates/utils/src/glob.rs`
|
||||
- 107: Credits: Algorithm ported from https://research.swtch.com/glob
|
||||
+16
-1
@@ -91,7 +91,22 @@ The wrapper is `tools/fork/strip.py`. Beyond `ossify.py` it:
|
||||
was ported or adapted from elsewhere. Any file `THIRD-PARTY.md` doesn't
|
||||
cover yet is flagged as new. It's reported, not a failure: the notice goes
|
||||
into `THIRD-PARTY.md` in the merge that brings the release in, since the
|
||||
fork redistributes that code and its license requires the notice.
|
||||
fork redistributes that code and its license requires the notice;
|
||||
- renames the upstream name where it's an identifier clients, users or
|
||||
operators meet (wire-protocol names, the web interface's client id, store
|
||||
keys; §2.4), with the same substitutions `main`
|
||||
carries, so those lines arrive purged and never conflict (added
|
||||
2026-09-22);
|
||||
- compiles the stripped tree. A dual-licensed file that only serves an
|
||||
Enterprise feature survives the strip but can't build without it:
|
||||
v0.16.23's `tests/src/directory/issuer.rs` was the first. The build check
|
||||
fails the run on it, and the merge into `main` drops or reworks it (added
|
||||
2026-09-22).
|
||||
|
||||
Two checks in CI cover what a merge can bring in without a conflict:
|
||||
`tools/fork/name-check.py` (the upstream name in a new string literal) and
|
||||
`tools/fork/notice-check.py` (a changed upstream file without its AGPL 5(a)
|
||||
notice).
|
||||
|
||||
### 2.2a Snapshots, not a git fork
|
||||
|
||||
|
||||
Reference in New Issue
Block a user