Thanks for grabbing the hgattic extension. I hope you find it useful.
To enable this extension add the following to your hgrc:
[extensions] hgattic = /path/to/hgattic/repo/attic.py
If you need any help, feel free to contact me via email: email@example.com (english please :-), my french and german aren't very good yet). I live in Montana, USA (GMT -7) and most days I frequently check my email between 7am and 10pm.
Patches/contributions are welcome, preferably (in no order): 1. create a fork/queue on bitbucket 2. email patch (attachments please, Thunderbird and Gmail both mess with whitespace) 3. just ask for write access to the repository on bitbucket 4. create a patch repository that I can pull directly into my attic (by far the easiest way for me; right now with a queue I grab the patches and put them in my attic anyways)
If you choose to email a patch, you can add the following to your hgrc for patchbomb: [defaults] email = -a
[email] from = your name <your@email> to = firstname.lastname@example.org
1.0 - stablization, plan to tag around Jan 30
1.1, 1.2: - overlays - mq-like toolkit
future thoughts (possibly unnecessary, thoughts incomplete): - allow multiple queues to be active at once as if they were branches - create merge-patches signifying a merge between a queue and either another queue or a changeset - attempt to eliminate reasoning for the pbranch extension - not sure yet why merge-patches are a good idea (why not just allow multiple queues and easy rebasing of queues)
new command: hg attic-overlay [--remove] name alias overlay
adds an overlay to the current repository
An overlay is a patch that applies and unapplies cleanly and doesn't interact with any other changes. When an overlay is added, it will be transparently be removed before any working copy changing commands run and immediately added back on after the command finishes.
options: --remove removes an overlay
overlay will: 1. add the patch name to .overlays 2. apply the overlay
any command that modifies the status of the working copy (update, shelve, unshelve, commit, qnew, record, ...) will be wrapped to ensure (plan on handling bundled extensions and core commands): 1. all overlays are removed from the working copy before the command executes 2. overlays are reapplied after the command executes
attic-display will be modified: 1. include 'O' status alongside '*' and 'C'
overlay --remove 1. remove the patch name from .overlays
intended to potentially replace mq itself 1. compacted commandset (go over existing commands to decide necessity) 2. use .hg/attic/[queue name] for folder instead of .hg/patches 3. allow interactive splitting of queues using an editor 4. allow interactive joining of queues using an editor 5. allow interactive reordering of queues using an editor 6. allow non-interactive splitting of queues (split on applied/unapplied boundary) 7. allow non-interactive joining of queues 8. allow user to pull single patches out of queues and make them shelves on their own 9. allow user to insert a shelve into a queue
thoughts for splitting, joining and reordering from an editor: executing hg qeditor queuename1 queuename2 (command name TBD) editor would open with a file in the following syntax: queuename1: queuename1.patch1 queuename1.patch2 queuename1.patch3 queuename2: queuename2.patch1 queuename2.patch2 queuename2.patch3 queuename2.patch4 queuename2.patch5
which you could then shuffle around to eg: queuename2: queuename1.patch1 queuename1.patch3 queuename2.patch1 queuename2.patch3 queuename2.patch5 newqueue: queuename1.patch2 queuename2.patch2 queuename2.patch4
and it would take care of all the details of: 1. moving q1p1 and q1p3 to the top of the q2 series file 2. creating a new queue containg q1p2 and q2p2 3. moving q2p4 out to a patch in the shelving area
Potential future work
- fix bugs
- regex/glob option to attic-display to filter out files from the list
- create commands to do basic work with the attic repo (commit, push, pull, addrem, init, ...)
- override import to provide default path for patches from attic (so you don't have to unshelve before finishing them or manually provide the path to import)
- some kind of patchbomb integration would be nice
- provide new commands for dealing with patches like qimport (don't know if this is really necessary), also consider mbox-import or something like it