Difference between revisions of "Managing Local Changes with Mercurial Queues"

From gem5
Jump to: navigation, search
Line 8: Line 8:
  
 
* If any local change needs to be updated, it requires a separate commit.
 
* If any local change needs to be updated, it requires a separate commit.
* If you have several small, unrelated changes and separate branches must be maintained.
+
* If you have several small, unrelated changes separate branches must be maintained.
 
* Upstream changes must be merged into the local branches.
 
* Upstream changes must be merged into the local branches.
  

Revision as of 13:57, 16 February 2013

Repository Management Problem

gem5 users typically opt to freeze their repository at a particular changeset when starting a new research project. This approach has several downsides:

  • It discourages users from contributing back any useful changes they may develop.
  • If a useful change is added upstream, it's a long, tedious process to update.

If a user chooses to keep their local repository up-to-date with the source tree they typically use named branches and merge any upstream changes into their branches. This approach also has its downsides:

  • If any local change needs to be updated, it requires a separate commit.
  • If you have several small, unrelated changes separate branches must be maintained.
  • Upstream changes must be merged into the local branches.

A powerful tool that overcomes these problems is the mercurial queue extension.

Mercurial Queues

The mercurial queue extension is a powerful tool that allows you to:

  • Manage small changes easily as a set of well-defined patches.
  • Edit previous patches without having a new commit.
  • Keep your local changes cleanly separated from upstream changes.

Example Mercurial Queue Use