Bazaar

Bazaar

 




Wiki Tools

  • Find Page
  • Recent Changes
  • Page History
  • Attachments

Introduction

Note: everything which follows is a strawman and is up for grabs. Please make comments. Nothing is final. The dialogs are all mock-ups quickly created in QtDesigner and have no code behind them.

Tortoise will enable Bazaar to be used by users with diverse backgrounds and skill-sets. Many users are likely to not be developers and have no interest in version control; they use it because they must and have a passing familiarity with SVN or CVS. As the main interaction with Tortoise is via the Context Menu, this must be able to reflect the competing requirements of diverse groups.

There are 3 general operations that are common to all VCS users, and users are likely to expect these concepts to be easily accessible:

1) Get me a new working tree from somewhere ("checkout" in subversion terms)

2) Get external changes into my existing working tree ("update" in subversion)

3) Share my changes with others ("checkin" in subversion)

TortoiseSVN also reflects these as the "major" operations - by default, they are the only items that will appear on the top-level context menu. All other operations are secondary and appear on a sub-menu. However, as subversion only supports one workflow there is no ambiguity; bazaars flexibility means things are not quite as simple.

Consider (1) - "get a new working tree" - bazaar allows us to "branch", "checkout" or "checkout --lightweight". We don't want to offer these 3 options on the top-level context menu - how will the casual user know the difference? We need some way of implementing these high-level operations without overwhelming the new user.

Our solution is to invent the concept of a "hybrid command" for these operations - a single "command" that attempts to unify multiple bazaar commands. Note that the individual commands will still exist and may be preferred by advanced users over the hybrid commands - the hybrid commands main purpose in life is to simplify these common operations without inconveniencing the advanced user. As you will see, only 2 "hybrid commands" are proposed.

Get me a new working tree

This will appear with the text "BZR Get Branch..." when the selected directory is not under control of Bazaar.

[mockup to come]

Get external changes into my existing working tree

This will appear with the text "BZR Update" whenever the selected directory is part of a working tree. It needs to unify the "pull", "update" and "merge" commands, and could possibly even perform the role of "switch".

This will display one of 2 dialogs, depending on if the current directory is a checkout or not:

Update Bazaar Checkout

This dialog will be used if the directory is part of a checkout. Its default is to perform a 'bzr update', but also allows for a 'pull' operation to be performed. It allows for a revision to be specified, but this should be ignored - either both dialogs should offer this, or neither.

  • update-checkout.jpg

Update Bazaar Branch

This dialog will be used if the directory is a regular branch. If a parent branch is known, it defaults to doing a pull from the parent (ie, this is tracking an upstream master). If a parent is not known, if defaults to performing an 'update' of the working tree (ie, this is the master and other branches have been pushing or performing checkins.)

  • update-branch.jpg

Merging

It's not yet clear what action to take when a merge is necessary...

Share my changes

This is performing a checkin. It is reasonable that Bazaar also implement this purely as a checkin. "Pushing" your branch is reasonably advanced, and would only be used by people who understand they are working in a "distributed" workflow. As a result, having "push" only appear on the sub-menu is reasonable, so no "hybrid command" is necessary here.

Tortoise SVN Menus

For reference, below is a list of every TSVN command available. All of these commands are only listed when certain conditions are met, and these conditions are not listed. The first item is the menu text, and the second is the descriptive text displayed in the status bar. The commands are displayed in the order they are listed, and the dashes indicate where separators are shown.

"Chec&kout...", "Check out a working copy from a repository"
"&Update", "Updates the working copy to the current revision"
"&Commit...", "Commits your changes to the repository"
----
"&Diff", "Compares the file with the last committed revision to show you the changes you made"
"&Diff with previous version", "Diffs the working copy file with the one before the last commit."
"&Diff with URL", "Compares the selected file with a file in the repository"
"Show &log", "Shows the log for the selected file / folder"
"&Repo-browser", "Opens the repository browser to tweak the repository online"
"Check for modi&fications", "Shows all files which were changed since the last update, locally and in the repository"
"Revision &graph", "Shows a graphical representation of copies/tags/branches"
----
"&Edit conflicts", "Launches the external diff / merge program to solve the conflicts"
"Res&olved...", "Resolves conflicted files"
"&Update to revision...", "Updates the working copy to a specific revision"
"Re&name...", "Renames files / folders inside version control"

"&Delete", "Deletes files / folders from version control"
"&Delete (keep local)", "Deletes files / folders from version control but keeps the file"
"Re&vert...", "Reverts all changes you made since the last update"
"Undo Add..", "Reverts an addition to version control"
"Delete unversioned items...", "Removes all unversioned and ignored items"
"&Clean up", "Cleanup interrupted operations, locked files, ..."
"Get loc&k...", "Locks a file for other users and makes it editable by you."
"Release loc&k", "Releases locks on files so other users can edit them again."
"Break loc&k", "Releases locks even if you're not the owner of the locks (breaks them)."
---
"Branch/&tag...", "Creates a 'cheap' copy inside the repository used for branches or tagging"
"S&witch...", "Switch working copy to another branch / tag"
"&Merge...", "Merges a branch into the main trunk"
"Merge all...", "Merges all missing revisions back into the working copy using merge-tracking information"
"E&xport...", "Exports a repository to a clean working copy without the svn administrative folders"
"Relo&cate...", "Use this if the URL of the repository has changed"
----
"Create repositor&y here", "Creates a repository database at the current location"
"&Add...", "Adds file(s) to Subversion control"
"Add (as replacement)...", "Add (as replacement)..."
"&Import...", "Imports the directory to a repository"
"&Blame...", "Blames each line of a file on an author"
"Add to &ignore list", "Adds the selected file(s) or the filemask to the 'ignore' list"
"Remove from &ignore list", "Removes the file or filemask from the list of ignored items"
---
"Create &patch...", "Creates a unified diff file with all changes you made"
"Apply &patch...", "Applies a unified diff file to the working copy"
"Properties", "Manage Subversion properties"
"&Help", "Read the 'Daily Use Guide' before you are stuck..."