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