Mark Hammond wrote:
>> The reason that the shell extension dll also has the ability to fetch
>> the Subversion status directly is simply because of the "shell" setting
>> for the overlays: some people don't like the cache.
> Do you know what they don't like about the cache? Does it get out-of-date?
> I'm also interested to know how recursive directory status is handled
> without the cache?
Some reasons why people don't like the cache:
* it needs memory. People who rarely use version control don't like that
and switch back to 'shell' or 'none' (TSVN settings which don't use the
* the cache is by definition always out-of-date. But it monitors the
file system for changes and when it detects such changes it re-crawls
the corresponding working copy to fetch the status again. Since the
re-crawling also happens at times the users don't really want it to
(i.e., they don't care about the accuracy of the overlays at that time),
they also turn off the cache.
* re-crawling a very big working copy means a lot of disk access. So
users who have such big (> 5GB) working copies also turn off the cache
>> I'm not sure what exactly you want to improve here. You can't just use
>> one shell extension dll for all Tortoise clients - they're made for
>> different versioning tools and have very few things in common.
> I'm not personally advocating any attempts to share binaries. However, I
> have been struck by how little source-control work these extensions actually
> do. I'm sure that is just because I'm not looking hard enough though :)
But I think the 'little' source control work they do is *very* specific. :)
>> For example, the context menu extension is different for every Tortoise
>> client. The same for the column provider.
> They seem quite similar to me. Indeed, many of the context menu operations
> don't do much more than build and execute a command-line based on the
> filename(s) selected. Eg, I'd estimate that only ~10-15% of
> ContextMenu.cpp relates directly to subversion, and even that code is
> generally limited to getting an integer based "status" for a particular
But you won't gain anything by having a common context menu provider.
Menu items are not limited like the overlay slots, the commands are
different (push vs. commit, update vs. pull, ...), ...
And: TSVN fetches the status in the context menu directly, i.e., it does
*not* use the cache. Depending on the status, the menu entries are shown
(i.e., only entries that make sense for a given status are shown).
The reason why the cache is not used for the context menu is that (as
mentioned above) the cache is always out-of-date (usually only by a few
seconds, which is fine for overlays), and that's not acceptable for a
> Column providers seem similarly generic and could be implemented given some
> way to fetch "properties" by arbitrary name or ID. OTOH, Column Providers
> appear dead moving forward, so I doubt we will expend much energy on them.
Yes, the column providers are no longer supported on Vista. I still hope
that MS will see that they did a stupid thing by abandoning those and
re-introduce them in the next Windows version. Or at least some other
means to show properties for *all* filetypes and not just specific ones.
>> If you want to have some common status-fetching process, that wouldn't
>> work either: different version control systems have different status
>> and also work completely different.
> I think we can still do things at a higher level. Consider the Icon Overlay
> handling - so long as we consider the operation in terms of the shell (ie,
> what icon overlay should be used for an item) instead of in VCS terms, it
> should be easier. The code that is VCS specific must then also know
> intimate details about Tortoise (ie, it must know how to map its concept of
> status to shell extension concepts such as overlay index) but that sounds
> reasonable. As mentioned, I'm only currently interested in source-code
> sharing, not sharing binaries.
> I'm confident you will tell me that the devil is in the detail though - so
> anything you can do to educate me is appreciated.
I'm still missing details here. You say you want to share some code
between the different Tortoises. But what parts exactly? What *can* be
shared, what's common in fetching the status/showing context menus
between the different SCMs?
It won't help if we can come up with some common code, but that code has
lots of switch/case of if statements in it to differ between the
different Tortoise implementations.
I don't say it isn't possible to come up with something that can be
shared, but I still think it's not worth the effort - we won't really
gain anything by doing it.
oo // \\ "De Chelonian Mobile"
(_,\/ \_/ \ TortoiseSVN
\ \_/_\_/> The coolest Interface to (Sub)Version Control
/_/ \_\ http://tortoisesvn.net
Received on 2008-05-01 16:08:38 CEST