~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/developers/tortoise-strategy.txt

  • Committer: Vincent Ladeuil
  • Date: 2008-09-11 19:36:38 UTC
  • mfrom: (3703 +trunk)
  • mto: (3705.1.1 trunk2)
  • mto: This revision was merged to the branch mainline in revision 3708.
  • Revision ID: v.ladeuil+lp@free.fr-20080911193638-wtjyc1kcmacc6t1f
merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
exist in a separate process - DLLs are the only option, and they are loaded
43
43
into other processes which take advantage of the Windows shell (although
44
44
obviously this DLL is free to do whatever it likes).
45
 
 
 
45
 
46
46
For the sake of this discussion, there are 2 categories of shell extensions:
47
 
 
 
47
 
48
48
* Ones that create a new "namespace". The file-system itself is an example of
49
49
  such a namespace, as is the "Recycle Bin". For a user-created example,
50
50
  picture a new tree under "My Computer" which allows you to browse a remote
51
51
  server - it creates a new, stand-alone tree that doesn't really interact
52
52
  with the existing namespaces.
53
 
 
 
53
 
54
54
* Ones that enhance existing namespaces, including the filesystem. An example
55
55
  would be an extension which uses Icon Overlays to modify how existing files
56
56
  on disk are displayed or add items to their context menu, for example.
71
71
this illustration is contrived - the code from these DLLs are already in
72
72
memory and there is no reason to suggest TSVN adds any other unreasonable
73
73
burden - but the general point remains valid.)
74
 
 
 
74
 
75
75
This has wide-ranging implications. It means that such shell extensions
76
76
should be developed using a tool which can never cause conflict with
77
77
arbitrary processes. For this very reason, MS recommend against using .NET
113
113
commands. The command-line to the app has even been documented for people who
114
114
wish to automate tasks using that GUI. This GUI is also implemented in C++
115
115
using Windows resource files.
116
 
 
 
116
 
117
117
TortoiseSvn has an option (enabled by default) which enabled a cache using a
118
118
separate process, aptly named TSVNCache.exe. It uses a named pipe to accept
119
119
connections from other processes for various operations. When enabled, TSVN
149
149
application using the shell. The GUI in the external application is written
150
150
in PyGTK, which may not offer the best Windows "look and feel", but that
151
151
discussion is beyond the scope of this document.
152
 
 
 
152
 
153
153
It has a better story for logging and debugging for the developer - but not
154
154
for diagnosing issues in the field - although again, much of the heavy
155
155
lifting remains done by the external application.
156
 
 
 
156
 
157
157
It uses a rudimentary in-memory cache for the status of files and
158
158
directories, the implementation of which isn't really suitable (ie, no
159
159
theoretical upper bound on cache size), and also means that there is no
261
261
We will also allow all of the above to be disabled via user preferences.
262
262
Thus, Icon Overlays could be disabled if it did cause a problem for some
263
263
people, for example.
264
 
 
 
264
 
265
265
RPC options
266
266
~~~~~~~~~~~
267
267
 
306
306
Reuse of TSVNCache?
307
307
~~~~~~~~~~~~~~~~~~~
308
308
 
309
 
The RPC mechanism and the tasks performed by the RPC server (RPC, file system
 
309
The RPC mechanism and the tasks performed by the RPC server (rpc, file system
310
310
crawling and watching, device notifications, caching) are very similar to
311
311
those already implemented for TSVN and analysis of that code shows that
312
312
it is not particularly tied to any VCS model.  As a result, consideration
433
433
  version. We will fork the current TSVN sources, including its new
434
434
  support for sharing icon overlays (although advice on how to setup this
435
435
  fork is needed!)
436
 
 
 
436
 
437
437
* Implement property pages and context menus in C++. Expand RPC server as
438
438
  necessary.
439
439
 
440
 
* Create binary for alpha releases, then go round-and-round until it's baked.
 
440
* Create binary for alpha releases, then go round-and-round until its baked.
441
441
 
442
442
Alternative Implementation Strategies
443
443
-------------------------------------