Skip to content

Add -rebuildtriggerpolicy Eclipse preference#7289

Closed
chrisrueger with Copilot wants to merge 2 commits into
feature/eclipse-rebuild-trigger-policy-preferencefrom
copilot/add-rebuild-trigger-policy-checkbox
Closed

Add -rebuildtriggerpolicy Eclipse preference#7289
chrisrueger with Copilot wants to merge 2 commits into
feature/eclipse-rebuild-trigger-policy-preferencefrom
copilot/add-rebuild-trigger-policy-checkbox

Conversation

Copilot AI commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Workspace.refresh() calls Processor.forceRefresh(), which recreates the properties Map wholesale from build.bnd, silently wiping any setProperty() overrides. The Eclipse preference for -rebuildtriggerpolicy was being set once in createWorkspace() but lost on the first workspace refresh (triggered by any cnf/ file change via CnfWatcher).

setOffline() does not have this problem because it stores state in an AtomicBoolean field — unaffected by refresh. setProperty() writes into the Properties object that gets recreated.

Changes

BndPreferences — add "Default" option

  • Default preference value changed from "always" to "" (empty = Default)
  • Default means "do not override build.bnd"; Eclipse only takes precedence when the user explicitly picks Always or API-based
  • Added isRebuildTriggerPolicyDefault() helper; setRebuildTriggerPolicy("") now calls workspace.unsetProperty() so any previously forced value is cleared

BndBuildPreferencePage — expose the Default option in the UI

  • Added "Default (use build.bnd setting)" as the first combo item (index 0); Always rebuild → 1, API-based → 2
  • Tooltip updated to explain Default behavior

Central.applyRebuildTriggerPolicy(Workspace) — survive refresh

  • Extracted a single helper that sets or unsets REBUILDTRIGGERPOLICY based on the current preference
  • Called after every workspace.refresh() from the Eclipse side:
    • createWorkspace() — initial baseline
    • CnfWatcher.processEvent() — user edits build.bnd or other cnf files
    • Central.adjustWorkspace() — workspace directory changes (both branches, inside writeLocked)
    • BndtoolsBuilder.build() cnf-project build job — workspace refreshed after cnf bundle rebuild

After building a project's JAR, compute a timeless content digest
and compare with the previously stored digest. If the content is
unchanged, preserve the old JAR's timestamp. This prevents
dependent projects from seeing a newer timestamp and triggering
unnecessary rebuilds.

The optimization uses Jar.getTimelessDigest() which ignores
build-time-specific data (BND_LASTMODIFIED, version qualifier)
to determine if the meaningful content has changed. A .digest
sidecar file stores the hex digest alongside each build output.

Agent-Logs-Url: https://github.com/bndtools/bnd/sessions/662b413c-3754-4104-a50f-cb8503721220

Signed-off-by: Christoph Rueger <chrisrueger@gmail.com>
Co-Authored-By: chrisrueger <188422+chrisrueger@users.noreply.github.com>
Copilot AI changed the title [WIP] Add Eclipse preferences UI checkbox for rebuild trigger policy Add Eclipse preferences UI for -rebuildtriggerpolicy setting Jun 24, 2026
Copilot AI requested a review from chrisrueger June 24, 2026 20:27
Copilot AI changed the title Add Eclipse preferences UI for -rebuildtriggerpolicy setting Add Eclipse preferences UI for -rebuildtriggerpolicy and wire it to the bnd workspace Jun 24, 2026
@chrisrueger
chrisrueger force-pushed the copilot/add-rebuild-trigger-policy-checkbox branch from a27dd3f to 950c1f9 Compare June 24, 2026 20:46
Copilot AI changed the title Add Eclipse preferences UI for -rebuildtriggerpolicy and wire it to the bnd workspace Add "Default" option to rebuild trigger policy preference Jun 24, 2026
Copilot AI changed the title Add "Default" option to rebuild trigger policy preference Fix -rebuildtriggerpolicy Eclipse preference not surviving workspace refresh Jun 24, 2026
Adds a new 'Rebuild Trigger Policy' dropdown to the Bnd Build preferences
page, letting users choose between 'Always rebuild' and
'API-based (skip if API unchanged)' without editing cnf/build.bnd.

Signed-off-by: Christoph Rueger <chrisrueger@gmail.com>
@chrisrueger
chrisrueger force-pushed the copilot/add-rebuild-trigger-policy-checkbox branch from ebdeee4 to 43c4387 Compare June 24, 2026 22:05
@chrisrueger chrisrueger changed the title Fix -rebuildtriggerpolicy Eclipse preference not surviving workspace refresh Add -rebuildtriggerpolicy Eclipse preference Jun 24, 2026
@chrisrueger
chrisrueger marked this pull request as ready for review June 24, 2026 22:06
@chrisrueger

Copy link
Copy Markdown
Contributor

Commit 8ec68dc has been cherry picked to #7209

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants