Filtered views¶
Introducing filtered views¶
Views provide a mask over the tree so that users can focus on a subset of a tree when doing their work. There are several cases where this masking can be helpful. For example, technical writers and testers on many large projects may prefer to deal with just the directories/files in the project of interest to them.
Developers may also wish to break a large set of changes into multiple
commits by using views. While shelve
and unshelve
let developers
put some changes aside for a later commit, views let developers specify
what to include in (instead of exclude from) the next commit.
After creating a view, commands that support a list of files - status, diff, commit, etc - effectively have that list of files implicitly given each time. An explicit list of files can still be given to these commands but the nominated files must be within the current view. In contrast, tree-centric commands - pull, merge, update, etc. - continue to operate on the whole tree but only report changes relevant to the current view. In both cases, Breezy notifies the user each time it uses a view implicitly so that it is clear that the operation or output is being masked accordingly.
Note: Filtered views are only supported in format 2a, the default in Breezy 2.0, or later.
Creating a view¶
This is done by specifying the files and directories using the view
command like this:
brz view file1 file2 dir1 ...
The output is:
Using 'my' view: file1, file2, dir1
Listing the current view¶
To see the current view, use the view
command without arguments:
brz view
If no view is current, a message will be output saying No current view.
.
Otherwise the name and content of the current view will be displayed
like this:
'my' view is: a, b, c
Switching between views¶
In most cases, a view has a short life-span: it is created to make a selected change and is deleted once that change is committed. At other times, you may wish to create one or more named views and switch between them.
To define a named view and switch to it:
brz view --name view-name file1 dir1 ...
For example:
brz view --name doc NEWS doc/
Using doc view: NEWS, doc/
To list a named view:
brz view --name view-name
To switch to a named view:
brz view --switch view-name
To list all views defined:
brz view --all
Temporarily disabling a view¶
To disable the current view without deleting it, you can switch to the
pseudo view called off
. This can be useful when you need to see the
whole tree for an operation or two (e.g. merge) but want to switch back
to your view after that.
To disable the current view without deleting it:
brz view --switch off
After doing the operations you need to, you can switch back to the view you were using by name. For example, if the previous view used the default name:
brz view --switch my
Deleting views¶
To delete the current view:
brz view --delete
To delete a named view:
brz view --name view-name --delete
To delete all views:
brz view --delete --all
Things to be aware of¶
Defining a view does not delete the other files in the working tree - it merely provides a “lens” over the working tree.
Views are stored as working tree metadata. They are not propagated by branch commands like pull, push and update.
Views are defined in terms of file paths. If you move a
file in a view to a location outside of the view, the view
will no longer track that path. For example, if a view is
defined as doc/
and doc/NEWS
gets moved to NEWS
,
the views stays defined as doc/
and does not get changed
to doc/ NEWS
. Likewise, deleting a file in a view does
not remove the file from that view.
The commands that use the current view are:
status
diff
commit
add
remove
revert
mv
ls.
Commands that operate on the full tree but only report changes inside the current view are:
pull
update
merge.
Many commands currently ignore the current view. Over time, some of these commands may be added to the lists above as the need arises. By design, some commands will most likely always ignore the current view because showing the whole picture is the better thing to do. Commands in this group include:
log
info.