Development practices¶
Making changes to MapServer¶
Minor changes to MapServer, such as bug fixes, may be made by opening a GitHub pull request.
Major changes should be discussed on the mapserver-dev listserv and may require the drafting of a RFC (request for comment) document.
Git usage¶
This section collects a few best practices for git usage for MapServer development.
Initiating your work repository¶
Fork mapserver/mapserver from the GitHub UI, and then run:
git clone https://github.com/MapServer/MapServer
cd MapServer
git remote add my_user_name git@github.com:my_user_name/mapserver.git
Working with a feature branch¶
git checkout main
# potentially update your local main against upstream, as described above
git checkout -b my_new_feature_branch
# do work. For example:
git add my_new_file
git add my_modifid_message
git rm old_file
git commit -a
# you may need to resynchronize against main if you need some bugfix
# or new capability that has been added since you created your branch
git fetch origin
git rebase origin/main
# At end of your work, make sure history is reasonable by folding non
# significant commits into a consistent set
git rebase -i main
# use 'fixup' for example to merge several commits together,
# and 'reword' to modify commit messages
# or alternatively, in case there is a big number of commits and marking
# all them as 'fixup' is tedious
git fetch origin
git rebase origin/main
git reset --soft origin/main
git commit -a -m "Put here the synthetic commit message"
# push your branch
git push my_user_name my_new_feature_branch
From the GitHub UI, issue a pull request.
If the pull request discussion or automated checks require changes, commit
locally and push. To get a reasonable history, you may need to combine commits
using git rebase -i main
, in which case you will have to force-push your
branch with git push -f my_user_name my_new_feature_branch
.
Updating your local main against upstream main¶
git checkout main
git fetch origin
# Be careful: this will lose all local changes you might have done now
git reset --hard origin/main
Commit messages¶
Commit messages should indicate a component name (eg a driver name), a short description, and when relevant, a reference to a issue (with ‚fixes #‘ if it actually fixes it)
COMPONENT_NAME: fix bla bla (fixes #1234)
Details here...
Commit hooks¶
MapServer provides pre-commit hooks to run code linters before a commit is made. The hooks are cloned with the repository and can be installed using pre-commit:
python3 -m pip install pre-commit
pre-commit install
Once installed, the hooks can be run manually via pre-commit run --all-files
.
Blame ignore file¶
Due to whole-tree code reformatting done during MapServer 8.2 development,
git blame
information might be misleading. To avoid that, you need
to modify your git configuration as following to ignore the revision of
the whole-tree reformatting:
git config blame.ignoreRevsFile .git-blame-ignore-revs