Search code examples
ubuntumercurialmultiple-repositories

Run hg pull over all subdirectories


How can I update multiple mercurial (hg) repositories from their shared parent's directory?

/plugins/search
/plugins/overview
/plugins/chart

I want to change a branch to default one and update them all at once

cd /plugins/search
hg update -C default
hg pull -u

Solution

  • Run the following from the parent directory, plugins in this case:

    find . -type d -maxdepth 1 -exec hg update -C default -R {} \;
    find . -type d -maxdepth 1 -exec hg pull -u -R {} \;
    

    To clarify:

    • find . searches the current directory
    • -type d to find directories, not files
    • -maxdepth 1 for a maximum depth of one sub-directory
    • -exec {} \; runs a custom command for every find
    • hg update -C default -R {} hg changes branch to default in each repository
    • hg pull -u -R {} hg updates to new branch head if changesets were pulled in each repository