KDevelop/Plugin Repo Merging

From KDE Community Wiki

Merging A Plugin Repo into The KDevelop Repo

Given a plugin which is candidate for inclusion in the main kdevelop repository. So far it has been developed in a separate repository, with a noteworthy commit history which ideally should be kept exactly (e.g. if multiple authors committed).

The recommended way is to import the unmodified history of the subtree and to do a merge commit to move the merged repository to the plugin subdirectory.

# go to local kdevelop repo
cd <path-to-local-kdevelop-repo>
# make repo of plugin known
git remote add plugin_remote <path-or-url-to-plugin-repo>
# get only main branch(es), like master, with all the interesting history
# avoid fetching (version) tags as they might conflict or are confusing in the kdevelop repo
git fetch plugin_remote master
# prepare merge commit
# git 2.9+ needs --allow-unrelated-histories
git merge -s ours --no-commit --allow-unrelated-histories plugin_remote/master
# copy files in the working copy, into its own subdir below plugins/
git read-tree --prefix=plugins/<pluginname> -u plugin_remote/master
# complete the merge commit
git commit -m "Imported <pluginname> as a subtree."
# now integrate the plugin code into the build system and remove no longer needed files
# then commit this

Once this is pushed to the official repo, it is time to mark the old repo as finished in a final commit which...

  • removes all files
  • leaves a README.md file with info about the move
  • leaves a CMakeLists.txt which catches automated builds of the repo

Sample for CMakeLists.txt:

project(<pluginname> LANGUAGES NONE)
message(FATAL_ERROR "<pluginname> was merged into kdevelop.git")

Sample for README.md:

<pluginname> has been moved into kdevelop.git:plugins/<pluginname>


Also to do:

  • Ask translation admins to copy any translation catalogs to the location of kdevelop catalogs.
  • Update sysadmin/repo-metadata to move the plugin repo project data below "unmaintained".
  • Update kde-build-metadata to remove all data about the plugin.