Closing Hg Branches

Mercurial

Mercurial Problem Overview


When using hg branch FeatureBranchName and publishing it to a central repo that is shared amongst developers, is there a way to eventually close the FeatureBranchName when its development has officially been merged with the default branch?

It would also be helpful if the FeatureBranchName was not visible when performing a hg branches command.

Mercurial Solutions


Solution 1 - Mercurial

hg commit --close-branch

should be enough to mark a branch close. (see hg commit)

--close-branch

> mark a branch as closed, hiding it from the branch list.

See also this thread:

> My expectation is that I close a branch because this line of development has come to a dead end, and I don't want to be bothered with it any more.
Therefore, when a branch has been closed I shouldn't see it (in branches, heads, log, for instance) unless I explicitly ask to see closed branches.

> I should note that I expect a closed branch to remain in the repository; it may be useful in the future, and the commit --close-branch message should at least explain why the branch was closed.
Pruning branches is another thing altogether.


Note: that "closing branch" business is one aspect seen as missing in Git, when compared to Mercurial:

> Branches in git are, we’re always told, ephemeral things to be used and thrown away, and so far as I know git doesn’t have a way to indicate to your colleagues that you’re done with a branch;
the only way to do this is to delete it, or to hope they see the final merge commit and understand that the branch is closed to further development.

> [In Mercurial] When you’re done with a branch, however, you cannot delete it from the repository; instead, you issue a commit which closes the branch, and Mercurial notes that the branch is closed. It’ll remain a permanent part of your repository history.

Solution 2 - Mercurial

I wrote a simple script that completes the branch close, commands found at PruningDeadBranches.

Script


#!/bin/bash
#script to close the not required branch in mercurial

hg up -C $1
if [ $? -eq 0 ]; then
    echo "$1 is up"
else
    echo "branch not found, please recheck your argument"
    exit 1
fi 
# if we are here then the branch is up, so we do the following
hg commit --close-branch -m 'this branch no longer required' 
echo "$1 is closed"
hg up -C default
echo "default is up" 

How to

Move to the local copy of the repository, and run this script by giving an argument. For example:

$./the_script_above.sh bad_branch_name_to_close

What does it do

This does the following:

  1. If the branch exists, it updates to the given branch or else exists with an error message.
  2. It closes the branch.
  3. Updates to the default branch.
  4. Stops.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNateView Question on Stackoverflow
Solution 1 - MercurialVonCView Answer on Stackoverflow
Solution 2 - MercurialRoshan PoudyalView Answer on Stackoverflow