Warning, /kdevelop/kdevelop/plugins/subversion/Architecture.txt is written in an unsupported language. File is not indexed.

0001 The code length of subversion plugin seems to be very long, but it's just because
0002 there are many kind of actions in subversion. If we separate and investigate
0003 one action, the architecture is simple.
0004 
0005 1. The GUI part
0006 
0007 For each context menu item a slot is called and creates a SvnBlameJob. This
0008 job is then started and will do the actual work on its own. Depending on the type
0009 of action it fetches the results and displays them in a GUI
0010 
0011 1a. Directly using the IBasicVersionControl Interface
0012 
0013 this is no different that 1., except that there's no slot. The caller of the IBVC
0014 interface is responsible for starting the job, connecting to its signals, delete
0015 it and fetch any results to display or work with them.
0016 
0017 2. The Jobs
0018 Each job has an SvnInternalJob subclass that does carries out the actual action
0019 in a separate thread. Both are connected in various ways, using queued connections,
0020 to fetch additional information (like ssl certificate trust, login/password) and
0021 to provide the result of the job.
0022 
0023 The Job classes use VcsJob and thus KJob as parent so their progress can be monitored
0024 with KJob Monitors in KDE.
0025 
0026 3. InternalJob subclass
0027 
0028 Executes the action requested usually by converting the parameters into
0029 types that are understood by the svn C++ client API and then just executing
0030 a call to svn::Client::XXX. Depending on the type of action a result is converted
0031 back to Qt types and send via a signal to the parent job (which is the KJob subclass)
0032 
0033 The threading is done via ThreadWeaver so queueing of jobs is done instead of
0034 spawning a new Thread for each and every action.
0035 
0036 4. Finishing
0037 
0038 When the internaljob's run() method is exited ThreadWeaver emits an appropriate signal
0039 which is connected to the Job subclass. This in turn changes its state and emits
0040 the appropriate KJob signals by calling the KJob methods for that.
0041 
0042 If the Job class received a result it will immediately emit a resultsReady signal and
0043 as soon as the result is fetched via fetchResults will remove the fetched results.
0044