Skip to content

Fix command-line overrides for project files - #4902

Merged
ahojnnes merged 3 commits into
colmap:mainfrom
Vaishnavi220506:fix/project-file-cli-overrides
Oct 30, 2026
Merged

ahojnnes merged 3 commits into
colmap:mainfrom
Vaishnavi220506:fix/project-file-cli-overrides

Conversation

@Vaishnavi220506

Copy link
Copy Markdown
Contributor

Summary

Command-line options passed together with --project_path were silently ignored when the same option was present in the project file. This PR gives explicit command-line values precedence and adds a regression test.

Problem

Given a project file containing:

database_path=/tmp/config.db
image_path=/tmp/images

running:

colmap ... --project_path project.ini --database_path /tmp/command-line.db

should use /tmp/command-line.db, but COLMAP used /tmp/config.db instead.

Cause

BaseOptionManager::Parse parsed the command line, then loaded the project file through Read, which created and notified a separate variables map. The project-file values therefore replaced the already parsed command-line state.

Changes

  • Parse project-file options into the existing command-line variables map, preserving explicit command-line values while still filling options supplied only by the project file.
  • Share project-file parsing and unregistered-option diagnostics between Parse and Read.
  • Add a regression test covering command-line database-path overrides and project-file-only image paths.

Testing

Focused: /home/vaishnavi/colmap-flagship-20261026-clean-build/src/colmap/controllers/base_option_manager_test --gtest_filter=BaseOptionManager.CommandLineOptionsOverrideProjectFile — 1 passed on HEAD 0976409702e778bb89db531dd8ab7b8fa10bba06.

Adjacent: ctest --test-dir /home/vaishnavi/colmap-flagship-20261026-clean-build -R "(base_option_manager_test|option_manager_test)" --output-on-failure — 2 tests passed: 20 BaseOptionManager tests and 14 OptionManager tests.

Format: clang-format --dry-run --Werror with clang-format 23.1.3 — passed. git diff --check — passed.

Full suite: not run.

Not covered: changing project-file validation or unsupported-option handling; this PR only changes precedence when both sources specify an option.

@sarlinpe sarlinpe added the full-ci Run Windows and remaining pycolmap CI label Oct 29, 2026
@sarlinpe
sarlinpe requested a review from ahojnnes October 29, 2026 05:56
Add ParseWithProjectPathSplitOptions covering required options split across the command line and project file and command-line-only options, and ParseWithMissingProjectPathFails for Parse() with a missing project file. State in doc/cli.rst that command-line values take precedence.
@ahojnnes
ahojnnes merged commit f956ce6 into colmap:main Oct 30, 2026
16 checks passed
fringehush-gif added a commit to fringehush-gif/colmap that referenced this pull request Nov 3, 2026
## Summary
- Integrate all 12 upstream commits after the shared base 9371f7b, including LoMa BF16 loading, matching-worker error propagation, keypoint shape scaling, and project-file CLI overrides.
- Preserve the fork's CUDA blocking-sync helper alongside upstream's BF16 device check and register the shared CUDA test once.

## Validation
- Resolved all merge conflicts; no conflict markers or unmerged paths remain; git diff --check passes.
- Incremental Linux CUDA build linked six focused test executables. The prepared custom Ceres closure required its existing Abseil/CUDA library directories on the linker's search path.
- CTest passed controllers/base_option_manager_test, feature_matching_utils_test, incremental_pipeline_test, option_manager_test, feature/loma_test, and util/cuda_test (six programs, one run each).
- No full suite, Python binding, end-to-end, or performance claim.

## Upstream commits

- `ea470c0c4f4a40a3bdfa33d01eb38375c5df64de` Run Windows and remaining pycolmap CI only with the full-ci label (colmap#4904)
- `c0339e95482c404b51f38ff9b86866de495984f0` Fix MSVC warnings C4805, C4996, and C4756 (colmap#4910)
- `f00d6063bb0b120cf10ee190f7f06f4a34edf432` Expose Ceres solver thresholds in incremental mapping (colmap#4892)
- `978a4467f36bbfc9ae18780f2dca253000b0d008` Keep division-camera derivatives finite on the optical axis (colmap#4888)
- `98f31541f483788ab550f5c4a4e0804e8674b9e0` Fix leak and check covariance in CovarianceWeightedCostFunction (colmap#4911)
- `a467519441171054c7aaa17dffe86fe06431f05c` Avoid stack overflow when compressing union-find chains (colmap#4906)
- `404b83db2c2cc04892e14a578ddfa73e0ac9bfb1` Fix LoMa bf16 fallback on CUDA by loading it like any other model (colmap#4924)
- `d02e6701dede22eaeee89f73784a8c79f6f289ac` Add max_num_features option to automatic_reconstructor and benchmark (colmap#4907)
- `82c3b5db78d96a7e93ca7b8b2af0634e28aa33f4` Propagate errors of feature matching workers instead of terminating (colmap#4921)
- `4afe8d1156a71a2ff33974895f221c8eb3740cb1` Rescale keypoint shapes in image coordinates (colmap#4926)
- `ce2b5ab9df3801c2b75edbba338c04ad3c8cc6af` Fix vocabulary tree builder descriptor dimensions (colmap#4923)
- `f956ce629c21a88d75a7f7b3107298d1faf3dcf3` Fix command-line overrides for project files (colmap#4902)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

full-ci Run Windows and remaining pycolmap CI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants