#
#
# add_file "src/model/CertList.cpp"
# content [2e39df6bfe9544ac5ac0b66e8adc75eb319f0be7]
#
# add_file "src/model/CertList.h"
# content [e3dc9f3e1a0d8f64e069a2dfaa3a3b661337c596]
#
# add_file "src/monotone/MonotoneHandle.cpp"
# content [ad8ecb421caa5b58372865949f76c956b326707d]
#
# add_file "src/monotone/MonotoneHandle.h"
# content [bd2012e7f3e4d0a01b5278769a3f5b2a3f286c15]
#
# add_file "src/view/dialogs/ServerDialogManager.cpp"
# content [1220d22709e882f2745861adfc8d7408189b00e5]
#
# add_file "src/view/dialogs/ServerDialogManager.h"
# content [7cec8953b0e2e9e65adeed91c4fadf141bbccca6]
#
# add_file "src/view/mainwindows/ServerWindow.cpp"
# content [cba3ef1f19831c59332d58d68f7c14457497218d]
#
# add_file "src/view/mainwindows/ServerWindow.h"
# content [7887daf2f323b16802f47ee94d495955e927bdd5]
#
# add_file "src/view/widgets/ServerMenuBar.cpp"
# content [6f89a96a6a448cd8cd18987593027a2e60e65209]
#
# add_file "src/view/widgets/ServerMenuBar.h"
# content [6acd250edce0886ff7bb98e71366b74dfaecb58c]
#
# patch "res/forms/dialogs/open_prompt.ui"
# from [13dfa418269f3bd5244fcac23ba8098a26720c70]
# to [d03d1fa4d28bec1f2eae963e36f3e11e4049482e]
#
# patch "sources.pri"
# from [2f08c68c82081c23e985389beb9dac6e6eb6fc21]
# to [cefb814a1688136f1b9e3c5d966a1caa44412cf7]
#
# patch "src/GuitoneStandalone.cpp"
# from [c18d92182a40b7dd4d82476a3a8b69ce36d285c9]
# to [a0119c50ce85d5ae9f1c4ce9fea53a98175ecf0b]
#
# patch "src/GuitoneStandalone.h"
# from [e24ee0655b5718a925a1a738c362237275b25e4f]
# to [130bd2a5ace20673b853b0f49aa7164dff882c84]
#
# patch "src/model/Ancestors.cpp"
# from [be26e96549d5f55721c5513d9f16e53ecf2e06e6]
# to [4d612bcbc7d6e21b18460bbb1231c1e9703c1430]
#
# patch "src/model/Ancestors.h"
# from [d668133dc6751725cdea0a976466e8b8c89f3e3b]
# to [de28309cdad6c070ecc311149db702561c02c663]
#
# patch "src/model/Annotate.cpp"
# from [485f71c5f6fbef3233f91987199b8c8ac37793b8]
# to [b8c549f28b396f9db085aa2bb0184b2245868100]
#
# patch "src/model/Annotate.h"
# from [6b0eda06cab7acc0b94167e919247155dda40cbc]
# to [41a73cd6a6500963cf1f39f76529e6f63822d02b]
#
# patch "src/model/AutomateCommand.cpp"
# from [7f12f375b0834d9bbd1e1a7d901f91b5ad2bcd96]
# to [a8f26b6d005071f97cbfbc009e6a5d4093618a90]
#
# patch "src/model/AutomateCommand.h"
# from [5c2be101c4dc2eb361244057112f9f17faf3337e]
# to [2377ff679a289185b8dbe06652c3a4a608d056a2]
#
# patch "src/model/Branches.cpp"
# from [9707d8b1361016c41f96729adc0da88b988e51a3]
# to [f90b1629937d69ddb9f977c7a605b58b38ad86e0]
#
# patch "src/model/Branches.h"
# from [cf346cdfd0b86ffc8711859f029b44b94c9bc280]
# to [6d7691b2efc1bee21a8f916feda26dad9a391ee8]
#
# patch "src/model/Certs.cpp"
# from [3f7a2d60fc0568e08f8206492a792fcddc623c81]
# to [ddb47674d6a21355fc5850d58aa0316a08a75c37]
#
# patch "src/model/Certs.h"
# from [d7ec4361924586c6dd6ed83f9259e35fb5b2017e]
# to [50f3a40de5f13beacab4d493ea76f048a29c2cb1]
#
# patch "src/model/ContentDiff.cpp"
# from [96601ca8586c28850268b7753a33a36a5e16d8a7]
# to [31e19c80a067eee885971a08355a5e421d2a553f]
#
# patch "src/model/ContentDiff.h"
# from [1c6e2ba3401e96ec515c037b068e9ed20f75d652]
# to [afa235dfe6a32b2894bc2f8eccbf492a979e366a]
#
# patch "src/model/GetAttributes.cpp"
# from [c48bcbc5d8afbe7f40fc8912eadb631f33371d8b]
# to [6bcd1a72894e953a633580e3d2661ff5b9da45ac]
#
# patch "src/model/GetAttributes.h"
# from [4f7ca1ecaf78f12632e3d4a8fa65d670e09020a1]
# to [4d3050038724ca2ee7adf28b8c90565511d6c90f]
#
# patch "src/model/GetBranchLog.cpp"
# from [e9ac73db95e5524f1970dbbed89be13c87659baa]
# to [81e960481db6bdac38a5ea1de91c111ad2b54af0]
#
# patch "src/model/GetBranchLog.h"
# from [fb34c7f1a38c677e60b4945456567b104922e82e]
# to [5cb47c8223ddac917701fcc9bb1c6fd154d9f805]
#
# patch "src/model/GetContentChanged.cpp"
# from [f07066aea6bb76e5c9ff7a28ad51836a3685dced]
# to [948ac2596110523f4fa6dc469890b500a26e07a8]
#
# patch "src/model/GetContentChanged.h"
# from [2e459c7beea84cd2cc13c1fed6776eb8101ee361]
# to [324c77720fd736b36b72a7d4a8668c945e67a871]
#
# patch "src/model/GetDatabaseVariables.cpp"
# from [a64d26ea00b105a85ca5883eabd5f280ddf4dbb0]
# to [f8541e19421025e94cdbfc907c511d9fe6a5d91f]
#
# patch "src/model/GetDatabaseVariables.h"
# from [d5c88700402f4dd78230f3ef8a737571950a4d57]
# to [05b49f7a8033630e310f5be0b823886591ec896e]
#
# patch "src/model/GetFile.cpp"
# from [91ee4ba6d8884bd32e7d817562c4781a18fdf735]
# to [0e0b5d14f6492ddc40e3b2ccc2289e04ca936b19]
#
# patch "src/model/GetFile.h"
# from [079d6a0490ed823f4d9169bfb8a35f107cdc07e2]
# to [1dec5b9aaff37beef4494091378aec8672336a4b]
#
# patch "src/model/GetRevision.cpp"
# from [5d84f72f0ba84421c95832c4a7f72c76c859cd70]
# to [6659642e8dbc847525d4d6f9d202d0024f09fbf6]
#
# patch "src/model/GetRevision.h"
# from [29813b88948834794c0947f3fe35e6467a3b4dc3]
# to [ee6cfcbb07d0ed81adf8c6ed2e3d905fde700336]
#
# patch "src/model/Inventory.cpp"
# from [a052d31df3cd4f5a9f1fc589e5168941c7f913f1]
# to [80516d48c7027b0f859980cb5317fe2e6108e823]
#
# patch "src/model/Inventory.h"
# from [705eda6338ef80e953adaaa0b490e06c67a62138]
# to [a7e78245359ce90855ef951433a721a04a69d3ad]
#
# patch "src/model/InventoryModel.cpp"
# from [caaee221cd516e21be7b927d8fa672fd1e7ab6c1]
# to [d486a1ecb6fc032fb4ed6b30b531a810aa5abcb5]
#
# patch "src/model/InventoryModel.h"
# from [5829fc37eba4c40c1a559109444aa541f7377669]
# to [3451e74962ca7944320c5c4a869252cef0d10d32]
#
# patch "src/model/InventoryWatcher.cpp"
# from [5e16d1a0ed098f6450fa5e6bbd3496a3e2d740d8]
# to [cd762ac7986f53c901ceb1dde868db357b0a906b]
#
# patch "src/model/InventoryWatcher.h"
# from [ae3f783cea8382a2592f58468a39a76f33b16036]
# to [3ebc62636a049b18da9fc6129e49f3c40565a8f3]
#
# patch "src/model/Keys.cpp"
# from [bac22fe33fe8e16f4ab76201d6f9b3cb527942de]
# to [15da8facb87e88eeb55da5339dc30926bb3b9637]
#
# patch "src/model/Keys.h"
# from [9f6df7cf905951771dbb4f1cc1a49117a43c2e34]
# to [0b3fe7345717ac96ab302f9fb64700a055d8dbb7]
#
# patch "src/model/Manifest.cpp"
# from [e50bdb95dde92c0bf991c0ce2b4eec714854bf4e]
# to [7cddb3ed2b22c78bb61ded0db60fc5930b8858a0]
#
# patch "src/model/Manifest.h"
# from [87f96415291d30c53cfe236812da7c0f7e8e9840]
# to [b8846bdf746ba7e5fe0552e4b93798c2459add86]
#
# patch "src/model/Select.cpp"
# from [e77b9594f21232a0e6c7396a3fccf4c78f874dfe]
# to [ab23f2131e122610ee5caae8fae9b2848068c6d3]
#
# patch "src/model/Select.h"
# from [b8dc238d172c17c51ae3bf80a9cd2b2ad394939d]
# to [f8e3dded72724b4498e6285c7e64376ebf929003]
#
# patch "src/model/Tags.cpp"
# from [c9519659ae3b5f5fab35d9d63574e612e424a394]
# to [f1a5b77ef3afb07b4a1a350663a7f4f4c81cf288]
#
# patch "src/model/Tags.h"
# from [81fec9954f65235ce921988b55da5039cdd9b9c2]
# to [2f66dbca8993e84b8f46f1785508a1545feda434]
#
# patch "src/model/Toposort.cpp"
# from [6decc7b78dd2486c95649a4b5434d7db4b20a242]
# to [de8359cc84d1c78b4e58a6fadfeb8e91e58bf53b]
#
# patch "src/model/Toposort.h"
# from [c077c6787ee68374b47d19961df83adf71258ea5]
# to [dc4f6694404ea513d6d8a99f06c6d71f24996d6d]
#
# patch "src/monotone/FileExporter.cpp"
# from [4cea02c79f62a4d0b83a192b453be081e3c9c7e6]
# to [14560ec9143c92fdfefc321abafefb4385dcedcb]
#
# patch "src/monotone/FileExporter.h"
# from [44a4bb7eb2d4f29f3c958bd41ecaa7588a5993a3]
# to [c6c58e54b2858518ff92e8bd476d1127d8065491]
#
# patch "src/monotone/MonotoneManager.cpp"
# from [57056ba7ca863825592a9884f4ac39528521b857]
# to [8b63e64f9501773062d8444415188b6727ca300e]
#
# patch "src/monotone/MonotoneManager.h"
# from [4d0a313dd2921a3b223d16683c48c81d177c627e]
# to [9a4a725a495b7ba94eca66cad0502641e176f092]
#
# patch "src/monotone/MonotoneProcess.h"
# from [51bdb9f10ae2e07c2e52150a041ad04e5cb31f00]
# to [55157714f3c5a8f543178b37308972f51d0d7209]
#
# patch "src/monotone/MonotoneThread.cpp"
# from [54f25692d5b1c89a4bd4ed42783bb4066a2b2e25]
# to [9aee9375d154f37a24147ac87d1327806cc2ec46]
#
# patch "src/monotone/MonotoneThread.h"
# from [ffbb03ad32a7f67796baebb2453a8e66a330ac72]
# to [e1f2a29a3682050496a8170dfcfa139f99e23b9f]
#
# patch "src/monotone/MonotoneUtil.cpp"
# from [30f5e234eb795caa6bb55747a51036aa5afaa94d]
# to [de3e8bbff078c511a63a47bea8a4a1d014b0cb63]
#
# patch "src/monotone/MonotoneUtil.h"
# from [a42494f54155101db9f71a84a32ca3cfb94f2645]
# to [9af29c54ee20c9145b5a619daf276c1bd14661fc]
#
# patch "src/monotone/WorkspaceCommitter.cpp"
# from [552526dc9dacf546ad039cbaa2bf03d7609cdc4d]
# to [68b4a90293c03e120488357df87e332e46d6cb73]
#
# patch "src/monotone/WorkspaceCommitter.h"
# from [c2507e2154158f9745dfb7743d6bf4b0b9544d17]
# to [270854dcaa6e3bd810b62c15acc611fec7886fa4]
#
# patch "src/monotone/WorkspaceCreator.cpp"
# from [e2abf1e85e13092c96106650fb5a29c9d1c040bf]
# to [b2920894fe08036209a860d94c524eca56c10f4b]
#
# patch "src/monotone/WorkspaceCreator.h"
# from [fb360d6db113e9ee9e6a7390be170d1e43f20e48]
# to [3af419e9c390d01109e07f33f7708c976a4ae765]
#
# patch "src/view/dialogs/AnnotateFile.cpp"
# from [9d9aae6eaa58f6b1f01872500ced7a7097664d49]
# to [24eb167f9665d569b034acfa5520f15d9fcd4f59]
#
# patch "src/view/dialogs/AnnotateFile.h"
# from [7f3392e328b31a5daf075dd8f95491d6846ffe57]
# to [6676a9a9d44f33d362f0998dcb4d1de9ab642e32]
#
# patch "src/view/dialogs/ChangesetBrowser.cpp"
# from [f117411e2282c972bfbc24d252c498b49dd6cc61]
# to [f9ac55614adfd2af499a463e0c5da320905b40ad]
#
# patch "src/view/dialogs/ChangesetBrowser.h"
# from [2af4dcc3a6843e8545d98b7054fb7c9b398e7aaa]
# to [3f4d7d1fbc5c51c9150d38e5ec7aa4c6645af8f0]
#
# patch "src/view/dialogs/CheckoutRevision.cpp"
# from [08a5fb3bd73416a58393d9271b0e9f22710805d6]
# to [effa35c60c7d2cd8668de010d3ec98544f9b5c23]
#
# patch "src/view/dialogs/CheckoutRevision.h"
# from [643632486232552a5647b6229826ecffae77aa81]
# to [d3a32557f6207f720fac706237c2c3ab41fa695f]
#
# patch "src/view/dialogs/CommitRevision.cpp"
# from [cea026866a5a7b92bfe0784e1741d009069f2a25]
# to [876a3055bffea87de28896fc8a9034e0314a0369]
#
# patch "src/view/dialogs/CommitRevision.h"
# from [c4debe06e5d659af57f0f7af563c0a3562b433d1]
# to [cf9b6fc36738e60a002383c833eef5e60a8ddd9c]
#
# patch "src/view/dialogs/CreateCert.cpp"
# from [ac94b7b337dad8ddffb2ed525df90360bd54e261]
# to [281888ab6c2794a51051fd5c1f79affbb4d65f25]
#
# patch "src/view/dialogs/CreateCert.h"
# from [3252da5f64e71bb138f3450c7d9ed48066f9382b]
# to [c03f9fd29d66fb7c858c4845fb06506086d1050f]
#
# patch "src/view/dialogs/CreateDatabase.cpp"
# from [3e3252bd4c9fe7b305adc2c3b939eb1210e35202]
# to [717f464eba28ebbe024b734c67db6f11727efb02]
#
# patch "src/view/dialogs/DatabaseDialogManager.cpp"
# from [052e2022d9c33fe5a22d8ada9d29dcaa8dc13c4e]
# to [735c030a3f05b6e99ab9590c57dc8a1b46d8c2be]
#
# patch "src/view/dialogs/DatabaseDialogManager.h"
# from [6fcc736dab49c005d9e30c7ee5d53978f2d09c83]
# to [786df3fcd74a012b44c064eb935b8af2c44d94ad]
#
# patch "src/view/dialogs/FileDiff.cpp"
# from [44fc4a74f158ae9a6d8a5e855521dc7b8527977b]
# to [fe8603471cad4cbdc948351faa2a1fff6217f011]
#
# patch "src/view/dialogs/FileDiff.h"
# from [dbb985d3ede28d6077676ddd35927bdfb03347cc]
# to [35927e2ed2cfe3e530d8f9b366ed501a58f36f32]
#
# patch "src/view/dialogs/FileHistory.cpp"
# from [39a8761450d502b9479f27973c791e155b35cf54]
# to [f96c1c9b8b2bf3878ca25ca19a0e840393add792]
#
# patch "src/view/dialogs/FileHistory.h"
# from [d543deea2159e969268866f3626cedfc441f84b3]
# to [749b32ab1e7448ccf8e3efb3d0708cdd52d2c604]
#
# patch "src/view/dialogs/GenerateKeypair.cpp"
# from [12446002b36af694fa6bbbe6f4d1eee11218db59]
# to [2b09cca3244f89a8a8b71b53ea5c043fa2f1150c]
#
# patch "src/view/dialogs/GenerateKeypair.h"
# from [2f96e57ae54980f65a2420bcb78e8ae7f03adb2c]
# to [30119d4fdcfc15ee7c2a3a14e606022b46efc6b5]
#
# patch "src/view/dialogs/KeyManagement.cpp"
# from [995e2e3ec808f8eae6bdf033f76ca832dbf514e6]
# to [e2a0a71a99464a3acf9ea4fdd62f1c4e0b03f5eb]
#
# patch "src/view/dialogs/KeyManagement.h"
# from [b53a2b1f764b2787cb72beaf6694f1904077e8fd]
# to [5f8ee2ddc0d199e9f3cfed4a9bf4f6b875e1ca77]
#
# patch "src/view/dialogs/Netsync.cpp"
# from [05beca66608fae00fd596121e46c4ccf9f797d2e]
# to [7f89aa2b8477875ec94998e7a49b2ae5054a3d6f]
#
# patch "src/view/dialogs/Netsync.h"
# from [7e44535efac3ff677517b971814725039aea8dfc]
# to [60c3bdb65cba46c0f5305f8bf1dc36ac445dd461]
#
# patch "src/view/dialogs/NewProjectSetup.cpp"
# from [b82fc8e9f06b682ebf3d9dcc93ae0ee7eb40d9c1]
# to [29884e89698c44e6957de65a002cacf1e2c584a1]
#
# patch "src/view/dialogs/NewProjectSetup.h"
# from [3eb92299feb93434a64e52c833168a16872b389b]
# to [a438d90b69a566730ad4a3d9862188b267d7048b]
#
# patch "src/view/dialogs/OpenPrompt.cpp"
# from [74f3450be09bd97a1fe68ad0b2426fb3c2a9781f]
# to [f4b707f26ca5b624d17ff5b007d74fba042f8387]
#
# patch "src/view/dialogs/OpenPrompt.h"
# from [8ceff233c41326a951ee86ec30496258ea1759b4]
# to [496152432c142d198f9d2d9fbff89caa1729c41c]
#
# patch "src/view/dialogs/RevisionDiff.cpp"
# from [b4083373890e06ab5d2cded332fb1fbebf30a680]
# to [c7c804577761f350c26bec42aac456b065dae1fb]
#
# patch "src/view/dialogs/RevisionDiff.h"
# from [b895f3c22dc1e2451ffc60cbff06a6e52c453c79]
# to [f251a593ff991f039cfa2ac281cef5c19e285b1d]
#
# patch "src/view/dialogs/RevisionManifest.cpp"
# from [a03fa33d6be6ebe34d9f169e8fda2adc5cc66457]
# to [7414a9f682a105a38370ddba876dd259a532a002]
#
# patch "src/view/dialogs/RevisionManifest.h"
# from [b8fbf6ca8df3d1dbbb34cd5832d3c50f8403334b]
# to [91d7ee0135363ad5696630f8fe05953ca14eea34]
#
# patch "src/view/dialogs/SelectRevision.cpp"
# from [f9db3a6293905582be8c05cf580a0d2bc37e7608]
# to [9dda96104478d3d3b3b9f15c74b8ed4ac06c78e3]
#
# patch "src/view/dialogs/SelectRevision.h"
# from [7b0eb080172fc538ab62dfd6328914f3e584dae8]
# to [b1160998f497b55aa6a290fef42c55404db3cf52]
#
# patch "src/view/dialogs/UnaccountedRenames.cpp"
# from [3ccbb05cdd622261afd7e80dcfb0d29452a88aa9]
# to [b61c61af418700ff7fb3b7bd199cbfc73a67b065]
#
# patch "src/view/dialogs/UnaccountedRenames.h"
# from [35d7d6bf27df175ff17c1534ee81ae76a0311284]
# to [da73f6ccb228250a4fcde5c030543e46fe6256ec]
#
# patch "src/view/dialogs/UpdateWorkspace.cpp"
# from [9c46b834533239597ee91776ec1abfe9cabb422f]
# to [1eadfe28917f0207dc0009c16426af3b6a8cb602]
#
# patch "src/view/dialogs/UpdateWorkspace.h"
# from [9be3dd2b3cab3b6769fadf35865e81bd065f4f53]
# to [f01bcf1974c3ead9e8ea6edf09a6a0dd9b113267]
#
# patch "src/view/dialogs/WorkspaceDialogManager.cpp"
# from [b0ef246f9747ea8da66a59c6cd236e99028eca0b]
# to [77e476287fdaede8cb3f66fb4ae1bf27fa394899]
#
# patch "src/view/dialogs/WorkspaceDialogManager.h"
# from [31e363829c58f3e3e4c3488f158d88e5e13ba8e0]
# to [7d9e1d7d0f5afdfd347c07ddce881a92f7a6c237]
#
# patch "src/view/mainwindows/DatabaseWindow.cpp"
# from [2eaeb3de1cdce9efcb4049d3d1ef64f61f5f36bf]
# to [1b6f36a8c142ed4ab0f731b13c4c9b707870036d]
#
# patch "src/view/mainwindows/DatabaseWindow.h"
# from [a2174a941fd5af62a44699d2a36bb08c078cbe6c]
# to [b8ddd05db7728d9f61015243934b874443793b3d]
#
# patch "src/view/mainwindows/MainWindow.h"
# from [171feaed58e5a75246babdcf40797c188dfb5df0]
# to [cc7620bfdf1dc5fa47711d37f3d4229e2c83e5e6]
#
# patch "src/view/mainwindows/WorkspaceWindow.cpp"
# from [6d1c97beb8ef58c1c6567a24c57e6ae267267834]
# to [57032c33f3d551f0ea53b66b350f8cb7075f9c27]
#
# patch "src/view/mainwindows/WorkspaceWindow.h"
# from [d707e8956f801c8e6f9b2a6fe8eceb78b61de885]
# to [068de7167552a414e2d954d1ff95d920fd5a462e]
#
# patch "src/view/panels/DatabaseVariables.cpp"
# from [a3d0ea6257c7a5f4754b652db1fcde62eea842e7]
# to [8e17715d1ae3e68a26f33ffefc03577673ce7d1f]
#
# patch "src/view/panels/DatabaseVariables.h"
# from [18f5901a440cc1179edc722b1c611d1ee92c9068]
# to [4b133dedc8498f69a3029de272939505086c97ba]
#
# patch "src/view/panels/NodeInfo.cpp"
# from [427059e0d6bd2dd1a453c6b98918c05a1514d92e]
# to [725716d4a5da526c6e59ebffa7382c03fb1706de]
#
# patch "src/view/panels/NodeInfo.h"
# from [d99d10fed6ffaf7817948cac2fda0fa4120326a9]
# to [da7bfab77b9e00ce784c8fb3e0b7f6f2a8984554]
#
# patch "src/vocab.h"
# from [45f37ad58d947f6ab3e7b07d314fd62f54c5356c]
# to [6d7889ef50ac0ea2b509b5930cddfd2efc118880]
#
============================================================
--- src/model/CertList.cpp 2e39df6bfe9544ac5ac0b66e8adc75eb319f0be7
+++ src/model/CertList.cpp 2e39df6bfe9544ac5ac0b66e8adc75eb319f0be7
@@ -0,0 +1,210 @@
+/***************************************************************************
+ * Copyright (C) 2010 by Thomas Keller *
+ * address@hidden *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ ***************************************************************************/
+
+#include "CertList.h"
+
+QDateTime Cert::dateTimeValue() const
+{
+ return QDateTime::fromString(value, "yyyy-MM-ddThh:mm:ss");
+}
+
+QString Cert::plainValue() const
+{
+ return QString(value).replace(QRegExp("\\s+"), " ");
+}
+
+QString Cert::htmlValue() const
+{
+ QString val(value);
+ QStringList lines = val.replace("<", "<").split(QRegExp("(\\r\\n|\\n|\\n\\r)"));
+ QString htmlValue;
+ bool inList = false;
+ foreach (const QString & line, lines)
+ {
+ if (line.isEmpty())
+ {
+ if (inList)
+ {
+ htmlValue += "\n\n";
+ inList = false;
+ continue;
+ }
+
+ htmlValue += "
\n";
+ continue;
+ }
+ bool listStart = (0 == line.indexOf(QRegExp("^[*-]")));
+ if (listStart)
+ {
+ if (inList)
+ {
+ htmlValue += "\n";
+ }
+ else
+ {
+ inList = true;
+ htmlValue += "
\n";
+ }
+
+ htmlValue += "- " + line.mid(1).trimmed();
+ continue;
+ }
+ if (inList)
+ {
+ htmlValue += " " + line.trimmed();
+ continue;
+ }
+ htmlValue += line.trimmed() + "
\n";
+ }
+ if (inList)
+ {
+ htmlValue += " \n
\n";
+ }
+ return htmlValue
+ .replace(QRegExp("(\\b)([_])(\\w+)\\2"), "\\1\\2\\3\\2")
+ .replace(QRegExp("(\\b)([*])(\\w+)\\2"), "\\1\\2\\3\\2")
+ .replace(QRegExp("(https?://[^() ]+)"), "\\1")
+ .replace(QRegExp("\\t"), " ");
+}
+
+void CertList::add(const Cert & c)
+{
+ certs.push_back(c);
+}
+
+int CertList::size() const
+{
+ return certs.size();
+}
+
+Cert CertList::at(int pos) const
+{
+ return certs.at(pos);
+}
+
+void CertList::clear()
+{
+ certs.clear();
+ revision = QString();
+}
+
+QStringList CertList::signers() const
+{
+ QStringList signers;
+ foreach (const Cert & cert, certs)
+ {
+ if (!signers.contains(cert.key))
+ signers.push_back(cert.key);
+ }
+ return signers;
+}
+
+QList CertList::findBySigner(const QString & key = QString()) const
+{
+ QList foundCerts;
+ foreach (const Cert & cert, certs)
+ {
+ if (key.isEmpty() || key == cert.key)
+ foundCerts.push_back(cert);
+ }
+ return foundCerts;
+}
+
+QList CertList::findByName(const QString & name,
+ const QString & key = QString()) const
+{
+ QList foundCerts;
+ foreach (const Cert & cert, findBySigner(key))
+ {
+ if (cert.name != name)
+ continue;
+ foundCerts.push_back(cert);
+ }
+ return foundCerts;
+}
+
+QStringList CertList::findByNameValues(const QString & name,
+ const QString & key = QString()) const
+{
+ QStringList values;
+ QList certs = findByName(name, key);
+ foreach (const Cert & cert, certs)
+ {
+ values.push_back(cert.value);
+ }
+ return values;
+}
+
+void CertList::fill(const StanzaList & stanzas)
+{
+ foreach (const Stanza & st, stanzas)
+ {
+ Cert cert;
+ foreach (const StanzaEntry & entry, st)
+ {
+ if (entry.sym == "key")
+ {
+ I(!entry.hash.isEmpty());
+ cert.key = entry.hash;
+ continue;
+ }
+ if (entry.sym == "name")
+ {
+ I(entry.vals.size() == 1);
+ cert.name = entry.vals.at(0);
+ continue;
+ }
+ if (entry.sym == "value")
+ {
+ I(entry.vals.size() == 1);
+ cert.value = entry.vals.at(0).trimmed();
+ continue;
+ }
+ if (entry.sym == "signature")
+ {
+ I(entry.vals.size() == 1);
+ QString sig = entry.vals.at(0);
+ if (sig == "ok")
+ cert.signature = Cert::Ok;
+ else if (sig == "bad")
+ cert.signature = Cert::Bad;
+ else if (sig == "unknown")
+ cert.signature = Cert::Unknown;
+ else
+ W(QString("Unknown cert signature state '%1'.").arg(sig));
+ continue;
+ }
+ if (entry.sym == "trust")
+ {
+ I(entry.vals.size() == 1);
+ QString trust = entry.vals.at(0);
+ if (trust == "trusted")
+ cert.trust = Cert::Trusted;
+ else if (trust == "untrusted")
+ cert.trust = Cert::Untrusted;
+ else
+ W(QString("Unknown cert trust '%1'.").arg(trust));
+ continue;
+ }
+ }
+ if (cert.key.isEmpty())
+ continue;
+ add(cert);
+ }
+}
+
============================================================
--- src/model/CertList.h e3dc9f3e1a0d8f64e069a2dfaa3a3b661337c596
+++ src/model/CertList.h e3dc9f3e1a0d8f64e069a2dfaa3a3b661337c596
@@ -0,0 +1,56 @@
+/***************************************************************************
+ * Copyright (C) 2010 by Thomas Keller *
+ * address@hidden *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ ***************************************************************************/
+
+#ifndef CERT_LIST_H
+#define CERT_LIST_H
+
+#include
+
+struct Cert
+{
+ enum Trust { Trusted, Untrusted } trust;
+ enum Signature { Ok, Bad, Unknown } signature;
+ QString key;
+ QString name;
+ QString value;
+
+ QDateTime dateTimeValue() const;
+ QString plainValue() const;
+ QString htmlValue() const;
+};
+
+struct CertList
+{
+ QString revision;
+ QList certs;
+
+ void add(const Cert & c);
+ int size() const;
+ Cert at(int pos) const;
+ void clear();
+
+ QStringList signers() const;
+ QList findBySigner(const QString & key = QString()) const;
+ QList findByName(const QString & name,
+ const QString & key = QString()) const;
+ QStringList findByNameValues(const QString & name,
+ const QString & key = QString()) const;
+ void fill(const StanzaList &);
+};
+
+#endif
============================================================
--- src/monotone/MonotoneHandle.cpp ad8ecb421caa5b58372865949f76c956b326707d
+++ src/monotone/MonotoneHandle.cpp ad8ecb421caa5b58372865949f76c956b326707d
@@ -0,0 +1,229 @@
+/***************************************************************************
+ * Copyright (C) 2010 by Thomas Keller *
+ * address@hidden *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ ***************************************************************************/
+
+#include "MonotoneHandle.h"
+#include "MonotoneProcess.h"
+#include "BasicIOParser.h"
+
+MonotoneHandle::MonotoneHandle(const QString & d, Type t) : data(d), type(t) {}
+
+void MonotoneHandle::validateMonotoneHandlePtr(QString & database)
+{
+ QFile dbfile(database);
+ if (!dbfile.open(QIODevice::ReadOnly))
+ {
+ throw GuitoneException(
+ QObject::tr("Could not open database for reading: %1")
+ .arg(dbfile.errorString())
+ );
+ }
+
+ if (dbfile.read(15) != QByteArray("SQLite format 3"))
+ {
+ dbfile.close();
+ throw GuitoneException(
+ QObject::tr("Database file not an SQLite 3 database")
+ );
+ }
+
+ if (!dbfile.seek(60) || dbfile.read(4) != QByteArray("_MTN"))
+ {
+ dbfile.close();
+ throw GuitoneException(QObject::tr(
+ "SQLite database is not a monotone database or a database "
+ "of an older, unsupported version of monotone"
+ ));
+ }
+ dbfile.close();
+}
+
+void MonotoneHandle::validateWorkspacePath(QString & workspace,
+ QString & database)
+{
+ QDir tempDir(workspace);
+ I(!tempDir.exists());
+
+ bool found = false;
+ do
+ {
+ if (tempDir.cd("_MTN"))
+ {
+ tempDir.cdUp();
+ workspace = tempDir.absolutePath();
+ found = true;
+ break;
+ }
+ }
+ while (!tempDir.isRoot() && tempDir.cdUp());
+
+ if (!found)
+ {
+ throw GuitoneException(
+ QObject::tr("could not find _MTN directory")
+ );
+ }
+
+
+ QFile optionsFile(workspace + "/_MTN/options");
+ if (!optionsFile.open(QIODevice::ReadOnly | QIODevice::Text))
+ {
+ throw GuitoneException(
+ QObject::tr("could not open _MTN/options for reading")
+ );
+ }
+
+ QByteArray contents = optionsFile.readAll();
+ optionsFile.close();
+
+ if (contents.size() == 0)
+ {
+ throw GuitoneException(QObject::tr("file _MTN/options is empty"));
+ }
+
+ BasicIOParser parser(QString::fromUtf8(contents));
+ if (!parser.parse())
+ {
+ throw GuitoneException(QObject::tr("could not parse basic_io from _MTN/options"));
+ }
+
+ StanzaList stanzas = parser.getStanzas();
+ I(stanzas.size() == 1);
+ Stanza st = stanzas.at(0);
+
+ foreach (const StanzaEntry & entry, st)
+ {
+ if (entry.sym == "database")
+ {
+ I(entry.vals.size() == 1);
+ database = entry.vals.at(0);
+ break;
+ }
+ }
+
+ if (database.isEmpty())
+ {
+ throw GuitoneException(QObject::tr("could not find database for workspace"));
+ }
+}
+
+void MonotoneHandle::validateServerConnection(const QString & host)
+{
+ QStringList hostAndPort = host.split(":");
+ if (hostAndPort.size() == 1)
+ {
+ hostAndPort.append("4691");
+ }
+
+ QTCPSocket sock;
+ sock.connectToHost(hostAndPort.at(0), hostAndPort.at(1).toUInt());
+ sock.waitForConnected(5000);
+
+ if (!sock.isValid())
+ {
+ sock.disconnectFromHost();
+ if (sock.state() != QAbstractSocket::UnconnectedState)
+ sock.waitForDisconnected();
+
+ throw GuitoneException(QObject::tr(
+ "Could not connect to '%1':\n%2"
+ ).arg(pathOrURI).arg(sock.errorString()));
+ }
+
+ sock.disconnectFromHost();
+ if (sock.state() != QAbstractSocket::UnconnectedState)
+ sock.waitForDisconnected();
+}
+
+void MonotoneHandle::resolveDatabaseAlias(QString & database)
+{
+ QRegExp rx("^:([^\\/:]+)$");
+ if (rx.indexIn(database))
+ {
+ QString alias = rx.cap(1);
+
+ QString output;
+ QStringList args;
+ args << "au" << "lua"
+ << "get_default_database_locations";
+
+ if (MonotoneProcess::singleRun(args, QString(), output))
+ {
+ QRegExp rx("\\[\\d+\\] = \"([^\"]+)\";");
+
+ int pos = 0;
+ while ((pos = rx.indexIn(str, pos)) != -1)
+ {
+ pos += rx.matchedLength();
+ QString location = rx.cap(1);
+
+ QFileInfo finfo(location + "/" + alias);
+ if (finfo.isFile())
+ {
+ database = finfo.canonicalFilePath();
+ break;
+ }
+ }
+ }
+ }
+}
+
+MonotoneHandlePtr MonotoneHandle::create(const QString & pathOrURI)
+{
+ QString cleanedPathOrURI(pathOrURI.trimmed());
+
+ if (cleanedPathOrURI.isEmpty())
+ {
+ throw GuitoneException(QObject::tr("Path / URI is empty"));
+ }
+
+ Type type;
+
+ QRegExp rx("^mtn://([\\w\\-]+(?:\\.[\\w\\-]+)*(?::\\d+)?)$");
+ if (rx.indexIn(cleanedPathOrURI))
+ {
+ cleanedPathOrURI = rx.cap(1);
+ validateServerConnection(cleanedPathOrURI);
+
+ type = server_handle;
+ }
+ else
+ {
+ QFileInfo finfo(cleanedPathOrURI);
+ if (finfo.isDir())
+ {
+ cleanedPathOrURI = finfo.canonicalFilePath();
+
+ QString database;
+ validateWorkspace(cleanedPathOrURI, database);
+ resolveDatabaseAlias(database);
+ validateDatabase(database);
+
+ type = workspace_handle;
+ }
+ else
+ {
+ resolveDatabaseAlias(cleanedPathOrURI);
+ validateDatabase(cleanedPathOrURI);
+
+ type = database_handle;
+ }
+ }
+
+ return MonotoneHandlePtr(new MonotoneHandle(cleanedPathOrURI, type));
+}
+
============================================================
--- src/monotone/MonotoneHandle.h bd2012e7f3e4d0a01b5278769a3f5b2a3f286c15
+++ src/monotone/MonotoneHandle.h bd2012e7f3e4d0a01b5278769a3f5b2a3f286c15
@@ -0,0 +1,43 @@
+/***************************************************************************
+ * Copyright (C) 2010 by Thomas Keller *
+ * address@hidden *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ ***************************************************************************/
+
+#ifndef MONOTONE_HANDLE_H
+#define MONOTONE_HANDLE_H
+
+#include "vocab.h"
+
+class MonotoneHandle
+{
+ QString data;
+ MonotoneHandle(const QString &, Type);
+
+ static void validateWorkspacePath(QString &, QString &);
+ static void validateMonotoneHandlePtr(const QString &);
+ static void validateServerConnection(const QString &);
+ static void resolveDatabaseAlias(QString &);
+
+public:
+ enum Type { workspace_handle, database_handle, server_handle } type;
+
+ Type getType() const { return type; }
+ QString getData() const { return data; }
+
+ static MonotoneHandlePtr create(const QString &);
+};
+
+#endif
============================================================
--- src/view/dialogs/ServerDialogManager.cpp 1220d22709e882f2745861adfc8d7408189b00e5
+++ src/view/dialogs/ServerDialogManager.cpp 1220d22709e882f2745861adfc8d7408189b00e5
@@ -0,0 +1,390 @@
+/***************************************************************************
+ * Copyright (C) 2010 by Thomas Keller *
+ * address@hidden *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ ***************************************************************************/
+
+#include "ServerDialogManager.h"
+#include "vocab.h"
+
+ServerDialogManager::ServerDialogManager(QWidget * parent)
+ : DialogManager(parent), changesetBrowser(0),
+ checkoutRevision(0), fileDiff(0), fileHistory(0), generateKeypair(0),
+ netsync(0), keyManagement(0), revisionDiff(0),
+ revisionManifest(0), selectRevision(0), newProjectSetup(0),
+ annotateFile(0), createCert(0)
+{}
+
+ServerDialogManager::~ServerDialogManager()
+{
+ cleanup();
+}
+
+void ServerDialogManager::cleanup()
+{
+ if (changesetBrowser) { delete changesetBrowser; changesetBrowser = 0; }
+ if (checkoutRevision) { delete checkoutRevision; checkoutRevision = 0; }
+ if (fileDiff) { delete fileDiff; fileDiff = 0; }
+ if (fileHistory) { delete fileHistory; fileHistory = 0; }
+ if (generateKeypair) { delete generateKeypair; generateKeypair = 0; }
+ if (netsync) { delete netsync; netsync = 0; }
+ if (keyManagement) { delete keyManagement; keyManagement = 0; }
+ if (revisionDiff) { delete revisionDiff; revisionDiff = 0; }
+ if (revisionManifest) { delete revisionManifest; revisionManifest = 0; }
+ if (selectRevision) { delete selectRevision; selectRevision = 0; }
+ if (newProjectSetup) { delete newProjectSetup; newProjectSetup = 0; }
+ if (annotateFile) { delete annotateFile; annotateFile = 0; }
+ if (createCert) { delete createCert; createCert = 0; }
+}
+
+void ServerDialogManager::closeAllDialogs()
+{
+ if (changesetBrowser) changesetBrowser->close();
+ if (checkoutRevision) checkoutRevision->close();
+ if (fileDiff) fileDiff->close();
+ if (fileHistory) fileHistory->close();
+ if (generateKeypair) generateKeypair->close();
+ if (netsync) netsync->close();
+ if (keyManagement) keyManagement->close();
+ if (revisionDiff) revisionDiff->close();
+ if (revisionManifest) revisionManifest->close();
+ if (selectRevision) selectRevision->close();
+ if (newProjectSetup) newProjectSetup->close();
+ if (annotateFile) annotateFile->close();
+ if (createCert) createCert->close();
+
+ DialogManager::closeAllDialogs();
+}
+
+void ServerDialogManager::init(const MonotoneHandlePtr & handle)
+{
+ monotoneHandle = handle;
+ cleanup();
+}
+
+void ServerDialogManager::showChangesetBrowser()
+{
+ if (!changesetBrowser)
+ {
+ changesetBrowser = new ChangesetBrowser(parentWidget(), monotoneHandle);
+
+ connect(
+ changesetBrowser, SIGNAL(certCreated(const QString &, const QString &,
+ const QString &, const QString &)),
+ this, SIGNAL(certCreated(const QString &, const QString &,
+ const QString &, const QString &))
+ );
+
+ connect(
+ changesetBrowser, SIGNAL(revisionManifest(const QString &)),
+ this, SLOT(showRevisionManifest(const QString &))
+ );
+
+ connect(
+ changesetBrowser, SIGNAL(diffRevision(const QString &, const QString &, const QString &)),
+ this, SLOT(showRevisionDiff(const QString &, const QString &, const QString &))
+ );
+
+ connect(
+ changesetBrowser, SIGNAL(diffFile(const QString &, const QString &, const QString &)),
+ this, SLOT(showFileDiff(const QString &, const QString &, const QString &))
+ );
+
+ connect(
+ changesetBrowser, SIGNAL(annotateFile(const QString &, const QString &)),
+ this, SLOT(showAnnotation(const QString &, const QString &))
+ );
+
+ connect(
+ changesetBrowser, SIGNAL(createCert(const QString &, const QString &)),
+ this, SLOT(showCreateCert(const QString &, const QString &))
+ );
+
+ connect(
+ this, SIGNAL(certCreated(const QString &, const QString &,
+ const QString &, const QString &)),
+ changesetBrowser, SLOT(handleCertCreation(const QString &, const QString &,
+ const QString &, const QString &))
+ );
+ }
+
+ changesetBrowser->init();
+
+ showDialog(changesetBrowser);
+}
+
+void ServerDialogManager::showCheckoutRevision()
+{
+ if (!checkoutRevision)
+ {
+ checkoutRevision = new CheckoutRevision(parentWidget(), monotoneHandle);
+
+ connect(
+ checkoutRevision, SIGNAL(selectRevisionFromSelector(const QString &)),
+ this, SLOT(showSelectRevision(const QString &))
+ );
+
+ // delegate this further
+ connect(
+ checkoutRevision, SIGNAL(revisionCheckedOut(const QString &)),
+ this, SIGNAL(revisionCheckedOut(const QString &))
+ );
+
+ connect(
+ this, SIGNAL(revisionSelected(const QString &)),
+ checkoutRevision, SLOT(setSelectedRevision(const QString &))
+ );
+ }
+
+ showDialog(checkoutRevision);
+}
+
+void ServerDialogManager::showFileDiff(const QString & file, const QString & base, const QString & target)
+{
+ if (!fileDiff)
+ {
+ fileDiff = new FileDiff(parentWidget());
+ }
+
+ fileDiff->forDatabase(monotoneHandle, file, base, target);
+ showDialog(fileDiff);
+}
+
+void ServerDialogManager::showFileHistory(const QString & file, const QString & startRevision)
+{
+ if (!fileHistory)
+ {
+ fileHistory = new FileHistory(parentWidget(), monotoneHandle);
+
+ connect(
+ fileHistory, SIGNAL(fileDiff(const QString &, const QString &, const QString &)),
+ this, SLOT(showFileDiff(const QString &, const QString &, const QString &))
+ );
+ }
+
+ fileHistory->readHistory(file, startRevision);
+ showDialog(fileHistory);
+}
+
+void ServerDialogManager::showGenerateKeypair()
+{
+ if (!generateKeypair)
+ {
+ generateKeypair = new GenerateKeypair(parentWidget(), monotoneHandle);
+
+ connect(
+ generateKeypair, SIGNAL(keypairGenerated(const QString &)),
+ this, SIGNAL(keypairGenerated(const QString &))
+ );
+ }
+
+ showDialog(generateKeypair);
+}
+
+void ServerDialogManager::showNetsync()
+{
+ if (!netsync)
+ {
+ netsync = new Netsync(parentWidget(), monotoneHandle);
+ }
+
+ netsync->init();
+ showDialog(netsync);
+}
+
+void ServerDialogManager::showKeyManagement()
+{
+ if (!keyManagement)
+ {
+ keyManagement = new KeyManagement(parentWidget(), monotoneHandle);
+
+ connect(
+ keyManagement, SIGNAL(generateKeypair()),
+ this, SLOT(showGenerateKeypair())
+ );
+
+ connect(
+ keyManagement, SIGNAL(changeKeyPassword(const QString &)),
+ this, SLOT(showChangeKeyPassword(const QString &))
+ );
+
+ connect(
+ this, SIGNAL(keyPasswordChanged(const QString &)),
+ keyManagement, SLOT(readKeys())
+ );
+
+ connect(
+ this, SIGNAL(keypairGenerated(const QString &)),
+ keyManagement, SLOT(readKeys())
+ );
+ }
+
+ keyManagement->readKeys();
+ showDialog(keyManagement);
+}
+
+void ServerDialogManager::showRevisionDiff(const QString & path, const QString & base, const QString & target)
+{
+ if (!revisionDiff)
+ {
+ revisionDiff = new RevisionDiff(parentWidget());
+
+ connect(
+ revisionDiff, SIGNAL(fileDiff(const QString &, const QString &, const QString &)),
+ this, SLOT(showFileDiff(const QString &, const QString &, const QString &))
+ );
+ }
+
+ revisionDiff->forDatabase(monotoneHandle, path, base, target);
+ showDialog(revisionDiff);
+}
+
+void ServerDialogManager::showRevisionManifest(const QString & revision)
+{
+ if (!revisionManifest)
+ {
+ revisionManifest = new RevisionManifest(parentWidget(), monotoneHandle);
+
+ connect(
+ revisionManifest, SIGNAL(fileHistory(const QString &, const QString &)),
+ this, SLOT(showFileHistory(const QString &, const QString &))
+ );
+
+ connect(
+ revisionManifest, SIGNAL(annotateFile(const QString &, const QString &)),
+ this, SLOT(showAnnotation(const QString &, const QString &))
+ );
+ }
+
+ revisionManifest->readManifest(revision);
+ showDialog(revisionManifest);
+}
+
+void ServerDialogManager::showSelectRevision()
+{
+ showSelectRevision(QString());
+}
+
+void ServerDialogManager::showSelectRevision(const QString & selector)
+{
+ if (!selectRevision)
+ {
+ selectRevision = new SelectRevision(parentWidget(), monotoneHandle);
+
+ connect(
+ selectRevision, SIGNAL(revisionDiff(const QString &, const QString &, const QString &)),
+ this, SLOT(showRevisionDiff(const QString &, const QString &, const QString &))
+ );
+
+ connect(
+ selectRevision, SIGNAL(revisionManifest(const QString &)),
+ this, SLOT(showRevisionManifest(const QString &))
+ );
+
+ connect(
+ selectRevision, SIGNAL(revisionSelected(const QString &)),
+ this, SIGNAL(revisionSelected(const QString &))
+ );
+ }
+
+ if (selector.size() > 0)
+ {
+ selectRevision->queryRevisions(selector);
+ }
+
+ showDialog(selectRevision);
+}
+
+void ServerDialogManager::showNewProjectSetup()
+{
+ if (!newProjectSetup)
+ {
+ newProjectSetup = new NewProjectSetup(parentWidget(), monotoneHandle);
+
+ // delegate this further
+ connect(
+ newProjectSetup, SIGNAL(newProjectCreated(const QString &)),
+ this, SIGNAL(newProjectCreated(const QString &))
+ );
+ }
+
+ newProjectSetup->init();
+ showDialog(newProjectSetup);
+}
+
+void ServerDialogManager::showAnnotation(const QString & rev, const QString & file)
+{
+ if (!annotateFile)
+ {
+ annotateFile = new AnnotateFile(parentWidget(), monotoneHandle);
+
+ connect(
+ annotateFile, SIGNAL(selectRevision()),
+ this, SLOT(showSelectRevision())
+ );
+
+ connect(
+ this, SIGNAL(revisionSelected(const QString &)),
+ annotateFile, SLOT(setSelectedRevision(const QString &))
+ );
+
+ connect(
+ annotateFile, SIGNAL(revisionManifest(const QString &)),
+ this, SLOT(showRevisionManifest(const QString &))
+ );
+
+ connect(
+ annotateFile, SIGNAL(revisionDiff(const QString &, const QString &, const QString &)),
+ this, SLOT(showRevisionDiff(const QString &, const QString &, const QString &))
+ );
+
+ connect(
+ annotateFile, SIGNAL(fileDiff(const QString &, const QString &, const QString &)),
+ this, SLOT(showFileDiff(const QString &, const QString &, const QString &))
+ );
+ }
+
+ annotateFile->read(rev, file);
+ showDialog(annotateFile);
+}
+
+void ServerDialogManager::showCreateCert(const QString & rev, const QString & certName)
+{
+ if (!createCert)
+ {
+ createCert = new CreateCert(parentWidget(), monotoneHandle);
+
+ connect(
+ createCert, SIGNAL(selectRevision()),
+ this, SLOT(showSelectRevision())
+ );
+
+ connect(
+ this, SIGNAL(revisionSelected(const QString &)),
+ createCert, SLOT(setSelectedRevision(const QString &))
+ );
+
+ connect(
+ createCert, SIGNAL(certCreated(const QString &, const QString &,
+ const QString &, const QString &)),
+ this, SIGNAL(certCreated(const QString &, const QString &,
+ const QString &, const QString &))
+ );
+ }
+
+ createCert->init(rev, certName);
+ showDialog(createCert);
+}
+
============================================================
--- src/view/dialogs/ServerDialogManager.h 7cec8953b0e2e9e65adeed91c4fadf141bbccca6
+++ src/view/dialogs/ServerDialogManager.h 7cec8953b0e2e9e65adeed91c4fadf141bbccca6
@@ -0,0 +1,93 @@
+/***************************************************************************
+ * Copyright (C) 2010 by Thomas Keller *
+ * address@hidden *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ ***************************************************************************/
+
+#ifndef SERVER_DIALOG_MANAGER_H
+#define SERVER_DIALOG_MANAGER_H
+
+#include "DialogManager.h"
+#include "ChangesetBrowser.h"
+#include "CheckoutRevision.h"
+#include "FileDiff.h"
+#include "FileHistory.h"
+#include "GenerateKeypair.h"
+#include "Netsync.h"
+#include "KeyManagement.h"
+#include "RevisionDiff.h"
+#include "RevisionManifest.h"
+#include "SelectRevision.h"
+#include "NewProjectSetup.h"
+#include "AnnotateFile.h"
+#include "CreateCert.h"
+
+class ServerDialogManager : public DialogManager
+{
+ Q_OBJECT
+public:
+ ServerDialogManager(QWidget *);
+ ~ServerDialogManager();
+
+ void init(const MonotoneHandlePtr &);
+ virtual void closeAllDialogs();
+
+ //! delegated signals
+signals:
+ void revisionSelected(const QString &);
+ void revisionCheckedOut(const QString &);
+ void newProjectCreated(const QString &);
+ void keypairGenerated(const QString &);
+ void certCreated(const QString &, const QString &,
+ const QString &, const QString &);
+
+public slots:
+ void showChangesetBrowser();
+ void showCheckoutRevision();
+ virtual void showFileDiff(const QString & file, const QString & base, const QString & target);
+ void showFileHistory(const QString & file, const QString & startRevision);
+ void showGenerateKeypair();
+ void showNetsync();
+ void showNewProjectSetup();
+ void showKeyManagement();
+ virtual void showRevisionDiff(const QString & path, const QString & base, const QString & target);
+ void showRevisionManifest(const QString & revision);
+ void showSelectRevision();
+ void showSelectRevision(const QString & selector);
+ void showAnnotation(const QString &, const QString &);
+ void showCreateCert(const QString & rev, const QString & certName = QString());
+
+protected:
+ ChangesetBrowser * changesetBrowser;
+ CheckoutRevision * checkoutRevision;
+ FileDiff * fileDiff;
+ FileHistory * fileHistory;
+ GenerateKeypair * generateKeypair;
+ Netsync * netsync;
+ KeyManagement * keyManagement;
+ RevisionDiff * revisionDiff;
+ RevisionManifest * revisionManifest;
+ SelectRevision * selectRevision;
+ NewProjectSetup * newProjectSetup;
+ AnnotateFile * annotateFile;
+ CreateCert * createCert;
+
+private:
+ void cleanup();
+
+ MonotoneHandlePtr monotoneHandle;
+};
+
+#endif
============================================================
--- src/view/mainwindows/ServerWindow.cpp cba3ef1f19831c59332d58d68f7c14457497218d
+++ src/view/mainwindows/ServerWindow.cpp cba3ef1f19831c59332d58d68f7c14457497218d
@@ -0,0 +1,122 @@
+/***************************************************************************
+ * Copyright (C) 2010 by Thomas Keller *
+ * address@hidden *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ ***************************************************************************/
+
+#include "ServerWindow.h"
+#include "ServerMenuBar.h"
+#include "ServerDialogManager.h"
+#include "GuitoneCore.h"
+#include "Settings.h"
+
+#include
+
+ServerWindow::ServerWindow() : MainWindow(),
+ loadedDbLabel(0), revisionBrowser(0), netsyncDialog(0)
+{
+ setObjectName("ServerWindow");
+}
+
+ServerWindow::~ServerWindow()
+{
+ if (loadedServerLabel) delete loadedServerLabel;
+ if (revisionBrowser) delete revisionBrowser;
+ if (netsyncDialog) delete netsyncDialog;
+}
+
+void ServerWindow::init()
+{
+ if (!menuBar)
+ {
+ menuBar = new ServerMenuBar(this);
+ }
+
+ if (!dialogManager)
+ {
+ dialogManager = new ServerDialogManager(this);
+ }
+
+ connect(
+ menuBar, SIGNAL(showNetsync()),
+ dialogManager, SLOT(showNetsync())
+ );
+
+ connect(
+ menuBar, SIGNAL(showChangesetBrowser()),
+ dialogManager, SLOT(showChangesetBrowser())
+ );
+
+ MainWindow::init();
+}
+
+void ServerWindow::setup()
+{
+ //
+ // UI stuff
+ //
+ QWidget * centralWidget = new QWidget(this);
+
+ QVBoxLayout * vboxLayout = new QVBoxLayout(centralWidget);
+ QGroupBox *loadedServerGroup = new QGroupBox(tr("Connected to server"), centralWidget);
+ vboxLayout->addWidget(loadedDbGroup);
+
+ QVBoxLayout * vboxLayout1 = new QVBoxLayout(loadedServerGroup);
+ loadedServerLabel = new QLabel(tr("not connected"), this);
+ vboxLayout1->addWidget(loadedServerLabel);
+
+ QGroupBox * actionGroup = new QGroupBox(tr("Actions"), centralWidget);
+ QVBoxLayout * vboxLayout2 = new QVBoxLayout(actionGroup);
+ vboxLayout->addWidget(actionGroup);
+
+ QHBoxLayout * hboxLayout = new QHBoxLayout();
+
+ revisionBrowser = new QPushButton(tr("Revision browser"), actionGroup);
+ hboxLayout->addWidget(revisionBrowser);
+ netsyncDialog = new QPushButton(tr("Network synchronisation"), actionGroup);
+ hboxLayout->addWidget(netsyncDialog);
+
+ vboxLayout2->addLayout(hboxLayout);
+
+ connect(
+ revisionBrowser, SIGNAL(clicked()),
+ dialogManager, SLOT(showChangesetBrowser())
+ );
+
+ connect(
+ netsyncDialog, SIGNAL(clicked()),
+ dialogManager, SLOT(showNetsync())
+ );
+
+ setCentralWidget(centralWidget);
+}
+
+void ServerWindow::load(const MonotoneHandlePtr & handle)
+{
+ I(handle->getType() == MonotoneHandle::server_handle);
+
+ APP->manager()->getThread(handle);
+
+ monotoneHandle = handle;
+
+ loadedServerLabel->setText(handle->getData());
+
+ setWindowTitle(
+ tr("%1 - server mode - guitone").arg(handle->getData())
+ );
+
+ reinterpret_cast(dialogManager)->init(handle);
+}
+
============================================================
--- src/view/mainwindows/ServerWindow.h 7887daf2f323b16802f47ee94d495955e927bdd5
+++ src/view/mainwindows/ServerWindow.h 7887daf2f323b16802f47ee94d495955e927bdd5
@@ -0,0 +1,46 @@
+/***************************************************************************
+ * Copyright (C) 2010 by Thomas Keller *
+ * address@hidden *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ ***************************************************************************/
+
+#ifndef SERVERWINDOW_H
+#define SERVERWINDOW_H
+
+#include "vocab.h"
+#include "MainWindow.h"
+
+#include
+
+class ServerWindow : public MainWindow
+{
+ Q_OBJECT
+public:
+ ServerWindow();
+ virtual ~ServerWindow();
+
+ virtual void init();
+ virtual void setup();
+ virtual void load(const MonotoneHandlePtr &);
+
+protected:
+ MonotoneHandlePtr monotoneHandle;
+
+ QLabel * loadedServerLabel;
+ QPushButton * revisionBrowser;
+ QPushButton * netsyncDialog;
+};
+
+#endif
============================================================
--- src/view/widgets/ServerMenuBar.cpp 6f89a96a6a448cd8cd18987593027a2e60e65209
+++ src/view/widgets/ServerMenuBar.cpp 6f89a96a6a448cd8cd18987593027a2e60e65209
@@ -0,0 +1,51 @@
+/***************************************************************************
+ * Copyright (C) 2010 by Thomas Keller *
+ * address@hidden *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ ***************************************************************************/
+
+#include "ServerMenuBar.h"
+
+ServerMenuBar::ServerMenuBar(QWidget * parent) : MenuBar(parent)
+{
+ //
+ // The Server menu
+ //
+ actionNetsync = new QAction(tr("Network synchronisation"), this);
+ actionNetsync->setShortcut(tr("F5"));
+ actionChangeset_browser = new QAction(tr("Changeset browser"), this);
+ actionChangeset_browser->setShortcut(tr("Ctrl+B"));
+
+ menuServer = new QMenu(tr("Server"), this);
+
+ menuServer->addAction(actionNetsync);
+ menuServer->addAction(actionChangeset_browser);
+
+ // insert the menu before the Window menu
+ insertMenu(menuWindow->menuAction(), menuServer);
+
+ connect(
+ actionNetsync, SIGNAL(triggered()),
+ this, SIGNAL(showNetsync())
+ );
+
+ connect(
+ actionChangeset_browser, SIGNAL(triggered()),
+ this, SIGNAL(showChangesetBrowser())
+ );
+}
+
+ServerMenuBar::~ServerMenuBar() {}
+
============================================================
--- src/view/widgets/ServerMenuBar.h 6acd250edce0886ff7bb98e71366b74dfaecb58c
+++ src/view/widgets/ServerMenuBar.h 6acd250edce0886ff7bb98e71366b74dfaecb58c
@@ -0,0 +1,43 @@
+/***************************************************************************
+ * Copyright (C) 2010 by Thomas Keller *
+ * address@hidden *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation, either version 3 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program. If not, see . *
+ ***************************************************************************/
+
+#ifndef SERVER_MENU_BAR_H
+#define SERVER_MENU_BAR_H
+
+#include "MenuBar.h"
+
+class ServerMenuBar : public MenuBar
+{
+ Q_OBJECT
+public:
+ ServerMenuBar(QWidget *);
+ ~ServerMenuBar();
+
+signals:
+ void showNetsync();
+ void showChangesetBrowser();
+
+protected:
+ QAction * actionNetsync;
+ QAction * actionChangeset_browser;
+
+ QMenu * menuServer;
+};
+
+#endif
+
============================================================
--- res/forms/dialogs/open_prompt.ui 13dfa418269f3bd5244fcac23ba8098a26720c70
+++ res/forms/dialogs/open_prompt.ui d03d1fa4d28bec1f2eae963e36f3e11e4049482e
@@ -1,70 +1,71 @@
-
+
+
OpenPromptDialog
-
-
+
+
Qt::ApplicationModal
-
+
true
-
+
0
0
- 560
- 500
+ 491
+ 517
-
-
+
+
0
0
-
+
guitone
-
+
../../../../.designer/backup../../../../.designer/backup
-
+
-
-
-
+
+
Create Database
-
+
-
-
+
-
-
-
+
+
300
0
-
+
true
-
+
Create a new monotone database as starting point for a
new project or to pull changes from other nodes into.
-
+
false
-
-
-
+
+
Qt::Horizontal
-
+
40
20
@@ -73,17 +74,17 @@ new project or to pull changes from othe
-
-
-
-
+
+
+
0
0
-
+
Create...
-
+
false
@@ -94,43 +95,43 @@ new project or to pull changes from othe
-
-
-
+
+
Open Database
-
+
-
-
-
+
+
true
-
+
Opens an existing monotone database to browse revisions, files and metadata.
If you like to checkout a new workspace, open a database first and then use
-"Checkout revision" in the "Database" menu.
+"Checkout revision" in the "Database" menu.
-
+
Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
+
false
-
+
5
-
-
+
-
-
-
+
+
false
-
-
+
Recent databases...
@@ -138,10 +139,10 @@ If you like to checkout a new workspace,
-
-
+
Qt::Horizontal
-
+
20
40
@@ -150,17 +151,17 @@ If you like to checkout a new workspace,
-
-
-
-
+
+
+
0
0
-
+
Browse...
-
+
false
@@ -171,45 +172,45 @@ If you like to checkout a new workspace,
-
-
-
+
+
Open Workspace
-
+
-
-
-
+
+
true
-
+
Opens an existing workspace directory.
If you previously checked out a workspace, use this to manage it.
-
+
Qt::AutoText
-
+
Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
-
+
false
-
+
5
-
-
+
-
-
-
+
+
false
-
-
+
Recent workspaces...
@@ -217,10 +218,10 @@ If you previously checked out a workspac
-
-
+
Qt::Horizontal
-
+
20
40
@@ -229,17 +230,17 @@ If you previously checked out a workspac
-
-
-
-
+
+
+
0
0
-
+
Browse...
-
+
false
@@ -250,33 +251,108 @@ If you previously checked out a workspac
-
-
+
+
+ Connect to Server
+
+
+
-
+
+
+
+ true
+
+
+
+ Connects to a remote server to browse revisions, files and metadata.
+
+
+ Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop
+
+
+ false
+
+
+ 5
+
+
+
+ -
+
+
-
+
+
+ false
+
+
-
+
+ Recent connections...
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ New connection...
+
+
+ false
+
+
+
+
+
+
+
+
+ -
+
-
-
-
+
+
About
-
+
false
-
-
-
+
+
Preferences
-
+
false
-
-
+
Qt::Horizontal
-
+
40
20
@@ -285,8 +361,8 @@ If you previously checked out a workspac
-
-
-
+
+
Quit
@@ -296,7 +372,7 @@ If you previously checked out a workspac
-
+
============================================================
--- sources.pri 2f08c68c82081c23e985389beb9dac6e6eb6fc21
+++ sources.pri cefb814a1688136f1b9e3c5d966a1caa44412cf7
@@ -17,6 +17,7 @@ HEADERS = src/view/widgets/TreeView.h \
src/view/widgets/MenuBar.h \
src/view/widgets/DatabaseMenuBar.h \
src/view/widgets/WorkspaceMenuBar.h \
+ src/view/widgets/ServerMenuBar.h \
src/view/widgets/ToolBox.h \
src/view/widgets/SearchInput.h \
src/view/widgets/SizeableLabel.h \
@@ -25,10 +26,12 @@ HEADERS = src/view/widgets/TreeView.h \
src/view/mainwindows/MainWindow.h \
src/view/mainwindows/WorkspaceWindow.h \
src/view/mainwindows/DatabaseWindow.h \
+ src/view/mainwindows/ServerWindow.h \
src/view/dialogs/Dialog.h \
src/view/dialogs/DialogManager.h \
src/view/dialogs/WorkspaceDialogManager.h \
src/view/dialogs/DatabaseDialogManager.h \
+ src/view/dialogs/ServerDialogManager.h \
src/view/dialogs/ApplicationUpdate.h \
src/view/dialogs/SelectRevision.h \
src/view/dialogs/UpdateWorkspace.h \
@@ -62,6 +65,7 @@ HEADERS = src/view/widgets/TreeView.h \
src/monotone/WorkspaceCommitter.h \
src/monotone/MonotoneThread.h \
src/monotone/MonotoneManager.h \
+ src/monotone/MonotoneHandle.h \
src/monotone/MonotoneUtil.h \
src/monotone/MonotoneProcess.h \
src/monotone/MonotoneResourceFile.h \
@@ -115,6 +119,7 @@ SOURCES += src/view/widgets/TreeView.cpp
src/view/widgets/MenuBar.cpp \
src/view/widgets/DatabaseMenuBar.cpp \
src/view/widgets/WorkspaceMenuBar.cpp \
+ src/view/widgets/ServerMenuBar.cpp \
src/view/widgets/ToolBox.cpp \
src/view/widgets/SearchInput.cpp \
src/view/widgets/SizeableLabel.cpp \
@@ -123,10 +128,12 @@ SOURCES += src/view/widgets/TreeView.cpp
src/view/mainwindows/MainWindow.cpp \
src/view/mainwindows/WorkspaceWindow.cpp \
src/view/mainwindows/DatabaseWindow.cpp \
+ src/view/mainwindows/ServerWindow.cpp \
src/view/dialogs/Dialog.cpp \
src/view/dialogs/DialogManager.cpp \
src/view/dialogs/WorkspaceDialogManager.cpp \
src/view/dialogs/DatabaseDialogManager.cpp \
+ src/view/dialogs/ServerDialogManager.cpp \
src/view/dialogs/ApplicationUpdate.cpp \
src/view/dialogs/SelectRevision.cpp \
src/view/dialogs/UpdateWorkspace.cpp \
@@ -160,6 +167,7 @@ SOURCES += src/view/widgets/TreeView.cpp
src/monotone/WorkspaceCommitter.cpp \
src/monotone/MonotoneThread.cpp \
src/monotone/MonotoneManager.cpp \
+ src/monotone/MonotoneHandle.cpp \
src/monotone/MonotoneUtil.cpp \
src/monotone/MonotoneProcess.cpp \
src/monotone/MonotoneResourceFile.cpp \
============================================================
--- src/GuitoneStandalone.cpp c18d92182a40b7dd4d82476a3a8b69ce36d285c9
+++ src/GuitoneStandalone.cpp a0119c50ce85d5ae9f1c4ce9fea53a98175ecf0b
@@ -19,7 +19,7 @@
#include "GuitoneStandalone.h"
#include "WorkspaceWindow.h"
#include "DatabaseWindow.h"
-#include "CreateDatabase.h"
+#include "ServerWindow.h"
#include "Settings.h"
#include
@@ -105,6 +105,11 @@ void GuitoneStandalone::loadSomething()
);
connect(
+ openPrompt, SIGNAL(connectToServer(const QString &)),
+ this, SLOT(connectToServer(const QString &))
+ );
+
+ connect(
openPrompt, SIGNAL(quitApp()),
this, SLOT(quit())
);
@@ -112,19 +117,19 @@ void GuitoneStandalone::loadSomething()
openPrompt->show();
}
-bool GuitoneStandalone::tryLoadSomething(const QString & path)
+bool GuitoneStandalone::tryLoadSomething(const QString & pathOrURI)
{
bool loaded = true;
try
{
- loadFromPath(path);
+ load(pathOrURI);
}
catch (GuitoneException & e)
{
- W(QString("loading of '%1' failed: %2").arg(path).arg(e.what()));
+ W(QString("loading of '%1' failed: %2").arg(pathOrURI).arg(e.what()));
loaded = false;
}
- D(QString("loading of '%1' succeeded").arg(path));
+ D(QString("loading of '%1' succeeded").arg(pathOrURI));
return loaded;
}
@@ -178,40 +183,36 @@ bool GuitoneStandalone::event(QEvent * e
return eaten;
}
-void GuitoneStandalone::loadFromPath(const QString & path)
+void GuitoneStandalone::load(const QString & pathOrURI)
{
QMutexLocker locker(&lock);
- QString canonicalPath(path);
+ MainWindow * wnd = 0;
try
{
- QFileInfo fileInfo(path);
- if (!fileInfo.exists())
- throw GuitoneException(tr("Non-existant path '%1'").arg(path));
+ MonotoneHandlePtr handle = MonotoneHandle::create(pathOrURI);
- canonicalPath = fileInfo.canonicalFilePath();
+ switch (handle->getType())
+ {
+ case MonotoneHandle::database_handle:
+ wnd = new DatabaseWindow();
+ Settings::addItemToList("RecentDatabaseList", handle->getData(), 5);
+ break;
+ case MonotoneHandle::workspace_handle:
+ wnd = new WorkspaceWindow();
+ Settings::addItemToList("RecentWorkspaceList", handle->getData(), 5);
+ break;
+ case MonotoneHandle::server_handle:
+ wnd = new ServerWindow();
+ Settings::addItemToList("RecentServerList", handle->getData(), 5);
+ break;
+ default:
+ I(false);
+ }
- MainWindow * wnd;
-
- if (fileInfo.isDir())
- wnd = new WorkspaceWindow();
- else if (fileInfo.isFile())
- wnd = new DatabaseWindow();
- else
- throw GuitoneException(tr("Path is neither a file nor a directory"));
-
wnd->init();
+ wnd->load(handle);
- try
- {
- wnd->load(canonicalPath);
- }
- catch (GuitoneException & e)
- {
- delete wnd;
- throw e;
- }
-
openWindows.append(wnd);
ensureCascadedWindowPlacement(wnd);
wnd->show();
@@ -219,11 +220,12 @@ void GuitoneStandalone::loadFromPath(con
triggerUpdateWindowList();
emit updateRecentLists();
}
-
catch (GuitoneException & e)
{
- Settings::removeItemFromList("RecentWorkspaceList", canonicalPath);
- Settings::removeItemFromList("RecentDatabaseList", canonicalPath);
+ if (wnd) delete wnd;
+ Settings::removeItemFromList("RecentWorkspaceList", pathOrURI);
+ Settings::removeItemFromList("RecentDatabaseList", pathOrURI);
+ Settings::removeItemFromList("RecentConnectionList", pathOrURI);
emit updateRecentLists();
throw e;
}
@@ -233,7 +235,7 @@ void GuitoneStandalone::loadWorkspace(co
{
try
{
- loadFromPath(path);
+ load(path);
}
catch (GuitoneException & e)
{
@@ -261,7 +263,7 @@ void GuitoneStandalone::loadDatabase(con
{
try
{
- loadFromPath(path);
+ load(path);
}
catch (GuitoneException & e)
{
@@ -285,6 +287,34 @@ void GuitoneStandalone::loadDatabase(con
openPrompt->hide();
}
+void GuitoneStandalone::connectToServer(const QString & server)
+{
+ try
+ {
+ load(server);
+ }
+ catch (GuitoneException & e)
+ {
+ QMessageBox::critical(
+ NULL,
+ tr("Failed to connect to server"),
+ tr("The server connection could not be established:\n%1").arg(e.what()),
+ QMessageBox::Ok
+ );
+
+ if (openPrompt)
+ {
+ openPrompt->setEnabled(true);
+ openPrompt->raise();
+ }
+
+ return;
+ }
+
+ if (openPrompt)
+ openPrompt->hide();
+}
+
void GuitoneStandalone::windowClosed(MainWindow * wnd)
{
QMutexLocker locker(&lock);
============================================================
--- src/GuitoneStandalone.h e24ee0655b5718a925a1a738c362237275b25e4f
+++ src/GuitoneStandalone.h 130bd2a5ace20673b853b0f49aa7164dff882c84
@@ -43,6 +43,7 @@ public slots:
public slots:
void loadWorkspace(const QString &);
void loadDatabase(const QString &);
+ void connectToServer(const QString &);
void activateWindow(int);
void raiseAllWindows();
@@ -56,7 +57,7 @@ private:
private:
bool tryLoadSomething(const QString &);
- void loadFromPath(const QString &);
+ void load(const QString &);
void triggerUpdateWindowList();
void ensureCascadedWindowPlacement(MainWindow *);
bool closeAllWindows();
============================================================
--- src/model/Ancestors.cpp be26e96549d5f55721c5513d9f16e53ecf2e06e6
+++ src/model/Ancestors.cpp 4d612bcbc7d6e21b18460bbb1231c1e9703c1430
@@ -20,10 +20,10 @@
#include
-Ancestors::Ancestors(QObject * parent, const DatabaseFile & db)
- : QAbstractItemModel(parent), AutomateCommand(0), databaseFile(db)
+Ancestors::Ancestors(QObject * parent, const MonotoneHandlePtr & handle)
+ : QAbstractItemModel(parent), AutomateCommand(0), monotoneHandle(handle)
{
- selRevisions = new RevisionList();
+ selRevisions = new QStringList();
}
Ancestors::~Ancestors()
@@ -43,7 +43,7 @@ void Ancestors::readAncestors(const QStr
reset();
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "ancestors" << parents));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
void Ancestors::processTaskResult(const MonotoneTaskPtr & task)
@@ -64,7 +64,7 @@ void Ancestors::processTaskResult(const
{
selRevisions->clear();
delete selRevisions;
- selRevisions = new RevisionList(
+ selRevisions = new QStringList(
task->getDecodedOutput().split('\n', QString::SkipEmptyParts)
);
// reset the view
============================================================
--- src/model/Ancestors.h d668133dc6751725cdea0a976466e8b8c89f3e3b
+++ src/model/Ancestors.h de28309cdad6c070ecc311149db702561c02c663
@@ -23,13 +23,11 @@
#include
-typedef QStringList RevisionList;
-
class Ancestors : public QAbstractItemModel, public AutomateCommand
{
Q_OBJECT
public:
- Ancestors(QObject *, const DatabaseFile &);
+ Ancestors(QObject *, const MonotoneHandlePtr &);
virtual ~Ancestors();
// needed Qt Model methods
@@ -50,9 +48,9 @@ private:
private:
void processTaskResult(const MonotoneTaskPtr &);
- RevisionList * selRevisions;
+ QStringList * selRevisions;
bool sorted;
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
};
#endif
============================================================
--- src/model/Annotate.cpp 485f71c5f6fbef3233f91987199b8c8ac37793b8
+++ src/model/Annotate.cpp b8c549f28b396f9db085aa2bb0184b2245868100
@@ -100,7 +100,7 @@ Annotate::~Annotate()
if (certsModel) delete certsModel;
}
-void Annotate::readAnnotation(const DatabaseFile & db,
+void Annotate::readAnnotation(const MonotoneHandlePtr & handle,
const QString & rev,
const QString & file)
{
@@ -112,16 +112,16 @@ void Annotate::readAnnotation(const Data
if (certsModel)
delete certsModel;
- certsModel = new Certs(this, db);
+ certsModel = new Certs(this, handle);
connect(
certsModel, SIGNAL(certsRead(const CertList &)),
this, SLOT(certsRead(const CertList &))
);
- databaseFile = db;
+ monotoneHandle = handle;
baseRevision = rev;
proc->start(
- QStringList() << "annotate" << "-d" << db
+ QStringList() << "annotate" << "-d" << handle
<< "-r" << rev << "--revs-only" << file
);
}
@@ -162,7 +162,7 @@ void Annotate::processFinished(int exitC
}
QStringList sortedRevisions =
- MonotoneUtil::topsortRevisions(databaseFile, revisions.toList());
+ MonotoneUtil::topsortRevisions(monotoneHandle, revisions.toList());
QColor startColor = QColor(Settings::getString("AnnotationColorOldestRevision"));
QColor endColor = QColor(Settings::getString("AnnotationColorNewestRevision"));
============================================================
--- src/model/Annotate.h 6b0eda06cab7acc0b94167e919247155dda40cbc
+++ src/model/Annotate.h 41a73cd6a6500963cf1f39f76529e6f63822d02b
@@ -66,7 +66,7 @@ public slots:
int columnCount(const QModelIndex &) const;
public slots:
- void readAnnotation(const DatabaseFile &, const QString &, const QString &);
+ void readAnnotation(const MonotoneHandlePtr &, const QString &, const QString &);
void setSelectedRevision(const QString &);
QString getSelectedRevision() const;
QString getBaseRevision() const;
@@ -76,7 +76,7 @@ private:
void currentCertList(const CertList &);
private:
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
MonotoneProcess * proc;
Certs * certsModel;
============================================================
--- src/model/AutomateCommand.cpp 7f12f375b0834d9bbd1e1a7d901f91b5ad2bcd96
+++ src/model/AutomateCommand.cpp a8f26b6d005071f97cbfbc009e6a5d4093618a90
@@ -42,10 +42,11 @@ AutomateCommand::~AutomateCommand()
}
}
-void AutomateCommand::enqueueTask(const MonotoneThreadPtr & thread, const MonotoneTaskPtr & task)
+void AutomateCommand::enqueueTask(const MonotoneHandlePtr & handle, const MonotoneTaskPtr & task)
{
QMutexLocker locker(&lock);
+ MonotoneThreadPtr thread = APP->manager()->getThread(handle);
int threadNumber = thread->getThreadNumber();
// we want to avoid multiple thread connections
@@ -80,18 +81,6 @@ void AutomateCommand::enqueueTask(const
}
-void AutomateCommand::enqueueWorkspaceTask(const WorkspacePath & ws, const MonotoneTaskPtr & task)
-{
- MonotoneThreadPtr thread = APP->manager()->getThreadForWorkspace(ws);
- enqueueTask(thread, task);
-}
-
-void AutomateCommand::enqueueDatabaseTask(const DatabaseFile & db, const MonotoneTaskPtr & task)
-{
- MonotoneThreadPtr thread = APP->manager()->getThreadForDatabase(db);
- enqueueTask(thread, task);
-}
-
bool AutomateCommand::hasQueuedCommands() const
{
int count = 0;
============================================================
--- src/model/AutomateCommand.h 5c2be101c4dc2eb361244057112f9f17faf3337e
+++ src/model/AutomateCommand.h 2377ff679a289185b8dbe06652c3a4a608d056a2
@@ -38,14 +38,11 @@ protected:
virtual void processTaskResult(const MonotoneTaskPtr &) = 0;
virtual void processTaskAbortion(const MonotoneTaskPtr &);
virtual void tickerUpdate(const TickerMap &);
- void enqueueWorkspaceTask(const WorkspacePath &, const MonotoneTaskPtr &);
- void enqueueDatabaseTask(const DatabaseFile &, const MonotoneTaskPtr &);
+ void enqueueTask(const MonotoneHandlePtr &, const MonotoneTaskPtr &);
bool hasQueuedCommands() const;
void abortThreads();
private:
- void enqueueTask(const MonotoneThreadPtr &, const MonotoneTaskPtr &);
-
QMutex lock;
QList connectedThreads;
QMap > queuedCommands;
============================================================
--- src/model/Branches.cpp 9707d8b1361016c41f96729adc0da88b988e51a3
+++ src/model/Branches.cpp f90b1629937d69ddb9f977c7a605b58b38ad86e0
@@ -27,9 +27,9 @@
* 2) we set the full branch name in tree and list mode as data behind
* Qt::ToolTipRole
*/
-Branches::Branches(QObject * parent, const DatabaseFile & db)
+Branches::Branches(QObject * parent, const MonotoneHandlePtr & handle)
: QStandardItemModel(parent), AutomateCommand(0),
- builder(0), databaseFile(db)
+ builder(0), monotoneHandle(handle)
{
branchesAsTree = false;
suspendedBranches = false;
@@ -55,7 +55,7 @@ void Branches::readBranches()
QStringList() << "branches",
QStringList() << "ignore-suspend-certs" << ""
));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
void Branches::processTaskResult(const MonotoneTaskPtr & task)
@@ -87,7 +87,7 @@ void Branches::processTaskResult(const M
QStringList() << "select" << "h:" + branch,
QStringList() << "ignore-suspend-certs" << ""
));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
}
else if (cmd == "select")
@@ -103,7 +103,7 @@ void Branches::processTaskResult(const M
MonotoneTaskPtr task(new MonotoneTask(
QStringList() << "certs" << head
));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
}
else if (cmd == "certs")
============================================================
--- src/model/Branches.h cf346cdfd0b86ffc8711859f029b44b94c9bc280
+++ src/model/Branches.h 6d7691b2efc1bee21a8f916feda26dad9a391ee8
@@ -30,7 +30,7 @@ public:
{
Q_OBJECT
public:
- Branches(QObject *, const DatabaseFile &);
+ Branches(QObject *, const MonotoneHandlePtr &);
~Branches();
void markBranchSuspended(const QString &);
@@ -55,7 +55,7 @@ private:
QMap branchItemMap;
TreeBuilder * builder;
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
QBrush suspendedBranchesBrush;
};
============================================================
--- src/model/Certs.cpp 3f7a2d60fc0568e08f8206492a792fcddc623c81
+++ src/model/Certs.cpp ddb47674d6a21355fc5850d58aa0316a08a75c37
@@ -19,8 +19,8 @@
#include "Certs.h"
#include "BasicIOParser.h"
-Certs::Certs(QObject * parent, const DatabaseFile & db)
- : QAbstractItemModel(parent), AutomateCommand(0), databaseFile(db)
+Certs::Certs(QObject * parent, const MonotoneHandlePtr & handle)
+ : QAbstractItemModel(parent), AutomateCommand(0), monotoneHandle(handle)
{}
Certs::~Certs()
@@ -37,7 +37,7 @@ void Certs::readCerts(const QString & re
if (rev.size() == 0) return;
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "certs" << rev));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
void Certs::processTaskResult(const MonotoneTaskPtr & task)
============================================================
--- src/model/Certs.h d7ec4361924586c6dd6ed83f9259e35fb5b2017e
+++ src/model/Certs.h 50f3a40de5f13beacab4d493ea76f048a29c2cb1
@@ -28,7 +28,7 @@ public:
{
Q_OBJECT
public:
- Certs(QObject *, const DatabaseFile &);
+ Certs(QObject *, const MonotoneHandlePtr &);
virtual ~Certs();
void clearData();
@@ -53,7 +53,7 @@ private:
private:
void processTaskResult(const MonotoneTaskPtr &);
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
};
#endif
============================================================
--- src/model/ContentDiff.cpp 96601ca8586c28850268b7753a33a36a5e16d8a7
+++ src/model/ContentDiff.cpp 31e19c80a067eee885971a08355a5e421d2a553f
@@ -40,7 +40,7 @@ void ContentDiff::cleanup()
lines.clear();
}
-void ContentDiff::readDatabaseDiff(const DatabaseFile & db, const QString & fileName,
+void ContentDiff::readDatabaseDiff(const MonotoneHandlePtr & handle, const QString & fileName,
const QString & base, const QString & target,
const QString & enc)
{
@@ -64,7 +64,7 @@ void ContentDiff::readDatabaseDiff(const
// reverse diff)
if (Settings::getBool("FixUnwantedReverseDiffs"))
{
- revs = MonotoneUtil::topsortRevisions(db, revs);
+ revs = MonotoneUtil::topsortRevisions(handle, revs);
}
QStringList opts;
@@ -74,10 +74,10 @@ void ContentDiff::readDatabaseDiff(const
}
MonotoneTaskPtr task(new MonotoneTask(cmd, opts));
- AutomateCommand::enqueueDatabaseTask(db, task);
+ AutomateCommand::enqueueDatabaseTask(handle, task);
}
-void ContentDiff::readWorkspaceDiff(const WorkspacePath & ws, const QString & fileName,
+void ContentDiff::readWorkspaceDiff(const MonotoneHandlePtr & handle, const QString & fileName,
const QString & base, const QString & target,
const QString & enc)
{
@@ -109,7 +109,7 @@ void ContentDiff::readWorkspaceDiff(cons
// reverse diff)
if (revs.size() == 2 && Settings::getBool("FixUnwantedReverseDiffs"))
{
- revs = MonotoneUtil::topsortRevisions(MonotoneUtil::getDatabaseFile(ws), revs);
+ revs = MonotoneUtil::topsortRevisions(MonotoneUtil::getMonotoneHandlePtr(handle), revs);
}
QStringList opts;
@@ -119,7 +119,7 @@ void ContentDiff::readWorkspaceDiff(cons
}
MonotoneTaskPtr task(new MonotoneTask(cmd, opts));
- AutomateCommand::enqueueWorkspaceTask(ws, task);
+ AutomateCommand::enqueueWorkspaceTask(handle, task);
}
void ContentDiff::switchOutputEncoding(const QString & enc)
============================================================
--- src/model/ContentDiff.h 1c6e2ba3401e96ec515c037b068e9ed20f75d652
+++ src/model/ContentDiff.h afa235dfe6a32b2894bc2f8eccbf492a979e366a
@@ -126,8 +126,8 @@ public slots:
}
public slots:
- void readDatabaseDiff(const DatabaseFile &, const QString &, const QString &, const QString &, const QString & encoding = QString());
- void readWorkspaceDiff(const WorkspacePath &, const QString &, const QString &, const QString &, const QString & encoding = QString());
+ void readDatabaseDiff(const MonotoneHandlePtr &, const QString &, const QString &, const QString &, const QString & encoding = QString());
+ void readWorkspaceDiff(const MonotoneHandlePtr &, const QString &, const QString &, const QString &, const QString & encoding = QString());
void switchOutputEncoding(const QString &);
signals:
============================================================
--- src/model/GetAttributes.cpp c48bcbc5d8afbe7f40fc8912eadb631f33371d8b
+++ src/model/GetAttributes.cpp 6bcd1a72894e953a633580e3d2661ff5b9da45ac
@@ -24,8 +24,7 @@ GetAttributes::GetAttributes(QObject * p
#include
GetAttributes::GetAttributes(QObject * parent)
- : QAbstractItemModel(parent), AutomateCommand(0),
- workspacePath(), itemPath()
+ : QAbstractItemModel(parent), AutomateCommand(0), itemPath()
{}
GetAttributes::~GetAttributes() {}
@@ -36,14 +35,14 @@ void GetAttributes::revert()
itemPath = QString();
reset();
}
-void GetAttributes::setWorkspacePath(const WorkspacePath & ws)
+void GetAttributes::setMonotoneHandle(const MonotoneHandlePtr & handle)
{
- workspacePath = ws;
+ monotoneHandle = handle;
}
void GetAttributes::readAttributes(const QString & path)
{
- I(!workspacePath.isEmpty());
+ I(!monotoneHandle.isEmpty());
// clear current attributes list
attributes.clear();
@@ -59,7 +58,7 @@ void GetAttributes::readAttributes(const
itemPath = path;
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "get_attributes" << itemPath));
- AutomateCommand::enqueueWorkspaceTask(workspacePath, task);
+ AutomateCommand::enqueueWorkspaceTask(monotoneHandle, task);
}
void GetAttributes::processTaskResult(const MonotoneTaskPtr & task)
@@ -255,7 +254,7 @@ bool GetAttributes::setAttribute(const Q
QStringList() << "set_attribute" << itemPath << key << value
));
- MonotoneUtil::runSynchronousWorkspaceTask(workspacePath, task);
+ MonotoneUtil::runSynchronousTask(monotoneHandle, task);
return task->getReturnCode() == 0;
}
@@ -266,7 +265,7 @@ bool GetAttributes::dropAttribute(const
QStringList() << "drop_attribute" << itemPath << key
));
- MonotoneUtil::runSynchronousWorkspaceTask(workspacePath, task);
+ MonotoneUtil::runSynchronousTask(monotoneHandle, task);
return task->getReturnCode() == 0;
}
@@ -277,7 +276,7 @@ bool GetAttributes::dropAllAttributes()
QStringList() << "drop_attribute" << itemPath
));
- MonotoneUtil::runSynchronousWorkspaceTask(workspacePath, task);
+ MonotoneUtil::runSynchronousTask(monotoneHandle, task);
return task->getReturnCode() == 0;
}
============================================================
--- src/model/GetAttributes.h 4f7ca1ecaf78f12632e3d4a8fa65d670e09020a1
+++ src/model/GetAttributes.h 4d3050038724ca2ee7adf28b8c90565511d6c90f
@@ -53,7 +53,7 @@ public slots:
inline bool attributesLoaded() const { return !itemPath.isEmpty(); }
public slots:
- void setWorkspacePath(const WorkspacePath &);
+ void setMonotoneHandle(const MonotoneHandlePtr &);
void readAttributes(const QString & itemPath = QString());
void revert();
@@ -63,7 +63,7 @@ private:
private:
void processTaskResult(const MonotoneTaskPtr &);
QList attributes;
- WorkspacePath workspacePath;
+ MonotoneHandlePtr monotoneHandle;
QString itemPath;
};
============================================================
--- src/model/GetBranchLog.cpp e9ac73db95e5524f1970dbbed89be13c87659baa
+++ src/model/GetBranchLog.cpp 81e960481db6bdac38a5ea1de91c111ad2b54af0
@@ -26,8 +26,8 @@ const int GetBranchLog::PortionSize = 50
// FIXME: make this configurable eventually
const int GetBranchLog::PortionSize = 50;
-GetBranchLog::GetBranchLog(QObject * parent, const DatabaseFile & db)
- : QAbstractItemModel(parent), AutomateCommand(0), databaseFile(db)
+GetBranchLog::GetBranchLog(QObject * parent, const MonotoneHandlePtr & handle)
+ : QAbstractItemModel(parent), AutomateCommand(0), monotoneHandle(handle)
{}
GetBranchLog::~GetBranchLog()
@@ -57,7 +57,7 @@ void GetBranchLog::invalidateCertCache(c
certMap.remove(rev);
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "certs" << rev));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
}
@@ -103,7 +103,7 @@ void GetBranchLog::readMore(const QStrin
if (!nextRevs.contains(currentBranch))
{
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "select" << "h:" + branch));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
else
{
@@ -131,7 +131,7 @@ void GetBranchLog::readNext()
QString next = nextRevs[currentBranch].takeLast();
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "parents" << next));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
void GetBranchLog::stopReading()
@@ -199,7 +199,7 @@ void GetBranchLog::processTaskResult(con
QStringList() << "ignore-suspend-certs" << ""
));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
return;
}
@@ -226,7 +226,7 @@ void GetBranchLog::processTaskResult(con
if (!certMap.contains(rev))
{
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "certs" << rev));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
endInsertRows();
@@ -239,7 +239,7 @@ void GetBranchLog::processTaskResult(con
args += nextRevs[currentBranch];
MonotoneTaskPtr task(new MonotoneTask(args));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
return;
}
============================================================
--- src/model/GetBranchLog.h fb34c7f1a38c677e60b4945456567b104922e82e
+++ src/model/GetBranchLog.h 5cb47c8223ddac917701fcc9bb1c6fd154d9f805
@@ -29,7 +29,7 @@ public:
{
Q_OBJECT
public:
- GetBranchLog(QObject *, const DatabaseFile &);
+ GetBranchLog(QObject *, const MonotoneHandlePtr &);
~GetBranchLog();
QString getCurrentBranch() const;
@@ -58,7 +58,7 @@ private:
void readingStopped();
private:
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
QMap revisionMap;
QMap parentMap;
QMap certMap;
============================================================
--- src/model/GetContentChanged.cpp f07066aea6bb76e5c9ff7a28ad51836a3685dced
+++ src/model/GetContentChanged.cpp 948ac2596110523f4fa6dc469890b500a26e07a8
@@ -22,8 +22,8 @@
#include
-GetContentChanged::GetContentChanged(QObject * parent, const DatabaseFile & db)
- : QAbstractItemModel(parent), AutomateCommand(0), databaseFile(db)
+GetContentChanged::GetContentChanged(QObject * parent, const MonotoneHandlePtr & handle)
+ : QAbstractItemModel(parent), AutomateCommand(0), monotoneHandle(handle)
{}
GetContentChanged::~GetContentChanged()
@@ -83,21 +83,21 @@ void GetContentChanged::queryContentChan
{
if (stopReadingChanges) return;
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "get_content_changed" << rev << path));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
void GetContentChanged::queryParents(const QString & rev)
{
if (stopReadingChanges) return;
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "parents" << rev));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
void GetContentChanged::queryCorrespondingPath(const QString & rev, const QString & path, const QString & par)
{
if (stopReadingChanges) return;
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "get_corresponding_path" << rev << path << par));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
void GetContentChanged::processTaskResult(const MonotoneTaskPtr & task)
============================================================
--- src/model/GetContentChanged.h 2e459c7beea84cd2cc13c1fed6776eb8101ee361
+++ src/model/GetContentChanged.h 324c77720fd736b36b72a7d4a8668c945e67a871
@@ -29,7 +29,7 @@ public:
{
Q_OBJECT
public:
- GetContentChanged(QObject *, const DatabaseFile &);
+ GetContentChanged(QObject *, const MonotoneHandlePtr &);
virtual ~GetContentChanged();
// needed Qt Model methods
@@ -60,7 +60,7 @@ private:
void processTaskResult(const MonotoneTaskPtr &);
- RevisionList revisions;
+ QStringList revisions;
QQueue revsForPathStack;
@@ -69,7 +69,7 @@ private:
QString startRev;
QString startPath;
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
bool stopReadingChanges;
};
============================================================
--- src/model/GetDatabaseVariables.cpp a64d26ea00b105a85ca5883eabd5f280ddf4dbb0
+++ src/model/GetDatabaseVariables.cpp f8541e19421025e94cdbfc907c511d9fe6a5d91f
@@ -26,16 +26,17 @@ GetDatabaseVariables::~GetDatabaseVariab
GetDatabaseVariables::~GetDatabaseVariables() {}
-void GetDatabaseVariables::setDatabaseFile(const DatabaseFile & db)
+void GetDatabaseVariables::setMonotoneHandle(const MonotoneHandlePtr & handle)
{
- databaseFile = db;
+ monotoneHandle = handle;
}
void GetDatabaseVariables::readVariables()
{
- I(!databaseFile.isEmpty());
+ I(!monotoneHandle.isNull());
+
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "get_db_variables"));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
void GetDatabaseVariables::processTaskResult(const MonotoneTaskPtr & task)
@@ -218,7 +219,7 @@ bool GetDatabaseVariables::setVariable(c
QStringList() << "set_db_variable" << domain << key << value
));
- MonotoneUtil::runSynchronousDatabaseTask(databaseFile, task);
+ MonotoneUtil::runSynchronousTask(monotoneHandle, task);
return task->getReturnCode() == 0;
}
@@ -229,7 +230,7 @@ bool GetDatabaseVariables::dropVariable(
QStringList() << "drop_db_variables" << domain << key
));
- MonotoneUtil::runSynchronousDatabaseTask(databaseFile, task);
+ MonotoneUtil::runSynchronousTask(monotoneHandle, task);
return task->getReturnCode() == 0;
}
============================================================
--- src/model/GetDatabaseVariables.h d5c88700402f4dd78230f3ef8a737571950a4d57
+++ src/model/GetDatabaseVariables.h 05b49f7a8033630e310f5be0b823886591ec896e
@@ -43,7 +43,7 @@ public slots:
bool dropVariable(const QString &, const QString &);
public slots:
- void setDatabaseFile(const DatabaseFile &);
+ void setMonotoneHandle(const MonotoneHandlePtr &);
void readVariables();
signals:
@@ -51,7 +51,7 @@ private:
private:
void processTaskResult(const MonotoneTaskPtr &);
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
// technically we could rewrite the QList> as QMap<...>,
// but this structure would be harder to serve the model methods
QMap > > variables;
============================================================
--- src/model/GetFile.cpp 91ee4ba6d8884bd32e7d817562c4781a18fdf735
+++ src/model/GetFile.cpp 0e0b5d14f6492ddc40e3b2ccc2289e04ca936b19
@@ -29,7 +29,7 @@ GetFile::~GetFile() {}
GetFile::~GetFile() {}
-void GetFile::readFileByName(const DatabaseFile & db, const QString & fileName,
+void GetFile::readFileByName(const MonotoneHandlePtr & handle, const QString & fileName,
const QString & rev, const QString & encoding)
{
QStringList cmd;
@@ -38,19 +38,19 @@ void GetFile::readFileByName(const Datab
QStringList opts;
opts << "r" << rev;
- readFile(db, cmd, opts, encoding);
+ readFile(handle, cmd, opts, encoding);
}
-void GetFile::readFileById(const DatabaseFile & db, const QString & fileID,
+void GetFile::readFileById(const MonotoneHandlePtr & handle, const QString & fileID,
const QString & encoding)
{
QStringList cmd;
cmd << "get_file" << fileID;
- readFile(db, cmd, QStringList(), encoding);
+ readFile(handle, cmd, QStringList(), encoding);
}
-void GetFile::readFile(const DatabaseFile & db, const QStringList & cmd,
+void GetFile::readFile(const MonotoneHandlePtr & handle, const QStringList & cmd,
const QStringList & opts, const QString & encoding)
{
reset();
@@ -61,7 +61,7 @@ void GetFile::readFile(const DatabaseFil
task->setOutputEncoding(encoding);
}
- AutomateCommand::enqueueDatabaseTask(db, task);
+ AutomateCommand::enqueueDatabaseTask(handle, task);
}
void GetFile::processTaskResult(const MonotoneTaskPtr & task)
============================================================
--- src/model/GetFile.h 079d6a0490ed823f4d9169bfb8a35f107cdc07e2
+++ src/model/GetFile.h 1dec5b9aaff37beef4494091378aec8672336a4b
@@ -58,8 +58,8 @@ public slots:
QModelIndex getPrevGroup(const QModelIndex &, bool recurse = false);
public slots:
- void readFileById(const DatabaseFile &, const QString &, const QString & encoding = QString());
- void readFileByName(const DatabaseFile &, const QString &, const QString &, const QString & encoding = QString());
+ void readFileById(const MonotoneHandlePtr &, const QString &, const QString & encoding = QString());
+ void readFileByName(const MonotoneHandlePtr &, const QString &, const QString &, const QString & encoding = QString());
void switchOutputEncoding(const QString &);
void applyDiff(Diff * diff);
@@ -68,7 +68,7 @@ private:
void encodingChanged(const QString &);
private:
- void readFile(const DatabaseFile &, const QStringList &, const QStringList &, const QString & encoding = QString());
+ void readFile(const MonotoneHandlePtr &, const QStringList &, const QStringList &, const QString & encoding = QString());
void processTaskResult(const MonotoneTaskPtr &);
void loadOutputIntoModel(const QString &);
============================================================
--- src/model/GetRevision.cpp 5d84f72f0ba84421c95832c4a7f72c76c859cd70
+++ src/model/GetRevision.cpp 6659642e8dbc847525d4d6f9d202d0024f09fbf6
@@ -31,14 +31,14 @@ GetRevision::~GetRevision() {}
GetRevision::~GetRevision() {}
-void GetRevision::readDatabaseRevision(const DatabaseFile & db, const QString & rev)
+void GetRevision::readDatabaseRevision(const MonotoneHandlePtr & handle, const QString & rev)
{
revision.clear();
MonotoneTaskPtr task(new MonotoneTask( QStringList() << "get_revision" << rev));
- AutomateCommand::enqueueDatabaseTask(db, task);
+ AutomateCommand::enqueueDatabaseTask(handle, task);
}
-void GetRevision::readWorkspaceRevision(const WorkspacePath & ws, const QStringList & paths)
+void GetRevision::readWorkspaceRevision(const MonotoneHandlePtr & handle, const QStringList & paths)
{
revision.clear();
@@ -50,7 +50,7 @@ void GetRevision::readWorkspaceRevision(
}
MonotoneTaskPtr task(new MonotoneTask(args));
- AutomateCommand::enqueueWorkspaceTask(ws, task);
+ AutomateCommand::enqueueWorkspaceTask(handle, task);
}
void GetRevision::processTaskResult(const MonotoneTaskPtr & task)
============================================================
--- src/model/GetRevision.h 29813b88948834794c0947f3fe35e6467a3b4dc3
+++ src/model/GetRevision.h ee6cfcbb07d0ed81adf8c6ed2e3d905fde700336
@@ -167,8 +167,8 @@ public slots:
QStringList getPathsForCompletion() const;
public slots:
- void readDatabaseRevision(const DatabaseFile &, const QString &);
- void readWorkspaceRevision(const WorkspacePath &, const QStringList &);
+ void readDatabaseRevision(const MonotoneHandlePtr &, const QString &);
+ void readWorkspaceRevision(const MonotoneHandlePtr &, const QStringList &);
void showChangesAgainstParent(const QString &);
signals:
@@ -180,7 +180,7 @@ private:
Revision revision;
QString currentParentRevision;
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
};
#endif
============================================================
--- src/model/Inventory.cpp a052d31df3cd4f5a9f1fc589e5168941c7f913f1
+++ src/model/Inventory.cpp 80516d48c7027b0f859980cb5317fe2e6108e823
@@ -38,14 +38,14 @@ Inventory::~Inventory()
delete rootItem;
}
-void Inventory::setWorkspacePath(const WorkspacePath & ws)
+void Inventory::setMonotoneHandle(const MonotoneHandlePtr & handle)
{
- workspacePath = ws;
+ monotoneHandle = handle
}
void Inventory::read(const QString & path, bool fullQuery)
{
- I(!workspacePath.isEmpty());
+ I(!monotoneHandle.isNull());
QStringList cmd = QStringList() << "inventory";
@@ -72,7 +72,7 @@ void Inventory::read(const QString & pat
}
MonotoneTaskPtr task(new MonotoneTask(cmd, opts));
- AutomateCommand::enqueueWorkspaceTask(workspacePath, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
/*!
@@ -125,7 +125,8 @@ void Inventory::processTaskResult(const
QRegExp("restriction includes unknown path")
) && itemMap.contains(queriedPath))
{
- if (QFile::exists(workspacePath + "/" + itemMap[queriedPath]->getPath()))
+ QString workspace = monotoneHandle->getData();
+ if (QFile::exists(workspace + "/" + itemMap[queriedPath]->getPath()))
{
D(QString("keeping existing unknown node %1").arg(queriedPath));
// clear the previous state of the node and its children
@@ -194,11 +195,11 @@ void Inventory::processTaskResult(const
}
else
{
- QString displayPath = workspacePath;
+ QString displayPath = monotoneHandle->getData();
QString homePath = QDir::homePath();
- if (workspacePath.indexOf(homePath) == 0)
+ if (displayPath.indexOf(homePath) == 0)
{
- displayPath = QDir(homePath).relativeFilePath(workspacePath);
+ displayPath = QDir(homePath).relativeFilePath(displayPath);
displayPath.prepend("~/");
}
item->setLabel(displayPath);
@@ -375,10 +376,9 @@ QMap Inventory
}
// TODO: progess bar here!
- QString parentRev = MonotoneUtil::getBaseWorkspaceRevision(workspacePath);
+ QString parentRev = MonotoneUtil::getBaseWorkspaceRevision(monotoneHandle);
FileEntryList parentList = MonotoneUtil::getRevisionManifest(
- MonotoneUtil::getDatabaseFile(workspacePath),
- parentRev
+ monotoneHandle, parentRev
);
QMap unaccountedRenames;
@@ -419,8 +419,7 @@ QMap Inventory
!fileIds.contains(unknownPath))
{
QString fileid = MonotoneUtil::getFileId(
- MonotoneUtil::getDatabaseFile(workspacePath),
- unknownPath
+ monotoneHandle, unknownPath
);
// file was not readable, etc.
if (fileid.isEmpty()) continue;
============================================================
--- src/model/Inventory.h 705eda6338ef80e953adaaa0b490e06c67a62138
+++ src/model/Inventory.h a7e78245359ce90855ef951433a721a04a69d3ad
@@ -38,7 +38,7 @@ public slots:
static const int QueryLevel;
public slots:
- void setWorkspacePath(const WorkspacePath &);
+ void setMonotoneHandle(const MonotoneHandlePtr &);
void read(const QString & path = QString(), bool fullQuery = false);
private:
@@ -48,7 +48,7 @@ private:
ModelItem * rootItem;
QMap itemMap;
- WorkspacePath workspacePath;
+ MonotoneHandlePtr monotoneHandle;
signals:
void beginInsertRows(ModelItem *, int, int);
============================================================
--- src/model/InventoryModel.cpp caaee221cd516e21be7b927d8fa672fd1e7ab6c1
+++ src/model/InventoryModel.cpp d486a1ecb6fc032fb4ed6b30b531a810aa5abcb5
@@ -66,10 +66,10 @@ InventoryModel::~InventoryModel()
delete inventory;
}
-void InventoryModel::setWorkspacePath(const WorkspacePath & ws)
+void InventoryModel::setMonotoneHandle(const MonotoneHandlePtr & handle)
{
- workspacePath = ws;
- inventory->setWorkspacePath(ws);
+ monotoneHandle = handle;
+ inventory->setMonotoneHandle(handle);
}
void InventoryModel::refresh(const QString & path)
@@ -445,7 +445,7 @@ void InventoryModel::runWorkspaceCommand
void InventoryModel::runWorkspaceCommand(const QStringList & args)
{
- MonotoneProcess proc(workspacePath);
+ MonotoneProcess proc(monotoneHandle);
proc.start(args);
proc.waitForFinished();
@@ -496,7 +496,7 @@ void InventoryModel::renamePath(const QS
QStringList args;
args << "rename" << oldPath << newPath;
- QFileInfo fileInfo(workspacePath + "/" + oldPath);
+ QFileInfo fileInfo(monotoneHandle + "/" + oldPath);
if (!fileInfo.exists())
{
args << "--bookkeep-only";
@@ -507,7 +507,7 @@ void InventoryModel::newFile(const QStri
void InventoryModel::newFile(const QString & path)
{
- QFile file(workspacePath + "/" + path);
+ QFile file(monotoneHandle + "/" + path);
if (!file.open(QIODevice::ReadWrite))
{
emit workspaceCommandError(tr("Could not create file %1").arg(path));
@@ -520,7 +520,7 @@ void InventoryModel::newDirectory(const
void InventoryModel::newDirectory(const QString & path)
{
- QDir workspace(workspacePath);
+ QDir workspace(monotoneHandle);
if (!workspace.mkpath(path))
{
emit workspaceCommandError(tr("Could not create directory %1").arg(path));
@@ -531,7 +531,7 @@ void InventoryModel::ignorePaths(const Q
void InventoryModel::ignorePaths(const QStringList & paths)
{
- QString path(workspacePath);
+ QString path(monotoneHandle);
path.append(QDir::separator()).append(".mtn-ignore");
QFile file(path);
@@ -552,7 +552,7 @@ void InventoryModel::unignorePaths(const
void InventoryModel::unignorePaths(const QStringList & paths)
{
- QString path(workspacePath);
+ QString path(monotoneHandle);
path.append(QDir::separator()).append(".mtn-ignore");
QFile file(path);
============================================================
--- src/model/InventoryModel.h 5829fc37eba4c40c1a559109444aa541f7377669
+++ src/model/InventoryModel.h 3451e74962ca7944320c5c4a869252cef0d10d32
@@ -56,7 +56,7 @@ public slots:
public slots:
//! forwards
- void setWorkspacePath(const WorkspacePath &);
+ void setMonotoneHandle(const MonotoneHandlePtr &);
void refresh(const QString & path = QString());
void addPaths(const QStringList &);
@@ -73,7 +73,7 @@ private:
void runWorkspaceCommand(const QStringList &);
Inventory * inventory;
- WorkspacePath workspacePath;
+ MonotoneHandlePtr monotoneHandle;
QStack nodeInsertions;
private slots:
============================================================
--- src/model/InventoryWatcher.cpp 5e16d1a0ed098f6450fa5e6bbd3496a3e2d740d8
+++ src/model/InventoryWatcher.cpp cd762ac7986f53c901ceb1dde868db357b0a906b
@@ -50,7 +50,7 @@ InventoryWatcher::~InventoryWatcher()
}
//! TODO: monitor _MTN/options for changes as well
-void InventoryWatcher::setWorkspacePath(const WorkspacePath & wp)
+void InventoryWatcher::setMonotoneHandle(const MonotoneHandlePtr & wp)
{
workspace = wp;
QString revPath(workspace + "/_MTN/revision");
============================================================
--- src/model/InventoryWatcher.h ae3f783cea8382a2592f58468a39a76f33b16036
+++ src/model/InventoryWatcher.h 3ebc62636a049b18da9fc6129e49f3c40565a8f3
@@ -38,7 +38,7 @@ public slots:
void changedBaseRevision(const QString &);
public slots:
- void setWorkspacePath(const WorkspacePath &);
+ void setMonotoneHandle(const MonotoneHandlePtr &);
void watchPaths(const QStringList &);
void unwatchPaths(const QStringList &);
void clearAllWatches();
@@ -47,7 +47,7 @@ private:
void markPathForNotification(const QString &);
void checkForBookkeepChanges();
- WorkspacePath workspace;
+ MonotoneHandlePtr workspace;
StanzaList oldRevisionEntries;
QStringList changedPaths;
QTimer * notifyTimer;
============================================================
--- src/model/Keys.cpp bac22fe33fe8e16f4ab76201d6f9b3cb527942de
+++ src/model/Keys.cpp 15da8facb87e88eeb55da5339dc30926bb3b9637
@@ -23,8 +23,8 @@ const int Key::Keystore = 2;
const int Key::Database = 1;
const int Key::Keystore = 2;
-Keys::Keys(QObject * parent, const DatabaseFile & db)
- : QAbstractItemModel(parent), AutomateCommand(0), databaseFile(db)
+Keys::Keys(QObject * parent, const MonotoneHandlePtr & handle)
+ : QAbstractItemModel(parent), AutomateCommand(0), monotoneHandle(handle)
{}
Keys::~Keys()
@@ -35,7 +35,7 @@ void Keys::readKeys()
void Keys::readKeys()
{
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "keys"));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
void Keys::processTaskResult(const MonotoneTaskPtr & task)
============================================================
--- src/model/Keys.h 9f6df7cf905951771dbb4f1cc1a49117a43c2e34
+++ src/model/Keys.h 0b3fe7345717ac96ab302f9fb64700a055d8dbb7
@@ -39,7 +39,7 @@ public:
{
Q_OBJECT
public:
- Keys(QObject *, const DatabaseFile &);
+ Keys(QObject *, const MonotoneHandlePtr &);
virtual ~Keys();
// needed Qt Model methods
@@ -62,7 +62,7 @@ private:
QString getLocationString(int) const;
QString getPasswordSaveStatus(Key *) const;
QList keys;
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
};
#endif
============================================================
--- src/model/Manifest.cpp e50bdb95dde92c0bf991c0ce2b4eec714854bf4e
+++ src/model/Manifest.cpp 7cddb3ed2b22c78bb61ded0db60fc5930b8858a0
@@ -20,8 +20,8 @@
#include "BasicIOParser.h"
#include "IconProvider.h"
-Manifest::Manifest(QObject * parent, const DatabaseFile & db)
- : QAbstractItemModel(parent), AutomateCommand(0), databaseFile(db), root(0)
+Manifest::Manifest(QObject * parent, const MonotoneHandlePtr & handle)
+ : QAbstractItemModel(parent), AutomateCommand(0), monotoneHandle(handle), root(0)
{}
Manifest::~Manifest()
@@ -35,7 +35,7 @@ void Manifest::readManifest(const QStrin
reset();
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "get_manifest_of" << rev));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
void Manifest::processTaskResult(const MonotoneTaskPtr & task)
============================================================
--- src/model/Manifest.h 87f96415291d30c53cfe236812da7c0f7e8e9840
+++ src/model/Manifest.h b8846bdf746ba7e5fe0552e4b93798c2459add86
@@ -67,7 +67,7 @@ public:
{
Q_OBJECT
public:
- Manifest(QObject *, const DatabaseFile &);
+ Manifest(QObject *, const MonotoneHandlePtr &);
virtual ~Manifest();
// needed Qt Model methods
@@ -87,7 +87,7 @@ private:
private:
void processTaskResult(const MonotoneTaskPtr &);
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
ManifestEntry * root;
};
============================================================
--- src/model/Select.cpp e77b9594f21232a0e6c7396a3fccf4c78f874dfe
+++ src/model/Select.cpp ab23f2131e122610ee5caae8fae9b2848068c6d3
@@ -20,10 +20,10 @@
#include
-Select::Select(QObject * parent, const DatabaseFile & db)
- : QAbstractItemModel(parent), AutomateCommand(0), databaseFile(db)
+Select::Select(QObject * parent, const MonotoneHandlePtr & handle)
+ : QAbstractItemModel(parent), AutomateCommand(0), monotoneHandle(handle)
{
- selRevisions = new RevisionList();
+ selRevisions = new QStringList();
}
Select::~Select()
@@ -39,7 +39,7 @@ void Select::readSelection(const QString
reset();
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "select" << selector));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
void Select::processTaskResult(const MonotoneTaskPtr & task)
@@ -60,7 +60,7 @@ void Select::processTaskResult(const Mon
}
delete selRevisions;
- selRevisions = new RevisionList(
+ selRevisions = new QStringList(
task->getDecodedOutput().split('\n', QString::SkipEmptyParts)
);
// reset the view
============================================================
--- src/model/Select.h b8dc238d172c17c51ae3bf80a9cd2b2ad394939d
+++ src/model/Select.h f8e3dded72724b4498e6285c7e64376ebf929003
@@ -27,7 +27,7 @@ public:
{
Q_OBJECT
public:
- Select(QObject *, const DatabaseFile &);
+ Select(QObject *, const MonotoneHandlePtr &);
virtual ~Select();
// needed Qt Model methods
@@ -49,9 +49,9 @@ private:
private:
void processTaskResult(const MonotoneTaskPtr &);
- RevisionList * selRevisions;
+ QStringList * selRevisions;
bool sorted;
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
};
#endif
============================================================
--- src/model/Tags.cpp c9519659ae3b5f5fab35d9d63574e612e424a394
+++ src/model/Tags.cpp f1a5b77ef3afb07b4a1a350663a7f4f4c81cf288
@@ -19,8 +19,8 @@
#include "Tags.h"
#include "BasicIOParser.h"
-Tags::Tags(QObject * parent, const DatabaseFile & db)
- : QAbstractItemModel(parent), AutomateCommand(0), databaseFile(db)
+Tags::Tags(QObject * parent, const MonotoneHandlePtr & handle)
+ : QAbstractItemModel(parent), AutomateCommand(0), monotoneHandle(handle)
{
tags = new TagList();
}
@@ -41,7 +41,7 @@ void Tags::readTags(const QString & bran
}
MonotoneTaskPtr task(new MonotoneTask(cmd));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
void Tags::processTaskResult(const MonotoneTaskPtr & task)
============================================================
--- src/model/Tags.h 81fec9954f65235ce921988b55da5039cdd9b9c2
+++ src/model/Tags.h 2f66dbca8993e84b8f46f1785508a1545feda434
@@ -36,7 +36,7 @@ public:
{
Q_OBJECT
public:
- Tags(QObject *, const DatabaseFile &);
+ Tags(QObject *, const MonotoneHandlePtr &);
virtual ~Tags();
// needed Qt Model methods
@@ -57,7 +57,7 @@ private:
private:
void processTaskResult(const MonotoneTaskPtr &);
TagList * tags;
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
};
#endif
============================================================
--- src/model/Toposort.cpp 6decc7b78dd2486c95649a4b5434d7db4b20a242
+++ src/model/Toposort.cpp de8359cc84d1c78b4e58a6fadfeb8e91e58bf53b
@@ -21,8 +21,8 @@
#include
#include
-Toposort::Toposort(QObject * parent, const DatabaseFile & db)
- : QSortFilterProxyModel(parent), AutomateCommand(0), databaseFile(db),
+Toposort::Toposort(QObject * parent, const MonotoneHandlePtr & handle)
+ : QSortFilterProxyModel(parent), AutomateCommand(0), monotoneHandle(handle),
sortColumn(0), sortOrder(Qt::AscendingOrder)
{
ordRevisions = new RevisionMap();
@@ -112,7 +112,7 @@ void Toposort::sortModel()
while (true);
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "toposort" << revs));
- AutomateCommand::enqueueDatabaseTask(databaseFile, task);
+ AutomateCommand::enqueueTask(monotoneHandle, task);
}
void Toposort::processTaskResult(const MonotoneTaskPtr & task)
============================================================
--- src/model/Toposort.h c077c6787ee68374b47d19961df83adf71258ea5
+++ src/model/Toposort.h dc4f6694404ea513d6d8a99f06c6d71f24996d6d
@@ -30,7 +30,7 @@ public:
{
Q_OBJECT
public:
- Toposort(QObject *, const DatabaseFile &);
+ Toposort(QObject *, const MonotoneHandlePtr &);
virtual ~Toposort();
void setSourceModel(QAbstractItemModel *);
void sort(int, Qt::SortOrder);
@@ -44,7 +44,7 @@ private:
bool filterAcceptsRow(int, const QModelIndex &) const;
RevisionMap * ordRevisions;
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
bool showRows;
int sortColumn;
Qt::SortOrder sortOrder;
============================================================
--- src/monotone/FileExporter.cpp 4cea02c79f62a4d0b83a192b453be081e3c9c7e6
+++ src/monotone/FileExporter.cpp 14560ec9143c92fdfefc321abafefb4385dcedcb
@@ -27,8 +27,8 @@
#include "GuitoneCore.h"
#include
-FileExporter::FileExporter(const DatabaseFile & database, const QString & rev, const QDir & dir)
- : QObject(0), databaseFile(database), rootDir(dir), revision(rev)
+FileExporter::FileExporter(const MonotoneHandlePtr & database, const QString & rev, const QDir & dir)
+ : QObject(0), monotoneHandle(database), rootDir(dir), revision(rev)
{
I(rootDir.exists());
}
@@ -86,7 +86,7 @@ bool FileExporter::exportFile(const File
QStringList() << "r" << revision
));
- MonotoneUtil::runSynchronousDatabaseTask(databaseFile, task);
+ MonotoneUtil::runSynchronousTask(monotoneHandle, task);
if (!task->isFinished()) F("task aborted");
============================================================
--- src/monotone/FileExporter.h 44a4bb7eb2d4f29f3c958bd41ecaa7588a5993a3
+++ src/monotone/FileExporter.h c6c58e54b2858518ff92e8bd476d1127d8065491
@@ -27,14 +27,14 @@ public:
{
Q_OBJECT
public:
- FileExporter(const DatabaseFile &, const QString &, const QDir &);
+ FileExporter(const MonotoneHandlePtr &, const QString &, const QDir &);
~FileExporter();
virtual bool run(const FileEntryList &);
protected:
bool exportFile(const FileEntry &);
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
QDir rootDir;
QString revision;
};
============================================================
--- src/monotone/MonotoneManager.cpp 57056ba7ca863825592a9884f4ac39528521b857
+++ src/monotone/MonotoneManager.cpp 8b63e64f9501773062d8444415188b6727ca300e
@@ -62,48 +62,8 @@ bool MonotoneManager::setMonotoneBinaryP
return true;
}
-MonotoneThreadPtr MonotoneManager::getThreadForWorkspace(const WorkspacePath & workspace)
+MonotoneThreadPtr MonotoneManager::getThread(const MonotoneHandlePtr & handle)
{
- // ensure that its normalized
- WorkspacePath normalizedWorkspace = normalizeWorkspacePath(workspace);
- DatabaseFile databaseFile = getDatabaseFilePath(normalizedWorkspace);
- return getThread(databaseFile, normalizedWorkspace);
-}
-
-MonotoneThreadPtr MonotoneManager::getThreadForDatabase(const DatabaseFile & database)
-{
- if (database.isEmpty())
- {
- throw GuitoneException(tr("Database file path is empty"));
- }
-
- QFile dbfile(database);
- if (!dbfile.open(QIODevice::ReadOnly))
- {
- throw GuitoneException(
- tr("Could not open database for reading: %1").arg(dbfile.errorString())
- );
- }
-
- if (dbfile.read(15) != QByteArray("SQLite format 3"))
- {
- dbfile.close();
- throw GuitoneException(tr("Database file not an SQLite 3 database"));
- }
-
- if (!dbfile.seek(60) || dbfile.read(4) != QByteArray("_MTN"))
- {
- dbfile.close();
- throw GuitoneException(tr("SQLite database is not a monotone "
- "database or a database of an older, "
- "unsupported version of monotone"));
- }
- dbfile.close();
- return getThread(database, QString());
-}
-
-MonotoneThreadPtr MonotoneManager::getThread(const DatabaseFile & database, const WorkspacePath & workspace)
-{
QMutexLocker locker(&lock);
if (mtnPath.isEmpty())
@@ -173,11 +133,11 @@ void MonotoneManager::stopThread(int thr
stoppingThreads.insert(threadID);
}
-void MonotoneManager::stopWorkspaceThreads(const WorkspacePath & workspace)
+void MonotoneManager::stopWorkspaceThreads(const MonotoneHandlePtr & workspace)
{
- WorkspacePath normalizedWorkspace = normalizeWorkspacePath(workspace);
- DatabaseFile databaseFile = getDatabaseFilePath(normalizedWorkspace);
- QList threadIDs = identMap.keys(databaseFile + "|" + normalizedWorkspace);
+ MonotoneHandlePtr normalizedWorkspace = normalizeWorkspacePath(workspace);
+ MonotoneHandlePtr monotoneHandle = getMonotoneHandlePtrPath(normalizedWorkspace);
+ QList threadIDs = identMap.keys(monotoneHandle + "|" + normalizedWorkspace);
L(QString("stopping %1 threads for workspace %2")
.arg(threadIDs.size()).arg(normalizedWorkspace));
@@ -188,38 +148,8 @@ void MonotoneManager::stopWorkspaceThrea
}
}
-WorkspacePath MonotoneManager::normalizeWorkspacePath(const WorkspacePath & workspace)
-{
- QDir tempDir(workspace);
- if (!tempDir.exists())
- {
- throw GuitoneException(tr("Directory %1 does not exist").arg(workspace));
- }
-
- bool found = false;
- WorkspacePath normalizedWorkspace;
- do
- {
- if (tempDir.cd("_MTN"))
- {
- tempDir.cdUp();
- normalizedWorkspace = tempDir.absolutePath();
- found = true;
- break;
- }
- }
- while (!tempDir.isRoot() && tempDir.cdUp());
-
- if (!found)
- {
- throw GuitoneException(tr("could not find _MTN directory"));
- }
-
- return normalizedWorkspace;
-}
-
// we assume that the workspace was already normalized here
-DatabaseFile MonotoneManager::getDatabaseFilePath(const WorkspacePath & workspace)
+MonotoneHandlePtr MonotoneManager::getMonotoneHandlePtrPath(const MonotoneHandlePtr & workspace)
{
// now check again if we know it
if (workspaceMap.contains(workspace))
@@ -250,7 +180,7 @@ DatabaseFile MonotoneManager::getDatabas
I(stanzas.size() == 1);
Stanza st = stanzas.at(0);
- DatabaseFile databaseFilePath;
+ MonotoneHandlePtr databaseFilePath;
foreach (const StanzaEntry & entry, st)
{
if (entry.sym == "database")
@@ -313,8 +243,8 @@ void MonotoneManager::aborted(int thread
MonotoneThreadPtr thread = threadMap.value(threadID);
- QString databaseFile = thread->getDatabaseFilePath();
- QString workspacePath = thread->getWorkspacePath();
+ QString monotoneHandle = thread->getMonotoneHandlePtrPath();
+ QString monotoneHandle = thread->getWorkspacePath();
removeThread(threadID);
@@ -353,7 +283,7 @@ void MonotoneManager::aborted(int thread
"The monotone process for '%1' died (%2). "
"If you think this is a bug in guitone, "
"please report it to the author!"
- ).arg(workspacePath.isEmpty() ? databaseFile : workspacePath)
+ ).arg(monotoneHandle.isEmpty() ? monotoneHandle : monotoneHandle)
.arg(processErrorTranslated)
);
============================================================
--- src/monotone/MonotoneManager.h 4d0a313dd2921a3b223d16683c48c81d177c627e
+++ src/monotone/MonotoneManager.h 9a4a725a495b7ba94eca66cad0502641e176f092
@@ -37,27 +37,18 @@ public:
//! returns if the path to the monotone binary was set successful before
inline bool monotoneBinaryPathSet() const { return !mtnPath.isEmpty(); }
- //! returns the database filepath for a given workspace path
- DatabaseFile getDatabaseFilePath(const WorkspacePath &);
+ //! returns an appropriate MonotoneThread for the given handle
+ MonotoneThreadPtr getThread(const MonotoneHandlePtr &);
- //! returns an appropriate MonotoneThread for the given workspace
- MonotoneThreadPtr getThreadForWorkspace(const WorkspacePath &);
-
- //! returns an appropriate MonotoneThread for the given database
- MonotoneThreadPtr getThreadForDatabase(const DatabaseFile &);
-
//! stops the thread with the given thread number
void stopThread(int);
- //! stops all threads for the given workspace
- void stopWorkspaceThreads(const WorkspacePath &);
+ //! stops all threads for the given handle
+ void stopThreads(const MonotoneHandlePtr &);
//! returns the interface version of a given monotone binary
static QString getInterfaceVersion(const QString &);
- //! returns the directory which contains the _MTN directory
- static WorkspacePath normalizeWorkspacePath(const WorkspacePath &);
-
//! compares two version strings
static int versionCompare(const QString &, const QString &);
@@ -71,12 +62,11 @@ private:
void threadAborted(const QString &);
private:
- MonotoneThreadPtr getThread(const DatabaseFile &, const WorkspacePath &);
void removeThread(int);
QMap threadMap;
QMultiMap identMap;
- QMap workspaceMap;
+ QMap workspaceMap;
QSet stoppingThreads;
QString mtnPath;
============================================================
--- src/monotone/MonotoneProcess.h 51bdb9f10ae2e07c2e52150a041ad04e5cb31f00
+++ src/monotone/MonotoneProcess.h 55157714f3c5a8f543178b37308972f51d0d7209
@@ -38,7 +38,7 @@ public:
bool successful();
- static bool singleRun(const QStringList & params, const QString &, QString & output);
+ static bool singleRun(const QStringList &, const QString &, QString & output);
signals:
void output(const QString &);
============================================================
--- src/monotone/MonotoneThread.cpp 54f25692d5b1c89a4bd4ed42783bb4066a2b2e25
+++ src/monotone/MonotoneThread.cpp 9aee9375d154f37a24147ac87d1327806cc2ec46
@@ -170,7 +170,7 @@ MonotoneThread::MonotoneThread(
MonotoneThread::MonotoneThread(
int thread, const QString & m, const QString & d, const QString & w
) : QThread(), doAbort(false), commandNumber(0), threadNumber(thread),
- mtnBinary(m), databasePath(d), workspacePath(w)
+ mtnBinary(m), databasePath(d), monotoneHandle(w)
{}
MonotoneThread::~MonotoneThread() {}
@@ -248,7 +248,7 @@ void MonotoneThread::run()
args << "automate";
args << "stdio";
args << QString("--automate-stdio-size=%1").arg(StdioBufferSize);
- args << "--db" << databasePath;
+ args << "--handle" << databasePath;
if (!Settings::getBool("ReadUserRcFiles"))
{
@@ -259,9 +259,9 @@ void MonotoneThread::run()
args << "--rcfile" << rcFile.fileName();
// check whether we need to work on a specific workspace directory or not
- if (!workspacePath.isEmpty())
+ if (!monotoneHandle.isEmpty())
{
- process->setWorkingDirectory(workspacePath);
+ process->setWorkingDirectory(monotoneHandle);
}
else
{
============================================================
--- src/monotone/MonotoneThread.h ffbb03ad32a7f67796baebb2453a8e66a330ac72
+++ src/monotone/MonotoneThread.h e1f2a29a3682050496a8170dfcfa139f99e23b9f
@@ -126,10 +126,10 @@ public:
~MonotoneThread();
//! returns the database filepath which has been loaded by this thread
- inline QString getDatabaseFilePath() const { return databasePath; }
+ inline QString getMonotoneHandlePtrPath() const { return databasePath; }
//! returns the workspace which has been set by this thread for the running instance (if any)
- inline QString getWorkspacePath() const { return workspacePath; }
+ inline QString getWorkspacePath() const { return monotoneHandle; }
//! returns the amount of tasks which are in the queue
inline int getQueueCount() const { return queue.size(); }
@@ -186,7 +186,7 @@ private:
QString mtnBinary;
QString databasePath;
- QString workspacePath;
+ QString monotoneHandle;
QQueue queue;
QMutex lock;
============================================================
--- src/monotone/MonotoneUtil.cpp 30f5e234eb795caa6bb55747a51036aa5afaa94d
+++ src/monotone/MonotoneUtil.cpp de3e8bbff078c511a63a47bea8a4a1d014b0cb63
@@ -42,7 +42,8 @@ void MonotoneUtil::taskAborted(const Mon
emit finished();
}
-void MonotoneUtil::run(const MonotoneThreadPtr & thread, const MonotoneTaskPtr & task)
+void MonotoneUtil::run(const MonotoneThreadPtr & thread,
+ const MonotoneTaskPtr & task)
{
connect(
thread.data(), SIGNAL(taskFinished(const MonotoneTaskPtr &)),
@@ -73,29 +74,19 @@ void MonotoneUtil::run(const MonotoneThr
);
}
-void MonotoneUtil::runSynchronousWorkspaceTask(const WorkspacePath & workspace, const MonotoneTaskPtr & task)
+void MonotoneUtil::runSynchronousTask(const MonotoneHandlePtr & handle,
+ const MonotoneTaskPtr & task)
{
- MonotoneUtil * instance = new MonotoneUtil();
- instance->run(APP->manager()->getThreadForWorkspace(workspace), task);
- delete instance;
+ MonotoneUtil util;
+ util.run(APP->manager()->getThread(handle), task);
}
-void MonotoneUtil::runSynchronousDatabaseTask(const DatabaseFile & database, const MonotoneTaskPtr & task)
+QString MonotoneUtil::getBaseWorkspaceRevision(const MonotoneHandlePtr & handle)
{
- MonotoneUtil * instance = new MonotoneUtil();
- instance->run(APP->manager()->getThreadForDatabase(database), task);
- delete instance;
-}
+ I(handle->getType() == MonotoneHandle::workspace_handle);
-DatabaseFile MonotoneUtil::getDatabaseFile(const WorkspacePath & workspace)
-{
- return APP->manager()->getDatabaseFilePath(workspace);
-}
-
-QString MonotoneUtil::getBaseWorkspaceRevision(const WorkspacePath & workspace)
-{
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "get_base_revision_id"));
- runSynchronousWorkspaceTask(workspace, task);
+ runSynchronousTask(handle, task);
if (!task->isFinished())
{
C(QString("task '%1' aborted").arg(QString(task->getEncodedInput())));
@@ -117,10 +108,13 @@ QString MonotoneUtil::getBaseWorkspaceRe
return data;
}
-QString MonotoneUtil::getOption(const WorkspacePath & workspace, const QString & opt)
+QString MonotoneUtil::getOption(const MonotoneHandlePtr & handle,
+ const QString & opt)
{
+ I(handle->getType() == MonotoneHandle::workspace_handle);
+
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "get_option" << opt));
- runSynchronousWorkspaceTask(workspace, task);
+ runSynchronousTask(handle, task);
if (!task->isFinished())
{
C(QString("task '%1' aborted").arg(QString(task->getEncodedInput())));
@@ -141,9 +135,10 @@ QString MonotoneUtil::getOption(const Wo
return data;
}
-QString MonotoneUtil::getBranchName(const WorkspacePath & workspace, const QString & defaultBranch)
+QString MonotoneUtil::getBranchName(const MonotoneHandlePtr & handle,
+ const QString & defaultBranch)
{
- QString branchName = getOption(workspace, "branch");
+ QString branchName = getOption(handle, "branch");
if (branchName.size() == 0)
{
@@ -152,11 +147,11 @@ QString MonotoneUtil::getBranchName(cons
return branchName;
}
-QString MonotoneUtil::getBranchNameShort(const WorkspacePath & workspace)
+QString MonotoneUtil::getBranchNameShort(const MonotoneHandlePtr & handle)
{
- // FIXME: currently there is only support for the domain branch scheme
- // tld.domain.project.branch
- QString branchName = getBranchName(workspace);
+ // FIXME: currently there is only support for the domain
+ // branch scheme "tld.domain.project.branch"
+ QString branchName = getBranchName(handle);
QStringList parts = branchName.split('.');
if (parts.size() == 1) return branchName;
@@ -183,10 +178,11 @@ QString MonotoneUtil::getBranchNameShort
return shortBranchName;
}
-QStringList MonotoneUtil::resolveSelector(const DatabaseFile & db, const QString & selector)
+QStringList MonotoneUtil::resolveSelector(const MonotoneHandlePtr & handle,
+ const QString & selector)
{
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "select" << selector));
- runSynchronousDatabaseTask(db, task);
+ runSynchronousTask(handle, task);
if (!task->isFinished())
{
C(QString("task '%1' aborted").arg(QString(task->getEncodedInput())));
@@ -205,10 +201,11 @@ QStringList MonotoneUtil::resolveSelecto
return revList;
}
-CertList MonotoneUtil::getCerts(const DatabaseFile & db, const QString & revision)
+CertList MonotoneUtil::getCerts(const MonotoneHandlePtr & handle,
+ const QString & revision)
{
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "certs" << revision));
- runSynchronousDatabaseTask(db, task);
+ runSynchronousTask(handle, task);
if (!task->isFinished())
{
C(QString("task '%1' aborted").arg(QString(task->getEncodedInput())));
@@ -231,7 +228,7 @@ CertList MonotoneUtil::getCerts(const Da
return certs;
}
-bool MonotoneUtil::createCert(const DatabaseFile & db,
+bool MonotoneUtil::createCert(const MonotoneHandlePtr & handle,
const QString & revision, const QString & name,
const QString & value, const QString & key)
{
@@ -240,7 +237,7 @@ bool MonotoneUtil::createCert(const Data
QStringList() << "k" << key
));
- runSynchronousDatabaseTask(db, task);
+ runSynchronousTask(handle, task);
if (!task->isFinished())
{
@@ -258,10 +255,11 @@ bool MonotoneUtil::createCert(const Data
return true;
}
-FileEntryList MonotoneUtil::getRevisionManifest(const DatabaseFile & db, const QString & revision)
+FileEntryList MonotoneUtil::getRevisionManifest(const MonotoneHandlePtr & handle,
+ const QString & revision)
{
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "get_manifest_of" << revision));
- runSynchronousDatabaseTask(db, task);
+ runSynchronousTask(handle, task);
if (!task->isFinished())
{
C(QString("task '%1' aborted").arg(QString(task->getEncodedInput())));
@@ -321,10 +319,10 @@ FileEntryList MonotoneUtil::getRevisionM
return entries;
}
-QMap MonotoneUtil::getPublicKeyMap(const DatabaseFile & db)
+QMap MonotoneUtil::getPublicKeyMap(const MonotoneHandlePtr & handle)
{
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "keys"));
- runSynchronousDatabaseTask(db, task);
+ runSynchronousTask(handle, task);
if (!task->isFinished())
{
C(QString("task '%1' aborted").arg(QString(task->getEncodedInput())));
@@ -374,10 +372,10 @@ QMap MonotoneUtil::get
return keys;
}
-QMap MonotoneUtil::getPrivateKeyMap(const DatabaseFile & db)
+QMap MonotoneUtil::getPrivateKeyMap(const MonotoneHandlePtr & handle)
{
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "keys"));
- runSynchronousDatabaseTask(db, task);
+ runSynchronousTask(handle, task);
if (!task->isFinished())
{
C(QString("task '%1' aborted").arg(QString(task->getEncodedInput())));
@@ -427,10 +425,11 @@ QMap MonotoneUtil::get
return keys;
}
-QString MonotoneUtil::getFileId(const DatabaseFile & db, const QString & path)
+QString MonotoneUtil::getFileId(const MonotoneHandlePtr & handle,
+ const QString & path)
{
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "identify" << path));
- runSynchronousDatabaseTask(db, task);
+ runSynchronousTask(handle, task);
if (!task->isFinished())
{
C(QString("task '%1' aborted").arg(QString(task->getEncodedInput())));
@@ -449,10 +448,10 @@ QString MonotoneUtil::getFileId(const Da
return data;
}
-QStringList MonotoneUtil::getRoots(const DatabaseFile & db, bool & ok)
+QStringList MonotoneUtil::getRoots(const MonotoneHandlePtr & handle, bool & ok)
{
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "roots"));
- runSynchronousDatabaseTask(db, task);
+ runSynchronousTask(handle, task);
if (!task->isFinished())
{
C(QString("task '%1' aborted").arg(QString(task->getEncodedInput())));
@@ -473,14 +472,15 @@ QStringList MonotoneUtil::getRoots(const
return data.split('\n', QString::SkipEmptyParts);
}
-QStringList MonotoneUtil::getCommonAncestors(const DatabaseFile & db, const QStringList & revs)
+QStringList MonotoneUtil::getCommonAncestors(const MonotoneHandlePtr & handle,
+ const QStringList & revs)
{
QStringList args;
args << "common_ancestors";
args += revs;
MonotoneTaskPtr task(new MonotoneTask(args));
- runSynchronousDatabaseTask(db, task);
+ runSynchronousTask(handle, task);
if (!task->isFinished())
{
C(QString("task '%1' aborted").arg(QString(task->getEncodedInput())));
@@ -498,12 +498,14 @@ QStringList MonotoneUtil::getCommonAnces
return data.split('\n', QString::SkipEmptyParts);
}
-QStringList MonotoneUtil::getPreviousContentMarks(const DatabaseFile & db, const QString & file, const QString & startRev)
+QStringList MonotoneUtil::getPreviousContentMarks(const MonotoneHandlePtr & handle,
+ const QString & file,
+ const QString & startRev)
{
QStringList args;
args << "get_content_changed" << startRev << file;
MonotoneTaskPtr task(new MonotoneTask(args));
- runSynchronousDatabaseTask(db, task);
+ runSynchronousTask(handle, task);
if (!task->isFinished())
{
C(QString("task '%1' aborted").arg(QString(task->getEncodedInput())));
@@ -529,13 +531,14 @@ QStringList MonotoneUtil::getPreviousCon
return revs;
}
-QStringList MonotoneUtil::topsortRevisions(const DatabaseFile & db, const QStringList & revs)
+QStringList MonotoneUtil::topsortRevisions(const MonotoneHandlePtr & handle,
+ const QStringList & revs)
{
QStringList args;
args << "toposort";
args += revs;
MonotoneTaskPtr task(new MonotoneTask(args));
- runSynchronousDatabaseTask(db, task);
+ runSynchronousTask(handle, task);
if (!task->isFinished())
{
C(QString("task '%1' aborted").arg(QString(task->getEncodedInput())));
@@ -554,11 +557,18 @@ QStringList MonotoneUtil::topsortRevisio
return data.split("\n", QString::SkipEmptyParts);
}
-bool MonotoneUtil::getAttribute(const WorkspacePath & ws, const QString & path,
- const QString & attrname, QPair & attrval)
+bool MonotoneUtil::getAttribute(const MonotoneHandlePtr & handle,
+ const QString & path,
+ const QString & attrname,
+ QPair & attrval)
{
- MonotoneTaskPtr task(new MonotoneTask(QStringList() << "get_attributes" << path));
- runSynchronousWorkspaceTask(ws, task);
+ I(handle->getType() == MonotoneHandle::workspace_handle);
+
+ MonotoneTaskPtr task(new MonotoneTask(
+ QStringList() << "get_attributes" << path
+ ));
+ runSynchronousTask(handle, task);
+
if (!task->isFinished())
{
C(QString("task '%1' aborted").arg(QString(task->getEncodedInput())));
@@ -590,10 +600,13 @@ bool MonotoneUtil::getAttribute(const Wo
return false;
}
-bool MonotoneUtil::getAttribute(const DatabaseFile & db, const QString & revision,
- const QString & path, const QString & attrname, QString & attrval)
+bool MonotoneUtil::getAttribute(const MonotoneHandlePtr & handle,
+ const QString & revision,
+ const QString & path,
+ const QString & attrname,
+ QString & attrval)
{
- FileEntryList entryList = getRevisionManifest(db, revision);
+ FileEntryList entryList = getRevisionManifest(handle, revision);
foreach (const FileEntry & en, entryList)
{
@@ -608,13 +621,13 @@ bool MonotoneUtil::getAttribute(const Da
return false;
}
-QMap MonotoneUtil::getDatabaseVariables(const DatabaseFile & db,
+QMap MonotoneUtil::getDatabaseVariables(const MonotoneHandlePtr & handle,
const QString & domain)
{
QStringList args;
args << "get_db_variables" << domain;
MonotoneTaskPtr task(new MonotoneTask(args));
- runSynchronousDatabaseTask(db, task);
+ runSynchronousTask(handle, task);
if (!task->isFinished())
{
C(QString("task '%1' aborted").arg(QString(task->getEncodedInput())));
@@ -647,15 +660,15 @@ QMap MonotoneUtil::get
return entries;
}
-QString MonotoneUtil::getCorrespondingPath(const DatabaseFile & db,
- const QString & rev1,
- const QString & filePath,
- const QString & rev2)
+QString MonotoneUtil::getCorrespondingPath(const MonotoneHandlePtr & handle,
+ const QString & rev1,
+ const QString & filePath,
+ const QString & rev2)
{
QStringList args;
args << "get_corresponding_path" << rev1 << filePath << rev2;
MonotoneTaskPtr task(new MonotoneTask(args));
- runSynchronousDatabaseTask(db, task);
+ runSynchronousTask(handle, task);
if (!task->isFinished())
{
C(QString("task '%1' aborted").arg(QString(task->getEncodedInput())));
============================================================
--- src/monotone/MonotoneUtil.h a42494f54155101db9f71a84a32ca3cfb94f2645
+++ src/monotone/MonotoneUtil.h 9af29c54ee20c9145b5a619daf276c1bd14661fc
@@ -28,28 +28,26 @@ public:
{
Q_OBJECT
public:
- static void runSynchronousWorkspaceTask(const WorkspacePath &, const MonotoneTaskPtr &);
- static void runSynchronousDatabaseTask(const DatabaseFile &, const MonotoneTaskPtr &);
- static DatabaseFile getDatabaseFile(const WorkspacePath &);
- static QString getBaseWorkspaceRevision(const WorkspacePath &);
- static QString getOption(const WorkspacePath &, const QString &);
- static QString getBranchName(const WorkspacePath &, const QString & defaultBranch = tr("[unknown branch]"));
- static QString getBranchNameShort(const WorkspacePath &);
- static QStringList resolveSelector(const DatabaseFile &, const QString &);
- static CertList getCerts(const DatabaseFile &, const QString &);
- static bool createCert(const DatabaseFile & db, const QString &, const QString &, const QString &, const QString &);
- static FileEntryList getRevisionManifest(const DatabaseFile &, const QString &);
- static QMap getPublicKeyMap(const DatabaseFile &);
- static QMap getPrivateKeyMap(const DatabaseFile &);
- static QStringList getPreviousContentMarks(const DatabaseFile &, const QString &, const QString &);
- static QString getCorrespondingPath(const DatabaseFile &, const QString &, const QString &, const QString &);
- static QString getFileId(const DatabaseFile &, const QString &);
- static QStringList getRoots(const DatabaseFile &, bool &);
- static QStringList topsortRevisions(const DatabaseFile &, const QStringList &);
- static QStringList getCommonAncestors(const DatabaseFile &, const QStringList &);
- static bool getAttribute(const WorkspacePath &, const QString &, const QString &, QPair &);
- static bool getAttribute(const DatabaseFile &, const QString &, const QString &, const QString &, QString &);
- static QMap getDatabaseVariables(const DatabaseFile &, const QString &);
+ static void runSynchronousTask(const MonotoneHandlePtr &, const MonotoneTaskPtr &);
+ static QString getBaseWorkspaceRevision(const MonotoneHandlePtr &);
+ static QString getOption(const MonotoneHandlePtr &, const QString &);
+ static QString getBranchName(const MonotoneHandlePtr &, const QString & defaultBranch = tr("[unknown branch]"));
+ static QString getBranchNameShort(const MonotoneHandlePtr &);
+ static QStringList resolveSelector(const MonotoneHandlePtr &, const QString &);
+ static CertList getCerts(const MonotoneHandlePtr &, const QString &);
+ static bool createCert(const MonotoneHandlePtr & db, const QString &, const QString &, const QString &, const QString &);
+ static FileEntryList getRevisionManifest(const MonotoneHandlePtr &, const QString &);
+ static QMap getPublicKeyMap(const MonotoneHandlePtr &);
+ static QMap getPrivateKeyMap(const MonotoneHandlePtr &);
+ static QStringList getPreviousContentMarks(const MonotoneHandlePtr &, const QString &, const QString &);
+ static QString getCorrespondingPath(const MonotoneHandlePtr &, const QString &, const QString &, const QString &);
+ static QString getFileId(const MonotoneHandlePtr &, const QString &);
+ static QStringList getRoots(const MonotoneHandlePtr &, bool &);
+ static QStringList topsortRevisions(const MonotoneHandlePtr &, const QStringList &);
+ static QStringList getCommonAncestors(const MonotoneHandlePtr &, const QStringList &);
+ static bool getAttribute(const MonotoneHandlePtr &, const QString &, const QString &, QPair &);
+ static bool getAttribute(const MonotoneHandlePtr &, const QString &, const QString &, const QString &, QString &);
+ static QMap getDatabaseVariables(const MonotoneHandlePtr &, const QString &);
// FIXME: decide what to do with that
static QString stripMtnPrefix(const QString &);
============================================================
--- src/monotone/WorkspaceCommitter.cpp 552526dc9dacf546ad039cbaa2bf03d7609cdc4d
+++ src/monotone/WorkspaceCommitter.cpp 68b4a90293c03e120488357df87e332e46d6cb73
@@ -23,8 +23,8 @@
#include
-WorkspaceCommitter::WorkspaceCommitter(const WorkspacePath & workspace, const GetRevision * model)
- : QObject(0), workspacePath(workspace), revModel(model) {}
+WorkspaceCommitter::WorkspaceCommitter(const MonotoneHandlePtr & workspace, const GetRevision * model)
+ : QObject(0), monotoneHandle(workspace), revModel(model) {}
WorkspaceCommitter::~WorkspaceCommitter() {}
@@ -48,7 +48,7 @@ bool WorkspaceCommitter::run(const QStri
certs.insert("date",
QDateTime::currentDateTime().toUTC().toString(Qt::ISODate));
- QDir workspaceDir(workspacePath);
+ QDir workspaceDir(monotoneHandle);
I(workspaceDir.exists());
//
@@ -76,7 +76,7 @@ bool WorkspaceCommitter::run(const QStri
QStringList() << "put_revision" << revModel->getRevisionText()
));
- MonotoneUtil::runSynchronousWorkspaceTask(workspacePath, task);
+ MonotoneUtil::runSynchronousTask(monotoneHandle, task);
if (!task->isFinished()) F("task aborted");
@@ -108,7 +108,7 @@ bool WorkspaceCommitter::writeRevision(c
bool WorkspaceCommitter::writeRevision(const QString & revisionId)
{
- QDir workspaceDir(workspacePath);
+ QDir workspaceDir(monotoneHandle);
I(workspaceDir.cd("_MTN"));
QFile file(workspaceDir.filePath("revision"));
@@ -143,7 +143,7 @@ bool WorkspaceCommitter::writeOptions(co
bool WorkspaceCommitter::writeOptions(const QMap & certs)
{
- QDir workspaceDir(workspacePath);
+ QDir workspaceDir(monotoneHandle);
I(workspaceDir.cd("_MTN"));
QFile file(workspaceDir.filePath("options"));
@@ -179,7 +179,7 @@ bool WorkspaceCommitter::putFile(const Q
bool WorkspaceCommitter::putFile(const QString & fileName, const QString & fileId, const QString & baseId)
{
- QDir workspaceDir(workspacePath);
+ QDir workspaceDir(monotoneHandle);
QFile file(workspaceDir.filePath(fileName));
if (!file.exists())
{
@@ -207,7 +207,7 @@ bool WorkspaceCommitter::putFile(const Q
file.close();
MonotoneTaskPtr task(new MonotoneTask(command));
- MonotoneUtil::runSynchronousWorkspaceTask(workspacePath, task);
+ MonotoneUtil::runSynchronousTask(monotoneHandle, task);
if (!task->isFinished()) F("task aborted");
QString data = task->getDecodedOutput();
@@ -240,7 +240,7 @@ bool WorkspaceCommitter::putCert(const Q
QStringList() << "key" << commitKey
));
- MonotoneUtil::runSynchronousWorkspaceTask(workspacePath, task);
+ MonotoneUtil::runSynchronousTask(monotoneHandle, task);
if (!task->isFinished()) F("task aborted");
QString data = task->getDecodedOutput();
============================================================
--- src/monotone/WorkspaceCommitter.h c2507e2154158f9745dfb7743d6bf4b0b9544d17
+++ src/monotone/WorkspaceCommitter.h 270854dcaa6e3bd810b62c15acc611fec7886fa4
@@ -33,7 +33,7 @@ public:
{
Q_OBJECT
public:
- WorkspaceCommitter(const WorkspacePath &, const GetRevision *);
+ WorkspaceCommitter(const MonotoneHandlePtr &, const GetRevision *);
~WorkspaceCommitter();
bool run(const QString &, const QString &, const QString &, const QString &);
@@ -46,7 +46,7 @@ private:
bool writeOptions(const QMap &);
QString revisionId;
- WorkspacePath workspacePath;
+ MonotoneHandlePtr monotoneHandle;
const GetRevision * revModel;
};
============================================================
--- src/monotone/WorkspaceCreator.cpp e2abf1e85e13092c96106650fb5a29c9d1c040bf
+++ src/monotone/WorkspaceCreator.cpp b2920894fe08036209a860d94c524eca56c10f4b
@@ -22,15 +22,16 @@
#include
-WorkspaceCreator::WorkspaceCreator(const QString & databaseFile, const QString & rev, const QDir & dir)
- : FileExporter(databaseFile, rev, dir)
+WorkspaceCreator::WorkspaceCreator(const MonotoneHandlePtr & monotoneHandle,
+ const QString & rev, const QDir & dir)
+ : FileExporter(monotoneHandle, rev, dir)
{}
bool WorkspaceCreator::run()
{
// at first determine the branch name(s) of the revision and let the
// user select one branch of a list of branches
- CertList certs = MonotoneUtil::getCerts(databaseFile, revision);
+ CertList certs = MonotoneUtil::getCerts(monotoneHandle, revision);
QStringList branches = certs.findByNameValues("branch");
if (branches.size() == 0)
@@ -59,7 +60,7 @@ bool WorkspaceCreator::run()
selectedBranch = branch;
}
- if (!createBookkeepingDirectory(rootDir, databaseFile,
+ if (!createBookkeepingDirectory(rootDir, monotoneHandle,
selectedBranch, revision))
{
return false;
@@ -67,12 +68,12 @@ bool WorkspaceCreator::run()
// finally query and export the manifest contents
return FileExporter::run(
- MonotoneUtil::getRevisionManifest(databaseFile, revision)
+ MonotoneUtil::getRevisionManifest(monotoneHandle, revision)
);
}
bool WorkspaceCreator::createBookkeepingDirectory(QDir workspace,
- const DatabaseFile & db,
+ const MonotoneHandlePtr & handle,
const QString & branch,
const QString & revision)
{
@@ -97,7 +98,7 @@ bool WorkspaceCreator::createBookkeeping
StanzaList stanzas;
Stanza stanza;
- stanza.append(StanzaEntry("database", QStringList() << db));
+ stanza.append(StanzaEntry("database", QStringList() << handle));
stanza.append(StanzaEntry("branch", QStringList() << branch));
stanzas.append(stanza);
============================================================
--- src/monotone/WorkspaceCreator.h fb360d6db113e9ee9e6a7390be170d1e43f20e48
+++ src/monotone/WorkspaceCreator.h 3af419e9c390d01109e07f33f7708c976a4ae765
@@ -25,11 +25,11 @@ public:
{
Q_OBJECT
public:
- WorkspaceCreator(const DatabaseFile &, const QString &, const QDir &);
+ WorkspaceCreator(const MonotoneHandlePtr &, const QString &, const QDir &);
bool run();
static bool createBookkeepingDirectory(QDir workspace,
- const DatabaseFile & db,
+ const MonotoneHandlePtr & db,
const QString & branch,
const QString & revision = QString());
};
============================================================
--- src/view/dialogs/AnnotateFile.cpp 9d9aae6eaa58f6b1f01872500ced7a7097664d49
+++ src/view/dialogs/AnnotateFile.cpp 24eb167f9665d569b034acfa5520f15d9fcd4f59
@@ -22,8 +22,8 @@
#include
#include
-AnnotateFile::AnnotateFile(QWidget * parent, const DatabaseFile & db)
- : Dialog(parent), databaseFile(db), annotateModel(0)
+AnnotateFile::AnnotateFile(QWidget * parent, const MonotoneHandlePtr & handle)
+ : Dialog(parent), monotoneHandle(handle), annotateModel(0)
{
setupUi(this);
Dialog::init();
@@ -35,7 +35,7 @@ AnnotateFile::AnnotateFile(QWidget * par
baseRevision, SLOT(clear())
);
- certList->setKeyMap(MonotoneUtil::getPublicKeyMap(databaseFile));
+ certList->setKeyMap(MonotoneUtil::getPublicKeyMap(monotoneHandle));
annotateModel = new Annotate(this);
annotationView->setModel(annotateModel);
@@ -101,7 +101,7 @@ void AnnotateFile::read(const QString &
baseRevision->setCurrentIndex(pos);
setWindowTitle(tr("Annotation of %1").arg(filePath));
- annotateModel->readAnnotation(databaseFile, rev, filePath);
+ annotateModel->readAnnotation(monotoneHandle, rev, filePath);
progressWidget->show();
}
@@ -116,7 +116,7 @@ void AnnotateFile::setSelectedRevision(c
if (!currentBaseRevision.isEmpty())
{
newPath = MonotoneUtil::getCorrespondingPath(
- databaseFile, currentBaseRevision, filePath, rev
+ monotoneHandle, currentBaseRevision, filePath, rev
);
}
@@ -162,7 +162,7 @@ void AnnotateFile::contextMenuRequested(
Q_UNUSED(indexList);
QString rev = annotateModel->getSelectedRevision();
- QStringList parents = MonotoneUtil::resolveSelector(databaseFile, "p:" + rev);
+ QStringList parents = MonotoneUtil::resolveSelector(monotoneHandle, "p:" + rev);
QMenu menu(this);
QFont activeFont;
============================================================
--- src/view/dialogs/AnnotateFile.h 7f3392e328b31a5daf075dd8f95491d6846ffe57
+++ src/view/dialogs/AnnotateFile.h 6676a9a9d44f33d362f0998dcb4d1de9ab642e32
@@ -29,7 +29,7 @@ public:
Q_OBJECT
public:
- AnnotateFile(QWidget *, const DatabaseFile &);
+ AnnotateFile(QWidget *, const MonotoneHandlePtr &);
~AnnotateFile();
public slots:
@@ -43,7 +43,7 @@ private:
void revisionDiff(const QString &, const QString &, const QString &);
private:
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
Annotate * annotateModel;
QString filePath;
============================================================
--- src/view/dialogs/ChangesetBrowser.cpp f117411e2282c972bfbc24d252c498b49dd6cc61
+++ src/view/dialogs/ChangesetBrowser.cpp f9ac55614adfd2af499a463e0c5da320905b40ad
@@ -25,8 +25,8 @@
#include
#include
-ChangesetBrowser::ChangesetBrowser(QWidget * parent, const DatabaseFile & db)
- : Dialog(parent), databaseFile(db), branchModel(0)
+ChangesetBrowser::ChangesetBrowser(QWidget * parent, const MonotoneHandlePtr & handle)
+ : Dialog(parent), monotoneHandle(handle), branchModel(0)
{
setupUi(this);
Dialog::init();
@@ -42,7 +42,7 @@ ChangesetBrowser::ChangesetBrowser(QWidg
changesetsSplitter->restoreState();
changeLogSplitter->restoreState();
- branchModel = new Branches(this, databaseFile);
+ branchModel = new Branches(this, monotoneHandle);
branchProxyModel = new BranchesProxyModel(this);
branchProxyModel->setSourceModel(branchModel);
@@ -84,9 +84,9 @@ ChangesetBrowser::ChangesetBrowser(QWidg
branchModel, SLOT(readBranches())
);
- changeLog->setKeyMap(MonotoneUtil::getPublicKeyMap(databaseFile));
+ changeLog->setKeyMap(MonotoneUtil::getPublicKeyMap(monotoneHandle));
- branchLogModel = new GetBranchLog(this, databaseFile);
+ branchLogModel = new GetBranchLog(this, monotoneHandle);
changesetView->setModel(branchLogModel);
changesetView->setRootIsDecorated(false);
@@ -222,7 +222,7 @@ void ChangesetBrowser::changesetViewClic
QModelIndex revIdx = branchLogModel->index(idx.row(), 3, QModelIndex());
currentRevision = branchLogModel->data(revIdx, Qt::DisplayRole).toString();
changeLog->setCertList(branchLogModel->getCerts(currentRevision));
- revisionModel->readDatabaseRevision(databaseFile, currentRevision);
+ revisionModel->readDatabaseRevision(monotoneHandle, currentRevision);
revisionParents->clear();
multipleParents->setVisible(false);
}
@@ -426,7 +426,7 @@ void ChangesetBrowser::suspendBranch(con
// since suspend certs are ignored by default already, we should not
// need to check if the returned revisions have already been suspended
QStringList revisions =
- MonotoneUtil::resolveSelector(databaseFile, "h:" + branch);
+ MonotoneUtil::resolveSelector(monotoneHandle, "h:" + branch);
if (revisions.size() == 0)
{
@@ -441,7 +441,7 @@ void ChangesetBrowser::suspendBranch(con
}
QMap privateKeys =
- MonotoneUtil::getPrivateKeyMap(databaseFile);
+ MonotoneUtil::getPrivateKeyMap(monotoneHandle);
if (privateKeys.size() == 0)
{
@@ -482,7 +482,7 @@ void ChangesetBrowser::suspendBranch(con
foreach (const QString & revision, revisions)
{
- if (!MonotoneUtil::createCert(databaseFile, revision, "suspend", branch, key))
+ if (!MonotoneUtil::createCert(monotoneHandle, revision, "suspend", branch, key))
{
QMessageBox::critical(
this,
============================================================
--- src/view/dialogs/ChangesetBrowser.h 2af4dcc3a6843e8545d98b7054fb7c9b398e7aaa
+++ src/view/dialogs/ChangesetBrowser.h 3f4d7d1fbc5c51c9150d38e5ec7aa4c6645af8f0
@@ -32,7 +32,7 @@ public:
{
Q_OBJECT
public:
- ChangesetBrowser(QWidget *, const DatabaseFile &);
+ ChangesetBrowser(QWidget *, const MonotoneHandlePtr &);
~ChangesetBrowser();
void init();
@@ -70,7 +70,7 @@ private:
void suspendBranch(const QString &);
private:
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
BranchesProxyModel * branchProxyModel;
Branches * branchModel;
GetBranchLog * branchLogModel;
============================================================
--- src/view/dialogs/CheckoutRevision.cpp 08a5fb3bd73416a58393d9271b0e9f22710805d6
+++ src/view/dialogs/CheckoutRevision.cpp effa35c60c7d2cd8668de010d3ec98544f9b5c23
@@ -25,17 +25,17 @@
#include
#include
-CheckoutRevision::CheckoutRevision(QWidget * parent, const DatabaseFile & database)
- : Dialog(parent), databaseFile(database)
+CheckoutRevision::CheckoutRevision(QWidget * parent, const MonotoneHandlePtr & database)
+ : Dialog(parent), monotoneHandle(database)
{
setupUi(this);
Dialog::init();
- branchesModel = new Branches(this, databaseFile);
+ branchesModel = new Branches(this, monotoneHandle);
branchesModel->readBranches();
branchList->setModel(branchesModel);
- tagsModel = new Tags(this, databaseFile);
+ tagsModel = new Tags(this, monotoneHandle);
tagsModel->readTags(QString());
tagList->setModel(tagsModel);
@@ -135,7 +135,7 @@ void CheckoutRevision::accept()
Settings::addItemToList("RecentCheckoutSelectors", selection, 10);
}
- QStringList revList(MonotoneUtil::resolveSelector(databaseFile, selector));
+ QStringList revList(MonotoneUtil::resolveSelector(monotoneHandle, selector));
if (revList.size() == 0)
{
@@ -178,7 +178,7 @@ void CheckoutRevision::accept()
return;
}
- WorkspaceCreator creator(databaseFile, revList.at(0), checkoutDir);
+ WorkspaceCreator creator(monotoneHandle, revList.at(0), checkoutDir);
if (!creator.run())
{
============================================================
--- src/view/dialogs/CheckoutRevision.h 643632486232552a5647b6229826ecffae77aa81
+++ src/view/dialogs/CheckoutRevision.h d3a32557f6207f720fac706237c2c3ab41fa695f
@@ -32,7 +32,7 @@ public:
Q_OBJECT
public:
- CheckoutRevision(QWidget *, const DatabaseFile &);
+ CheckoutRevision(QWidget *, const MonotoneHandlePtr &);
~CheckoutRevision();
inline QString getSelectedRevision() const { return selectedRevisionId; }
inline QDir getSelectedCheckoutDirectory() const {
@@ -52,7 +52,7 @@ private:
QCompleter * selectorCompleter;
QString selectedRevisionId;
QDir selectedCheckoutDirectory;
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
private slots:
void slotSelectRevision();
============================================================
--- src/view/dialogs/CommitRevision.cpp cea026866a5a7b92bfe0784e1741d009069f2a25
+++ src/view/dialogs/CommitRevision.cpp 876a3055bffea87de28896fc8a9034e0314a0369
@@ -26,8 +26,8 @@
#include
#include
-CommitRevision::CommitRevision(QWidget * parent, const WorkspacePath & workspace)
- : Dialog(parent), workspacePath(workspace)
+CommitRevision::CommitRevision(QWidget * parent, const MonotoneHandlePtr & workspace)
+ : Dialog(parent), monotoneHandle(workspace)
{
setupUi(this);
Dialog::init();
@@ -63,7 +63,7 @@ void CommitRevision::readWorkspaceRevisi
void CommitRevision::readWorkspaceRevision(const QStringList & paths)
{
- revModel->readWorkspaceRevision(workspacePath, paths);
+ revModel->readWorkspaceRevision(monotoneHandle, paths);
// while we're inserting items we don't want to receive these signals
// i.e. we don't want to pre-fill the changelog text
@@ -92,7 +92,7 @@ void CommitRevision::readWorkspaceRevisi
);
QMap privateKeys =
- MonotoneUtil::getPrivateKeyMap(MonotoneUtil::getDatabaseFile(workspacePath));
+ MonotoneUtil::getPrivateKeyMap(MonotoneUtil::getMonotoneHandlePtr(monotoneHandle));
if (privateKeys.size() == 0)
{
@@ -130,7 +130,7 @@ void CommitRevision::accept()
Settings::addItemToList("ChangelogEntries", changelogEntry->toPlainText(), 10);
- QString branch = MonotoneUtil::getBranchName(workspacePath, QString());
+ QString branch = MonotoneUtil::getBranchName(monotoneHandle, QString());
if (branch.isEmpty() && !checkAltBranch->isChecked())
{
@@ -183,7 +183,7 @@ void CommitRevision::accept()
QString selectedKey = keys->itemData(keys->currentIndex()).toString();
- WorkspaceCommitter committer(workspacePath, revModel);
+ WorkspaceCommitter committer(monotoneHandle, revModel);
if (!committer.run(selectedKey, branch, author, changelogEntry->toPlainText()))
{
============================================================
--- src/view/dialogs/CommitRevision.h c4debe06e5d659af57f0f7af563c0a3562b433d1
+++ src/view/dialogs/CommitRevision.h cf9b6fc36738e60a002383c833eef5e60a8ddd9c
@@ -28,7 +28,7 @@ public:
Q_OBJECT
public:
- CommitRevision(QWidget *, const WorkspacePath &);
+ CommitRevision(QWidget *, const MonotoneHandlePtr &);
~CommitRevision();
public slots:
@@ -40,7 +40,7 @@ private:
private:
GetRevision * revModel;
- WorkspacePath workspacePath;
+ MonotoneHandlePtr monotoneHandle;
private slots:
void setChangelogEntryFromList(int);
============================================================
--- src/view/dialogs/CreateCert.cpp ac94b7b337dad8ddffb2ed525df90360bd54e261
+++ src/view/dialogs/CreateCert.cpp 281888ab6c2794a51051fd5c1f79affbb4d65f25
@@ -21,8 +21,8 @@
#include
-CreateCert::CreateCert(QWidget * parent, const DatabaseFile & db)
- : Dialog(parent), database(db)
+CreateCert::CreateCert(QWidget * parent, const MonotoneHandlePtr & handle)
+ : Dialog(parent), database(handle)
{
setupUi(this);
Dialog::init();
============================================================
--- src/view/dialogs/CreateCert.h 3252da5f64e71bb138f3450c7d9ed48066f9382b
+++ src/view/dialogs/CreateCert.h c03f9fd29d66fb7c858c4845fb06506086d1050f
@@ -30,7 +30,7 @@ public:
Q_OBJECT
public:
- CreateCert(QWidget *, const DatabaseFile &);
+ CreateCert(QWidget *, const MonotoneHandlePtr &);
~CreateCert();
void init(const QString &, const QString & certName = QString());
@@ -48,7 +48,7 @@ private:
QMap nameTypeMap;
QMap typeWidgetMap;
- DatabaseFile database;
+ MonotoneHandlePtr database;
private slots:
void nameIndexChanged(int index);
============================================================
--- src/view/dialogs/CreateDatabase.cpp 3e3252bd4c9fe7b305adc2c3b939eb1210e35202
+++ src/view/dialogs/CreateDatabase.cpp 717f464eba28ebbe024b734c67db6f11727efb02
@@ -96,7 +96,7 @@ void CreateDatabase::accept()
}
QStringList params;
- params << "db" << "init" << "-d" << filePath;
+ params << "handle" << "init" << "-d" << filePath;
QString output;
bool res = MonotoneProcess::singleRun(params, QString(), output);
@@ -122,7 +122,7 @@ void CreateDatabase::doBrowseFiles()
QString fileName =
QFileDialog::getSaveFileName(this, tr("Save Database"),
"database.mtn",
- tr("Monotone databases (*.mtn *.db)"));
+ tr("Monotone databases (*.mtn *.handle)"));
databasePath->setText(fileName);
}
============================================================
--- src/view/dialogs/DatabaseDialogManager.cpp 052e2022d9c33fe5a22d8ada9d29dcaa8dc13c4e
+++ src/view/dialogs/DatabaseDialogManager.cpp 735c030a3f05b6e99ab9590c57dc8a1b46d8c2be
@@ -68,9 +68,9 @@ void DatabaseDialogManager::closeAllDial
DialogManager::closeAllDialogs();
}
-void DatabaseDialogManager::init(const DatabaseFile & db)
+void DatabaseDialogManager::init(const MonotoneHandlePtr & handle)
{
- databaseFile = db;
+ monotoneHandle = handle;
cleanup();
}
@@ -78,7 +78,7 @@ void DatabaseDialogManager::showChangese
{
if (!changesetBrowser)
{
- changesetBrowser = new ChangesetBrowser(parentWidget(), databaseFile);
+ changesetBrowser = new ChangesetBrowser(parentWidget(), monotoneHandle);
connect(
changesetBrowser, SIGNAL(certCreated(const QString &, const QString &,
@@ -129,7 +129,7 @@ void DatabaseDialogManager::showCheckout
{
if (!checkoutRevision)
{
- checkoutRevision = new CheckoutRevision(parentWidget(), databaseFile);
+ checkoutRevision = new CheckoutRevision(parentWidget(), monotoneHandle);
connect(
checkoutRevision, SIGNAL(selectRevisionFromSelector(const QString &)),
@@ -158,7 +158,7 @@ void DatabaseDialogManager::showFileDiff
fileDiff = new FileDiff(parentWidget());
}
- fileDiff->forDatabase(databaseFile, file, base, target);
+ fileDiff->forDatabase(monotoneHandle, file, base, target);
showDialog(fileDiff);
}
@@ -166,7 +166,7 @@ void DatabaseDialogManager::showFileHist
{
if (!fileHistory)
{
- fileHistory = new FileHistory(parentWidget(), databaseFile);
+ fileHistory = new FileHistory(parentWidget(), monotoneHandle);
connect(
fileHistory, SIGNAL(fileDiff(const QString &, const QString &, const QString &)),
@@ -182,7 +182,7 @@ void DatabaseDialogManager::showGenerate
{
if (!generateKeypair)
{
- generateKeypair = new GenerateKeypair(parentWidget(), databaseFile);
+ generateKeypair = new GenerateKeypair(parentWidget(), monotoneHandle);
connect(
generateKeypair, SIGNAL(keypairGenerated(const QString &)),
@@ -197,7 +197,7 @@ void DatabaseDialogManager::showNetsync(
{
if (!netsync)
{
- netsync = new Netsync(parentWidget(), databaseFile);
+ netsync = new Netsync(parentWidget(), monotoneHandle);
}
netsync->init();
@@ -208,7 +208,7 @@ void DatabaseDialogManager::showKeyManag
{
if (!keyManagement)
{
- keyManagement = new KeyManagement(parentWidget(), databaseFile);
+ keyManagement = new KeyManagement(parentWidget(), monotoneHandle);
connect(
keyManagement, SIGNAL(generateKeypair()),
@@ -247,7 +247,7 @@ void DatabaseDialogManager::showRevision
);
}
- revisionDiff->forDatabase(databaseFile, path, base, target);
+ revisionDiff->forDatabase(monotoneHandle, path, base, target);
showDialog(revisionDiff);
}
@@ -255,7 +255,7 @@ void DatabaseDialogManager::showRevision
{
if (!revisionManifest)
{
- revisionManifest = new RevisionManifest(parentWidget(), databaseFile);
+ revisionManifest = new RevisionManifest(parentWidget(), monotoneHandle);
connect(
revisionManifest, SIGNAL(fileHistory(const QString &, const QString &)),
@@ -281,7 +281,7 @@ void DatabaseDialogManager::showSelectRe
{
if (!selectRevision)
{
- selectRevision = new SelectRevision(parentWidget(), databaseFile);
+ selectRevision = new SelectRevision(parentWidget(), monotoneHandle);
connect(
selectRevision, SIGNAL(revisionDiff(const QString &, const QString &, const QString &)),
@@ -311,7 +311,7 @@ void DatabaseDialogManager::showNewProje
{
if (!newProjectSetup)
{
- newProjectSetup = new NewProjectSetup(parentWidget(), databaseFile);
+ newProjectSetup = new NewProjectSetup(parentWidget(), monotoneHandle);
// delegate this further
connect(
@@ -328,7 +328,7 @@ void DatabaseDialogManager::showAnnotati
{
if (!annotateFile)
{
- annotateFile = new AnnotateFile(parentWidget(), databaseFile);
+ annotateFile = new AnnotateFile(parentWidget(), monotoneHandle);
connect(
annotateFile, SIGNAL(selectRevision()),
@@ -364,7 +364,7 @@ void DatabaseDialogManager::showCreateCe
{
if (!createCert)
{
- createCert = new CreateCert(parentWidget(), databaseFile);
+ createCert = new CreateCert(parentWidget(), monotoneHandle);
connect(
createCert, SIGNAL(selectRevision()),
============================================================
--- src/view/dialogs/DatabaseDialogManager.h 6fcc736dab49c005d9e30c7ee5d53978f2d09c83
+++ src/view/dialogs/DatabaseDialogManager.h 786df3fcd74a012b44c064eb935b8af2c44d94ad
@@ -41,7 +41,7 @@ public:
DatabaseDialogManager(QWidget *);
~DatabaseDialogManager();
- void init(const DatabaseFile &);
+ void init(const MonotoneHandlePtr &);
virtual void closeAllDialogs();
//! delegated signals
@@ -87,7 +87,7 @@ private:
private:
void cleanup();
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
};
#endif
============================================================
--- src/view/dialogs/FileDiff.cpp 44fc4a74f158ae9a6d8a5e855521dc7b8527977b
+++ src/view/dialogs/FileDiff.cpp fe8603471cad4cbdc948351faa2a1fff6217f011
@@ -109,14 +109,14 @@ FileDiff::FileDiff(QWidget * parent)
);
}
-void FileDiff::forDatabase(const DatabaseFile & db, const QString & file,
+void FileDiff::forDatabase(const MonotoneHandlePtr & handle, const QString & file,
const QString & base, const QString & target)
{
fileName = file;
- database = db;
+ database = handle;
QString encoding = "UTF-8";
- if (!MonotoneUtil::getAttribute(db, base, file, "guitone:file-encoding",
+ if (!MonotoneUtil::getAttribute(handle, base, file, "guitone:file-encoding",
encoding))
{
L(QString("could not query file encoding of %1, using default").arg(file));
@@ -136,18 +136,18 @@ void FileDiff::forDatabase(const Databas
setWindowTitle(tr("Loading file differences"));
- diffModel->readDatabaseDiff(db, fileName, base, target, encoding);
+ diffModel->readDatabaseDiff(handle, fileName, base, target, encoding);
}
-void FileDiff::forWorkspace(const WorkspacePath & ws, const QString & file,
+void FileDiff::forWorkspace(const MonotoneHandlePtr & handle, const QString & file,
const QString & base, const QString & target)
{
fileName = file;
- workspace = ws;
+ workspace = handle;
QString encoding = "UTF-8";
QPair attrval;
- if (!MonotoneUtil::getAttribute(ws, file, "guitone:file-encoding", attrval) ||
+ if (!MonotoneUtil::getAttribute(handle, file, "guitone:file-encoding", attrval) ||
attrval.second == "dropped")
{
L(QString("could not query file encoding of %1, using default").arg(file));
@@ -171,7 +171,7 @@ void FileDiff::forWorkspace(const Worksp
setWindowTitle(tr("Loading file differences"));
- diffModel->readWorkspaceDiff(ws, fileName, base, target, encoding);
+ diffModel->readWorkspaceDiff(handle, fileName, base, target, encoding);
}
FileDiff::~FileDiff()
@@ -218,7 +218,7 @@ void FileDiff::diffRead()
if (database.isEmpty())
{
I(!workspace.isEmpty());
- database = MonotoneUtil::getDatabaseFile(workspace);
+ database = MonotoneUtil::getMonotoneHandlePtr(workspace);
}
fileModel->readFileByName(database, fileName, base, textEncoding->currentText());
@@ -343,7 +343,7 @@ void FileDiff::switchOutputEncoding(cons
<< encoding
));
- MonotoneUtil::runSynchronousWorkspaceTask(workspace, task);
+ MonotoneUtil::runSynchronousTask(workspace, task);
if (task->getReturnCode() != 0)
{
============================================================
--- src/view/dialogs/FileDiff.h dbb985d3ede28d6077676ddd35927bdfb03347cc
+++ src/view/dialogs/FileDiff.h 35927e2ed2cfe3e530d8f9b366ed501a58f36f32
@@ -32,8 +32,8 @@ public:
FileDiff(QWidget *);
~FileDiff();
- void forDatabase(const DatabaseFile &, const QString &, const QString &, const QString &);
- void forWorkspace(const WorkspacePath &, const QString &, const QString &, const QString &);
+ void forDatabase(const MonotoneHandlePtr &, const QString &, const QString &, const QString &);
+ void forWorkspace(const MonotoneHandlePtr &, const QString &, const QString &, const QString &);
private slots:
void diffRead();
@@ -52,8 +52,8 @@ private:
GetFileProxyModel * fileProxyModel;
QModelIndex currentIndex;
QString fileName;
- WorkspacePath workspace;
- DatabaseFile database;
+ MonotoneHandlePtr workspace;
+ MonotoneHandlePtr database;
};
#endif
============================================================
--- src/view/dialogs/FileHistory.cpp 39a8761450d502b9479f27973c791e155b35cf54
+++ src/view/dialogs/FileHistory.cpp f96c1c9b8b2bf3878ca25ca19a0e840393add792
@@ -19,7 +19,7 @@
#include "FileHistory.h"
#include "MonotoneUtil.h"
-FileHistory::FileHistory(QWidget * parent, const DatabaseFile & databaseFile)
+FileHistory::FileHistory(QWidget * parent, const MonotoneHandlePtr & monotoneHandle)
: Dialog(parent)
{
setupUi(this);
@@ -27,10 +27,10 @@ FileHistory::FileHistory(QWidget * paren
splitter->restoreState();
- certList->setKeyMap(MonotoneUtil::getPublicKeyMap(databaseFile));
+ certList->setKeyMap(MonotoneUtil::getPublicKeyMap(monotoneHandle));
- changeModel = new GetContentChanged(this, databaseFile);
- certsModel = new Certs(this, databaseFile);
+ changeModel = new GetContentChanged(this, monotoneHandle);
+ certsModel = new Certs(this, monotoneHandle);
connect(
this, SIGNAL(dialogHidden()),
============================================================
--- src/view/dialogs/FileHistory.h d543deea2159e969268866f3626cedfc441f84b3
+++ src/view/dialogs/FileHistory.h 749b32ab1e7448ccf8e3efb3d0708cdd52d2c604
@@ -28,7 +28,7 @@ public:
{
Q_OBJECT
public:
- FileHistory(QWidget *, const DatabaseFile &);
+ FileHistory(QWidget *, const MonotoneHandlePtr &);
~FileHistory();
void readHistory(const QString &, const QString &);
============================================================
--- src/view/dialogs/GenerateKeypair.cpp 12446002b36af694fa6bbbe6f4d1eee11218db59
+++ src/view/dialogs/GenerateKeypair.cpp 2b09cca3244f89a8a8b71b53ea5c043fa2f1150c
@@ -24,8 +24,8 @@
#include
#include
-GenerateKeypair::GenerateKeypair(QWidget * parent, const DatabaseFile & db)
- : Dialog(parent), databaseFile(db)
+GenerateKeypair::GenerateKeypair(QWidget * parent, const MonotoneHandlePtr & handle)
+ : Dialog(parent), monotoneHandle(handle)
{
setupUi(this);
Dialog::init();
@@ -71,7 +71,7 @@ void GenerateKeypair::accept()
<< lineKeyPasswd->text(),
options
));
- MonotoneUtil::runSynchronousDatabaseTask(databaseFile, task);
+ MonotoneUtil::runSynchronousTask(monotoneHandle, task);
if (!task->isFinished())
{
============================================================
--- src/view/dialogs/GenerateKeypair.h 2f96e57ae54980f65a2420bcb78e8ae7f03adb2c
+++ src/view/dialogs/GenerateKeypair.h 30119d4fdcfc15ee7c2a3a14e606022b46efc6b5
@@ -27,7 +27,7 @@ public:
{
Q_OBJECT
public:
- GenerateKeypair(QWidget *, const DatabaseFile &);
+ GenerateKeypair(QWidget *, const MonotoneHandlePtr &);
~GenerateKeypair();
signals:
@@ -37,7 +37,7 @@ private:
void accept();
private:
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
};
#endif
============================================================
--- src/view/dialogs/KeyManagement.cpp 995e2e3ec808f8eae6bdf033f76ca832dbf514e6
+++ src/view/dialogs/KeyManagement.cpp e2a0a71a99464a3acf9ea4fdd62f1c4e0b03f5eb
@@ -25,13 +25,13 @@
#include
#include
-KeyManagement::KeyManagement(QWidget * parent, const DatabaseFile & db)
- : Dialog(parent), databaseFile(db)
+KeyManagement::KeyManagement(QWidget * parent, const MonotoneHandlePtr & handle)
+ : Dialog(parent), monotoneHandle(handle)
{
setupUi(this);
Dialog::init();
- model = new Keys(this, databaseFile);
+ model = new Keys(this, monotoneHandle);
proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(model);
proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
@@ -198,7 +198,7 @@ void KeyManagement::copyPubkeyDataToClip
QStringList args;
QString output;
- args << "-d" << databaseFile << "pubkey" << key->hash;
+ args << "-d" << monotoneHandle << "pubkey" << key->hash;
if (!MonotoneProcess::singleRun(args, QString(), output))
{
@@ -273,7 +273,7 @@ void KeyManagement::dropKey()
}
QStringList args;
- args << "-d" << databaseFile << "dropkey" << key->hash;
+ args << "-d" << monotoneHandle << "dropkey" << key->hash;
QString output;
if (!MonotoneProcess::singleRun(args, QString(), output))
============================================================
--- src/view/dialogs/KeyManagement.h b53a2b1f764b2787cb72beaf6694f1904077e8fd
+++ src/view/dialogs/KeyManagement.h 5f8ee2ddc0d199e9f3cfed4a9bf4f6b875e1ca77
@@ -31,7 +31,7 @@ public:
{
Q_OBJECT
public:
- KeyManagement(QWidget *, const DatabaseFile &);
+ KeyManagement(QWidget *, const MonotoneHandlePtr &);
~KeyManagement();
public slots:
@@ -46,7 +46,7 @@ private:
Keys * model;
QSortFilterProxyModel * proxyModel;
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
QAction * actCopyHash;
QAction * actCopyGivenName;
============================================================
--- src/view/dialogs/Netsync.cpp 05beca66608fae00fd596121e46c4ccf9f797d2e
+++ src/view/dialogs/Netsync.cpp 7f89aa2b8477875ec94998e7a49b2ae5054a3d6f
@@ -22,8 +22,8 @@
#include
-Netsync::Netsync(QWidget * parent, const DatabaseFile & database)
- : Dialog(parent), db(database), running(false)
+Netsync::Netsync(QWidget * parent, const MonotoneHandlePtr & database)
+ : Dialog(parent), handle(database), running(false)
{
setupUi(this);
Dialog::init();
@@ -46,10 +46,10 @@ void Netsync::init()
progressWidget->hide();
QMap defaults =
- MonotoneUtil::getDatabaseVariables(db, "database");
+ MonotoneUtil::getDatabaseVariables(handle, "database");
QList knownServers =
- (MonotoneUtil::getDatabaseVariables(db, "known-servers")).keys();
+ (MonotoneUtil::getDatabaseVariables(handle, "known-servers")).keys();
includePattern->setText(defaults.contains("default-include-pattern") ?
defaults["default-include-pattern"] : "*");
@@ -70,7 +70,7 @@ void Netsync::init()
}
QMap privateKeys =
- MonotoneUtil::getPrivateKeyMap(db);
+ MonotoneUtil::getPrivateKeyMap(handle);
keys->clear();
keys->addItem(tr(""), QString());
@@ -108,7 +108,7 @@ void Netsync::start(Action act,
}
MonotoneTaskPtr task(new MonotoneTask(cmd, opts));
- AutomateCommand::enqueueDatabaseTask(db, task);
+ AutomateCommand::enqueueDatabaseTask(handle, task);
progressText->setStyleSheet("QLabel { color: palette(text); }");
progressText->setText(tr("Connecting to %1...").arg(host));
============================================================
--- src/view/dialogs/Netsync.h 7e44535efac3ff677517b971814725039aea8dfc
+++ src/view/dialogs/Netsync.h 60c3bdb65cba46c0f5305f8bf1dc36ac445dd461
@@ -30,7 +30,7 @@ public:
public:
enum Action { Push, Pull, Sync };
- Netsync(QWidget *, const DatabaseFile &);
+ Netsync(QWidget *, const MonotoneHandlePtr &);
~Netsync();
void init();
@@ -51,7 +51,7 @@ private:
void startStopClicked();
private:
- DatabaseFile db;
+ MonotoneHandlePtr db;
bool running;
};
============================================================
--- src/view/dialogs/NewProjectSetup.cpp b82fc8e9f06b682ebf3d9dcc93ae0ee7eb40d9c1
+++ src/view/dialogs/NewProjectSetup.cpp 29884e89698c44e6957de65a002cacf1e2c584a1
@@ -24,8 +24,8 @@
#include
#include
-NewProjectSetup::NewProjectSetup(QWidget * parent, const DatabaseFile & database)
- : Dialog(parent), db(database)
+NewProjectSetup::NewProjectSetup(QWidget * parent, const MonotoneHandlePtr & handle)
+ : Dialog(parent), monotoneHandle(handle)
{
setupUi(this);
Dialog::init();
@@ -41,7 +41,7 @@ void NewProjectSetup::init()
void NewProjectSetup::init()
{
branch->clear();
- workspacePath->clear();
+ monotoneHandle->clear();
}
void NewProjectSetup::doSelectDirectory()
@@ -52,14 +52,14 @@ void NewProjectSetup::doSelectDirectory(
if (!path.isEmpty())
{
- workspacePath->setText(path);
+ monotoneHandle->setText(path);
}
}
void NewProjectSetup::accept()
{
QString branchName = branch->text().trimmed();
- QStringList revs = MonotoneUtil::resolveSelector(db, "b:" + branchName);
+ QStringList revs = MonotoneUtil::resolveSelector(monotoneHandle, "b:" + branchName);
if (revs.size())
{
QMessageBox::warning(
@@ -74,7 +74,7 @@ void NewProjectSetup::accept()
QDir workspaceDir;
try
{
- workspaceDir = Platform::safeMakePath(workspacePath->text());
+ workspaceDir = Platform::safeMakePath(monotoneHandle->text());
}
catch (GuitoneException & e)
{
@@ -88,7 +88,7 @@ void NewProjectSetup::accept()
return;
}
- if (!WorkspaceCreator::createBookkeepingDirectory(workspaceDir, db, branchName))
+ if (!WorkspaceCreator::createBookkeepingDirectory(workspaceDir, handle, branchName))
{
QMessageBox::critical(
this,
============================================================
--- src/view/dialogs/NewProjectSetup.h 3eb92299feb93434a64e52c833168a16872b389b
+++ src/view/dialogs/NewProjectSetup.h a438d90b69a566730ad4a3d9862188b267d7048b
@@ -27,7 +27,7 @@ public:
{
Q_OBJECT
public:
- NewProjectSetup(QWidget *, const DatabaseFile &);
+ NewProjectSetup(QWidget *, const MonotoneHandlePtr &);
~NewProjectSetup();
void init();
@@ -35,7 +35,7 @@ private:
void newProjectCreated(const QString &);
private:
- DatabaseFile db;
+ MonotoneHandlePtr db;
private slots:
void doSelectDirectory();
============================================================
--- src/view/dialogs/OpenPrompt.cpp 74f3450be09bd97a1fe68ad0b2426fb3c2a9781f
+++ src/view/dialogs/OpenPrompt.cpp f4b707f26ca5b624d17ff5b007d74fba042f8387
@@ -20,6 +20,7 @@
#include "Settings.h"
#include
+#include
class GuitoneStandalone;
@@ -39,6 +40,11 @@ OpenPrompt::OpenPrompt(QWidget * parent)
);
connect(
+ btnNewConnection, SIGNAL(clicked()),
+ this, SLOT(newServerConnection())
+ );
+
+ connect(
btnExit, SIGNAL(clicked()),
this, SIGNAL(quitApp())
);
@@ -57,9 +63,10 @@ OpenPrompt::OpenPrompt(QWidget * parent)
connect(
recentWorkspaces, SIGNAL(currentIndexChanged(int)),
- this, SLOT(recentWorkspaceChanged(int))
+ this, SLOT(recentWorkspacesChanged(int))
);
}
+
QStringList databases = Settings::getItemList("RecentDatabaseList");
if (databases.size() > 0)
@@ -69,10 +76,23 @@ OpenPrompt::OpenPrompt(QWidget * parent)
connect(
recentDatabases, SIGNAL(currentIndexChanged(int)),
- this, SLOT(recentDatabaseChanged(int))
+ this, SLOT(recentDatabasesChanged(int))
);
}
+ QStringList servers = Settings::getItemList("RecentServerList");
+
+ if (servers.size() > 0)
+ {
+ recentServers->addItems(servers);
+ recentServers->setEnabled(true);
+
+ connect(
+ recentServers, SIGNAL(currentIndexChanged(int)),
+ this, SLOT(recentServersChanged(int))
+ );
+ }
+
dialogManager = new DialogManager(this);
connect(
@@ -107,7 +127,7 @@ void OpenPrompt::openDatabase()
this,
tr("Select your database..."),
QString(),
- tr("monotone Databases (*.mtn *.db)")
+ tr("monotone Databases (*.mtn *.handle)")
);
if (fn.isEmpty()) return;
@@ -123,21 +143,38 @@ void OpenPrompt::openWorkspace()
tr("Select your workspace...")
);
- if (fn.isEmpty()) return;
+ if (fn.isEmpty())
+ return;
setDisabled(true);
emit loadWorkspace(fn);
}
-void OpenPrompt::recentWorkspaceChanged(int idx)
+void OpenPrompt::newServerConnection()
{
+ bool ok;
+ QString connection = QInputDialog::getText(
+ this,
+ tr("Enter a new server connection"),
+ tr("Please enter a new server connection (f.e. mtn://my.server.com:4691):"),
+ QLineEdit::Normal, "mtn://", &ok).trimmed();
+
+ if (!ok || connection.isEmpty())
+ return;
+
+ setDisabled(true);
+ emit connectToServer(connection);
+}
+
+void OpenPrompt::recentWorkspacesChanged(int idx)
+{
// skip the first dummy item
if (idx < 1) return;
setDisabled(true);
emit loadWorkspace(recentWorkspaces->itemText(idx));
}
-void OpenPrompt::recentDatabaseChanged(int idx)
+void OpenPrompt::recentDatabasesChanged(int idx)
{
// skip the first dummy item
if (idx < 1) return;
@@ -145,4 +182,11 @@ void OpenPrompt::recentDatabaseChanged(i
emit loadDatabase(recentDatabases->itemText(idx));
}
+void OpenPrompt::recentServersChanged(int idx)
+{
+ // skip the first dummy item
+ if (idx < 1) return;
+ setDisabled(true);
+ emit connectToServer(recentServers->itemText(idx));
+}
============================================================
--- src/view/dialogs/OpenPrompt.h 8ceff233c41326a951ee86ec30496258ea1759b4
+++ src/view/dialogs/OpenPrompt.h 496152432c142d198f9d2d9fbff89caa1729c41c
@@ -33,13 +33,16 @@ signals:
signals:
void loadDatabase(const QString &);
void loadWorkspace(const QString &);
+ void connectToServer(const QString &);
void quitApp();
private slots:
void openDatabase();
void openWorkspace();
- void recentDatabaseChanged(int);
- void recentWorkspaceChanged(int);
+ void newServerConnection();
+ void recentDatabasesChanged(int);
+ void recentWorkspacesChanged(int);
+ void recentConnectionsChanged(int);
private:
DialogManager * dialogManager;
============================================================
--- src/view/dialogs/RevisionDiff.cpp b4083373890e06ab5d2cded332fb1fbebf30a680
+++ src/view/dialogs/RevisionDiff.cpp c7c804577761f350c26bec42aac456b065dae1fb
@@ -53,7 +53,7 @@ RevisionDiff::~RevisionDiff()
delete diffModel;
}
-void RevisionDiff::forDatabase(const DatabaseFile & db, const QString & path,
+void RevisionDiff::forDatabase(const MonotoneHandlePtr & handle, const QString & path,
const QString & base, const QString & target)
{
baseRevision = base;
@@ -62,10 +62,10 @@ void RevisionDiff::forDatabase(const Dat
setWindowTitle(tr("Loading differences"));
- diffModel->readDatabaseDiff(db, filePath, base, target);
+ diffModel->readDatabaseDiff(handle, filePath, base, target);
}
-void RevisionDiff::forWorkspace(const WorkspacePath & ws, const QString & path,
+void RevisionDiff::forWorkspace(const MonotoneHandlePtr & handle, const QString & path,
const QString & base, const QString & target)
{
baseRevision = base;
@@ -74,7 +74,7 @@ void RevisionDiff::forWorkspace(const Wo
setWindowTitle(tr("Loading differences"));
- diffModel->readWorkspaceDiff(ws, filePath, base, target);
+ diffModel->readWorkspaceDiff(handle, filePath, base, target);
}
void RevisionDiff::triggerFileDiff(const QModelIndex & index)
============================================================
--- src/view/dialogs/RevisionDiff.h b895f3c22dc1e2451ffc60cbff06a6e52c453c79
+++ src/view/dialogs/RevisionDiff.h f251a593ff991f039cfa2ac281cef5c19e285b1d
@@ -30,8 +30,8 @@ public:
RevisionDiff(QWidget *);
~RevisionDiff();
- void forDatabase(const DatabaseFile &, const QString &, const QString &, const QString &);
- void forWorkspace(const WorkspacePath &, const QString &, const QString &, const QString &);
+ void forDatabase(const MonotoneHandlePtr &, const QString &, const QString &, const QString &);
+ void forWorkspace(const MonotoneHandlePtr &, const QString &, const QString &, const QString &);
signals:
void fileDiff(const QString &, const QString &, const QString &);
============================================================
--- src/view/dialogs/RevisionManifest.cpp a03fa33d6be6ebe34d9f169e8fda2adc5cc66457
+++ src/view/dialogs/RevisionManifest.cpp 7414a9f682a105a38370ddba876dd259a532a002
@@ -28,13 +28,13 @@
#include
#include
-RevisionManifest::RevisionManifest(QWidget * parent, const QString & db)
- : Dialog(parent), databaseFile(db)
+RevisionManifest::RevisionManifest(QWidget * parent, const QString & handle)
+ : Dialog(parent), monotoneHandle(handle)
{
setupUi(this);
Dialog::init();
- manifestModel = new Manifest(this, databaseFile);
+ manifestModel = new Manifest(this, monotoneHandle);
manifestView->setModel(manifestModel);
connect(
@@ -80,7 +80,7 @@ void RevisionManifest::openFile(const QM
if (entry->is_directory) return;
MonotoneTaskPtr task(new MonotoneTask(QStringList() << "get_file" << entry->hash));
- MonotoneUtil::runSynchronousDatabaseTask(databaseFile, task);
+ MonotoneUtil::runSynchronousTask(monotoneHandle, task);
if (!task->isFinished()) F("task aborted");
@@ -234,7 +234,7 @@ void RevisionManifest::saveAllFiles()
QFileDialog::getExistingDirectory(0, tr("Select your export directory..."));
if (!exportDir.isEmpty())
{
- FileExporter exporter(databaseFile, revision, QDir(exportDir));
+ FileExporter exporter(monotoneHandle, revision, QDir(exportDir));
FileEntryList entries = extractSelectedEntries(list);
if (!exporter.run(entries))
@@ -268,7 +268,7 @@ void RevisionManifest::saveSelectedFiles
QFileDialog::getExistingDirectory(0, tr("Select your export directory..."));
if (!exportDir.isEmpty())
{
- FileExporter exporter(databaseFile, revision, QDir(exportDir));
+ FileExporter exporter(monotoneHandle, revision, QDir(exportDir));
if (!exporter.run(entries))
{
QMessageBox::critical(
============================================================
--- src/view/dialogs/RevisionManifest.h b8fbf6ca8df3d1dbbb34cd5832d3c50f8403334b
+++ src/view/dialogs/RevisionManifest.h 91d7ee0135363ad5696630f8fe05953ca14eea34
@@ -30,7 +30,7 @@ public:
{
Q_OBJECT
public:
- RevisionManifest(QWidget *, const DatabaseFile &);
+ RevisionManifest(QWidget *, const MonotoneHandlePtr &);
~RevisionManifest();
void readManifest(const QString &);
@@ -45,7 +45,7 @@ private:
Manifest * manifestModel;
QString revision;
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
private slots:
void saveSelectedFiles();
============================================================
--- src/view/dialogs/SelectRevision.cpp f9db3a6293905582be8c05cf580a0d2bc37e7608
+++ src/view/dialogs/SelectRevision.cpp 9dda96104478d3d3b3b9f15c74b8ed4ac06c78e3
@@ -24,8 +24,8 @@
#include
#include
-SelectRevision::SelectRevision(QWidget * parent, const DatabaseFile & database)
- : Dialog(parent), selectorCompleter(0), databaseFile(database)
+SelectRevision::SelectRevision(QWidget * parent, const MonotoneHandlePtr & database)
+ : Dialog(parent), selectorCompleter(0), monotoneHandle(database)
{
setupUi(this);
Dialog::init();
@@ -42,12 +42,12 @@ SelectRevision::SelectRevision(QWidget *
selectorBox->addItem(tr("Combined"), "");
// create the models
- selectorModel = new Select(this, databaseFile);
- sortModel = new Toposort(this, databaseFile);
- certsModel = new Certs(this, databaseFile);
- branchesModel = new Branches(this, databaseFile);
- tagsModel = new Tags(this, databaseFile);
- keysModel = new Keys(this, databaseFile);
+ selectorModel = new Select(this, monotoneHandle);
+ sortModel = new Toposort(this, monotoneHandle);
+ certsModel = new Certs(this, monotoneHandle);
+ branchesModel = new Branches(this, monotoneHandle);
+ tagsModel = new Tags(this, monotoneHandle);
+ keysModel = new Keys(this, monotoneHandle);
// toposort revisions
sortModel->setSourceModel(selectorModel);
@@ -63,7 +63,7 @@ SelectRevision::SelectRevision(QWidget *
// assign the models to the views
revisionList->setModel(sortModel);
- certList->setKeyMap(MonotoneUtil::getPublicKeyMap(databaseFile));
+ certList->setKeyMap(MonotoneUtil::getPublicKeyMap(monotoneHandle));
connect(
certsModel, SIGNAL(certsRead(const CertList &)),
============================================================
--- src/view/dialogs/SelectRevision.h 7b0eb080172fc538ab62dfd6328914f3e584dae8
+++ src/view/dialogs/SelectRevision.h b1160998f497b55aa6a290fef42c55404db3cf52
@@ -34,7 +34,7 @@ public:
{
Q_OBJECT
public:
- SelectRevision(QWidget *, const DatabaseFile &);
+ SelectRevision(QWidget *, const MonotoneHandlePtr &);
~SelectRevision();
void queryRevisions(const QString &);
@@ -57,7 +57,7 @@ private:
QString firstRevision;
QString secondRevision;
QString currentRevision;
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
private slots:
void accept();
============================================================
--- src/view/dialogs/UnaccountedRenames.cpp 3ccbb05cdd622261afd7e80dcfb0d29452a88aa9
+++ src/view/dialogs/UnaccountedRenames.cpp b61c61af418700ff7fb3b7bd199cbfc73a67b065
@@ -23,14 +23,14 @@
#include
#include
-UnaccountedRenames::UnaccountedRenames(QWidget * parent, const WorkspacePath & path)
- : Dialog(parent), workspacePath(path), inventory(0)
+UnaccountedRenames::UnaccountedRenames(QWidget * parent, const MonotoneHandlePtr & path)
+ : Dialog(parent), monotoneHandle(path), inventory(0)
{
setupUi(this);
Dialog::init();
inventory = new Inventory(this);
- inventory->setWorkspacePath(workspacePath);
+ inventory->setMonotoneHandle(monotoneHandle);
connect(
inventory, SIGNAL(inventoryRead(const QString &)),
============================================================
--- src/view/dialogs/UnaccountedRenames.h 35d7d6bf27df175ff17c1534ee81ae76a0311284
+++ src/view/dialogs/UnaccountedRenames.h da73f6ccb228250a4fcde5c030543e46fe6256ec
@@ -28,7 +28,7 @@ public:
{
Q_OBJECT
public:
- UnaccountedRenames(QWidget *, const WorkspacePath &);
+ UnaccountedRenames(QWidget *, const MonotoneHandlePtr &);
~UnaccountedRenames();
void checkForUnaccountedRenames();
@@ -42,7 +42,7 @@ private:
void doPerformRenames();
private:
- WorkspacePath workspacePath;
+ MonotoneHandlePtr monotoneHandle;
Inventory * inventory;
};
============================================================
--- src/view/dialogs/UpdateWorkspace.cpp 9c46b834533239597ee91776ec1abfe9cabb422f
+++ src/view/dialogs/UpdateWorkspace.cpp 1eadfe28917f0207dc0009c16426af3b6a8cb602
@@ -24,18 +24,18 @@
#include
#include
-UpdateWorkspace::UpdateWorkspace(QWidget * parent, const WorkspacePath & ws)
- : Dialog(parent), workspacePath(ws)
+UpdateWorkspace::UpdateWorkspace(QWidget * parent, const MonotoneHandlePtr & handle)
+ : Dialog(parent), monotoneHandle(handle)
{
setupUi(this);
Dialog::init();
- DatabaseFile db = MonotoneUtil::getDatabaseFile(workspacePath);
+ MonotoneHandlePtr handle = MonotoneUtil::getMonotoneHandlePtr(monotoneHandle);
- branchesModel = new Branches(this, db);
+ branchesModel = new Branches(this, handle);
branchList->setModel(branchesModel);
- tagsModel = new Tags(this, db);
+ tagsModel = new Tags(this, handle);
tagList->setModel(tagsModel);
selectorCompleter = new QCompleter(
@@ -66,7 +66,7 @@ UpdateWorkspace::UpdateWorkspace(QWidget
this, SLOT(selectSelectorOption())
);
- mtnProcess = new MonotoneProcess(workspacePath);
+ mtnProcess = new MonotoneProcess(monotoneHandle);
connect(
mtnProcess, SIGNAL(output(const QString &)),
@@ -99,7 +99,7 @@ void UpdateWorkspace::init()
updateToLatest->setText(
tr("the latest revision (branch: %1)")
- .arg(MonotoneUtil::getBranchName(workspacePath))
+ .arg(MonotoneUtil::getBranchName(monotoneHandle))
);
updateSelection->setEnabled(true);
@@ -113,7 +113,7 @@ void UpdateWorkspace::accept()
if (updateToLatest->isChecked())
{
- selector = "h:" + MonotoneUtil::getBranchName(workspacePath);
+ selector = "h:" + MonotoneUtil::getBranchName(monotoneHandle);
}
if (updateToBranch->isChecked())
@@ -167,7 +167,7 @@ void UpdateWorkspace::accept()
}
QStringList revList = MonotoneUtil::resolveSelector(
- MonotoneUtil::getDatabaseFile(workspacePath),
+ MonotoneUtil::getMonotoneHandlePtr(monotoneHandle),
selector
);
@@ -197,10 +197,10 @@ void UpdateWorkspace::accept()
selectedRevisionId = revList.at(0);
QString baseRevisionId =
- MonotoneUtil::getBaseWorkspaceRevision(workspacePath);
+ MonotoneUtil::getBaseWorkspaceRevision(monotoneHandle);
QStringList commonAncestors = MonotoneUtil::getCommonAncestors(
- MonotoneUtil::getDatabaseFile(workspacePath),
+ MonotoneUtil::getMonotoneHandlePtr(monotoneHandle),
QStringList() << selectedRevisionId << baseRevisionId
);
============================================================
--- src/view/dialogs/UpdateWorkspace.h 9be3dd2b3cab3b6769fadf35865e81bd065f4f53
+++ src/view/dialogs/UpdateWorkspace.h f01bcf1974c3ead9e8ea6edf09a6a0dd9b113267
@@ -32,7 +32,7 @@ public:
{
Q_OBJECT
public:
- UpdateWorkspace(QWidget *, const WorkspacePath &);
+ UpdateWorkspace(QWidget *, const MonotoneHandlePtr &);
~UpdateWorkspace();
void init();
@@ -53,7 +53,7 @@ private:
Tags * tagsModel;
QCompleter * selectorCompleter;
MonotoneProcess * mtnProcess;
- WorkspacePath workspacePath;
+ MonotoneHandlePtr monotoneHandle;
QString selectedRevisionId;
private slots:
============================================================
--- src/view/dialogs/WorkspaceDialogManager.cpp b0ef246f9747ea8da66a59c6cd236e99028eca0b
+++ src/view/dialogs/WorkspaceDialogManager.cpp 77e476287fdaede8cb3f66fb4ae1bf27fa394899
@@ -45,10 +45,10 @@ void WorkspaceDialogManager::closeAllDia
DatabaseDialogManager::closeAllDialogs();
}
-void WorkspaceDialogManager::init(const WorkspacePath & path)
+void WorkspaceDialogManager::init(const MonotoneHandlePtr & path)
{
- DatabaseDialogManager::init(APP->manager()->getDatabaseFilePath(path));
- workspacePath = path;
+ DatabaseDialogManager::init(APP->manager()->getMonotoneHandlePtrPath(path));
+ monotoneHandle = path;
cleanup();
}
@@ -61,7 +61,7 @@ void WorkspaceDialogManager::showCommitR
{
if (!commitRevision)
{
- commitRevision = new CommitRevision(parentWidget(), workspacePath);
+ commitRevision = new CommitRevision(parentWidget(), monotoneHandle);
connect(
commitRevision, SIGNAL(revisionCommitted(const QString &)),
@@ -90,14 +90,14 @@ void WorkspaceDialogManager::showFileDif
fileDiff = new FileDiff(parentWidget());
}
- fileDiff->forWorkspace(workspacePath, file, base, target);
+ fileDiff->forWorkspace(monotoneHandle, file, base, target);
showDialog(fileDiff);
}
void WorkspaceDialogManager::showFileHistory(const QString & file)
{
DatabaseDialogManager::showFileHistory(file,
- MonotoneUtil::getBaseWorkspaceRevision(workspacePath));
+ MonotoneUtil::getBaseWorkspaceRevision(monotoneHandle));
}
void WorkspaceDialogManager::showRevisionDiff(const QString & path, const QString & base, const QString & target)
@@ -112,7 +112,7 @@ void WorkspaceDialogManager::showRevisio
);
}
- revisionDiff->forWorkspace(workspacePath, path, base, target);
+ revisionDiff->forWorkspace(monotoneHandle, path, base, target);
showDialog(revisionDiff);
}
@@ -120,7 +120,7 @@ void WorkspaceDialogManager::checkForUna
{
if (!unaccountedRenames)
{
- unaccountedRenames = new UnaccountedRenames(parentWidget(), workspacePath);
+ unaccountedRenames = new UnaccountedRenames(parentWidget(), monotoneHandle);
connect(
unaccountedRenames, SIGNAL(renamePath(const QString &, const QString &)),
@@ -135,7 +135,7 @@ void WorkspaceDialogManager::showUpdateW
{
if (!updateWorkspace)
{
- updateWorkspace = new UpdateWorkspace(parentWidget(), workspacePath);
+ updateWorkspace = new UpdateWorkspace(parentWidget(), monotoneHandle);
connect(
updateWorkspace, SIGNAL(selectRevisionFromSelector(const QString &)),
@@ -165,7 +165,7 @@ void WorkspaceDialogManager::showAnnotat
void WorkspaceDialogManager::showAnnotation(const QString & file)
{
DatabaseDialogManager::showAnnotation(
- MonotoneUtil::getBaseWorkspaceRevision(workspacePath),
+ MonotoneUtil::getBaseWorkspaceRevision(monotoneHandle),
file
);
}
============================================================
--- src/view/dialogs/WorkspaceDialogManager.h 31e363829c58f3e3e4c3488f158d88e5e13ba8e0
+++ src/view/dialogs/WorkspaceDialogManager.h 7d9e1d7d0f5afdfd347c07ddce881a92f7a6c237
@@ -34,7 +34,7 @@ public:
WorkspaceDialogManager(QWidget *);
~WorkspaceDialogManager();
- void init(const WorkspacePath &);
+ void init(const MonotoneHandlePtr &);
void closeAllDialogs();
//! delegated signals
@@ -63,7 +63,7 @@ private:
private:
void cleanup();
- WorkspacePath workspacePath;
+ MonotoneHandlePtr monotoneHandle;
};
#endif
============================================================
--- src/view/mainwindows/DatabaseWindow.cpp 2eaeb3de1cdce9efcb4049d3d1ef64f61f5f36bf
+++ src/view/mainwindows/DatabaseWindow.cpp 1b6f36a8c142ed4ab0f731b13c4c9b707870036d
@@ -150,12 +150,14 @@ void DatabaseWindow::setup()
setCentralWidget(centralWidget);
}
-void DatabaseWindow::load(const QString & path)
+void DatabaseWindow::load(const MonotoneHandlePtr & handle)
{
- APP->manager()->getThreadForDatabase(path);
+ I(handle->getType() == MonotoneHandle::workspace_handle);
- databaseFile = path;
+ APP->manager()->getThread(handle);
+ monotoneHandle = path;
+
loadedDbLabel->setText(path);
QFileInfo fi(path);
@@ -165,8 +167,8 @@ void DatabaseWindow::load(const QString
Settings::addItemToList("RecentDatabaseList", path, 5);
- reinterpret_cast(dialogManager)->init(databaseFile);
- databaseVariables->setDatabaseFile(databaseFile);
+ reinterpret_cast(dialogManager)->init(monotoneHandle);
+ databaseVariables->setMonotoneHandlePtr(monotoneHandle);
QTimer::singleShot(0, this, SLOT(checkForEmptyDatabase()));
}
@@ -174,7 +176,7 @@ void DatabaseWindow::checkForEmptyDataba
void DatabaseWindow::checkForEmptyDatabase()
{
bool ok;
- if (MonotoneUtil::getRoots(databaseFile, ok).size() == 0 && ok)
+ if (MonotoneUtil::getRoots(monotoneHandle, ok).size() == 0 && ok)
{
QMessageBox msgBox(this);
msgBox.setWindowFlags(Qt::Sheet);
============================================================
--- src/view/mainwindows/DatabaseWindow.h a2174a941fd5af62a44699d2a36bb08c078cbe6c
+++ src/view/mainwindows/DatabaseWindow.h b8ddd05db7728d9f61015243934b874443793b3d
@@ -38,7 +38,7 @@ protected:
virtual void load(const QString &);
protected:
- DatabaseFile databaseFile;
+ MonotoneHandlePtr monotoneHandle;
QLabel * loadedDbLabel;
QPushButton * keyManagement;
============================================================
--- src/view/mainwindows/MainWindow.h 171feaed58e5a75246babdcf40797c188dfb5df0
+++ src/view/mainwindows/MainWindow.h cc7620bfdf1dc5fa47711d37f3d4229e2c83e5e6
@@ -31,7 +31,7 @@ public:
virtual ~MainWindow();
virtual void init();
virtual void setup() = 0;
- virtual void load(const QString &) = 0;
+ virtual void load(const MonotoneHandlePtr &) = 0;
signals:
void windowClosed(MainWindow *);
============================================================
--- src/view/mainwindows/WorkspaceWindow.cpp 6d1c97beb8ef58c1c6567a24c57e6ae267267834
+++ src/view/mainwindows/WorkspaceWindow.cpp 57032c33f3d551f0ea53b66b350f8cb7075f9c27
@@ -410,35 +410,34 @@ void WorkspaceWindow::setup()
);
}
-void WorkspaceWindow::load(const QString & path)
+void WorkspaceWindow::load(const MonotoneHandlePtr & handle)
{
- workspacePath = MonotoneManager::normalizeWorkspacePath(path);
- APP->manager()->getThreadForWorkspace(workspacePath);
+ I(handle->getType() == MonotoneHandle::workspace_handle);
+ APP->manager()->getThread(handle);
+
setWindowTitle(
tr("%1 - workspace mode - guitone").
- arg(MonotoneUtil::getBranchNameShort(workspacePath))
+ arg(MonotoneUtil::getBranchNameShort(handle))
);
- Settings::addItemToList("RecentWorkspaceList", workspacePath, 5);
+ Settings::addItemToList("RecentWorkspaceList", handle->getData(), 5);
- reinterpret_cast(dialogManager)->init(workspacePath);
+ reinterpret_cast(dialogManager)->init(handle);
- invModel->setWorkspacePath(workspacePath);
- invWatcher->setWorkspacePath(workspacePath);
- attrModel->setWorkspacePath(workspacePath);
- nodeInfo->setWorkspacePath(workspacePath);
+ invModel->setMonotoneHandle(handle);
+ invWatcher->setMonotoneHandle(handle);
+ attrModel->setMonotoneHandle(handle);
+ nodeInfo->setMonotoneHandle(handle);
+ databaseVariables->setMonotoneHandle(handle);
- DatabaseFile dbfile = APP->manager()->getDatabaseFilePath(workspacePath);
- databaseVariables->setDatabaseFile(dbfile);
-
// read the inventory
invModel->refresh();
}
void WorkspaceWindow::openFile(const QString & filePath)
{
- QString completePath = workspacePath + "/" + filePath;
+ QString completePath = monotoneHandle + "/" + filePath;
QFileInfo fileInfo(completePath);
if (!fileInfo.exists())
@@ -487,7 +486,7 @@ void WorkspaceWindow::deleteLocalPath(co
void WorkspaceWindow::deleteLocalPath(const QString & path)
{
- QString completePath = workspacePath + "/" + path;
+ QString completePath = monotoneHandle + "/" + path;
QMessageBox::StandardButton btn = QMessageBox::question(
this,
@@ -570,11 +569,11 @@ void WorkspaceWindow::workspaceUpdated(c
// need to ensure that the new branch set by mtn update before
// doesn't get overwritten by any next workspace command issued
// over stdio
- APP->manager()->stopWorkspaceThreads(workspacePath);
+ APP->manager()->stopWorkspaceThreads(monotoneHandle);
setWindowTitle(
tr("%1 - workspace mode - guitone").
- arg(MonotoneUtil::getBranchNameShort(workspacePath))
+ arg(MonotoneUtil::getBranchNameShort(monotoneHandle))
);
invModel->refresh();
============================================================
--- src/view/mainwindows/WorkspaceWindow.h d707e8956f801c8e6f9b2a6fe8eceb78b61de885
+++ src/view/mainwindows/WorkspaceWindow.h 068de7167552a414e2d954d1ff95d920fd5a462e
@@ -45,11 +45,10 @@ public:
virtual void init();
virtual void setup();
- //! throws GuitoneException
- virtual void load(const QString &);
+ virtual void load(const MonotoneHandlePtr &);
protected:
- WorkspacePath workspacePath;
+ MonotoneHandlePtr monotoneHandle;
Splitter * mainSplitter;
Splitter * listSplitter;
============================================================
--- src/view/panels/DatabaseVariables.cpp a3d0ea6257c7a5f4754b652db1fcde62eea842e7
+++ src/view/panels/DatabaseVariables.cpp 8e17715d1ae3e68a26f33ffefc03577673ce7d1f
@@ -73,9 +73,9 @@ DatabaseVariables::~DatabaseVariables()
delete databaseVariables;
}
-void DatabaseVariables::setDatabaseFile(const DatabaseFile & db)
+void DatabaseVariables::setMonotoneHandlePtr(const MonotoneHandlePtr & handle)
{
- databaseVariables->setDatabaseFile(db);
+ databaseVariables->setMonotoneHandlePtr(handle);
// FIXME: this is hacky, but we can't properly determine when to
// read the variables other than here or on every view change
// (see QDockWidget::visibilityChanged(bool) for that purpose), but
============================================================
--- src/view/panels/DatabaseVariables.h 18f5901a440cc1179edc722b1c611d1ee92c9068
+++ src/view/panels/DatabaseVariables.h 4b133dedc8498f69a3029de272939505086c97ba
@@ -32,7 +32,7 @@ public slots:
~DatabaseVariables();
public slots:
- void setDatabaseFile(const DatabaseFile &);
+ void setMonotoneHandlePtr(const MonotoneHandlePtr &);
private slots:
void variablesRead();
============================================================
--- src/view/panels/NodeInfo.cpp 427059e0d6bd2dd1a453c6b98918c05a1514d92e
+++ src/view/panels/NodeInfo.cpp 725716d4a5da526c6e59ebffa7382c03fb1706de
@@ -49,9 +49,9 @@ NodeInfo::~NodeInfo() {}
NodeInfo::~NodeInfo() {}
-void NodeInfo::setWorkspacePath(const WorkspacePath & wp)
+void NodeInfo::setMonotoneHandle(const MonotoneHandlePtr & handle)
{
- workspacePath = wp;
+ monotoneHandle = handle;
}
void NodeInfo::setItem(const InventoryItem * item)
@@ -63,7 +63,7 @@ void NodeInfo::readAndSetInfo()
{
if (inventoryItem == 0) return;
- I(!workspacePath.isEmpty());
+ I(!monotoneHandle.isEmpty());
QString strLastChangeRevision("-"),
strLastChangeAuthor("-"),
@@ -82,9 +82,9 @@ void NodeInfo::readAndSetInfo()
path = inventoryItem->getRenameSource();
}
- DatabaseFile db = MonotoneUtil::getDatabaseFile(workspacePath);
QStringList revs = MonotoneUtil::getPreviousContentMarks(
- db, path, MonotoneUtil::getBaseWorkspaceRevision(workspacePath)
+ monotoneHandle, path,
+ MonotoneUtil::getBaseWorkspaceRevision(monotoneHandle)
);
I(revs.size() > 0);
@@ -100,7 +100,7 @@ void NodeInfo::readAndSetInfo()
.arg(revs.at(0))
.arg(revs.at(0).left(12));
- CertList certs = MonotoneUtil::getCerts(db, revs.at(0));
+ CertList certs = MonotoneUtil::getCerts(monotoneHandle, revs.at(0));
strLastChangeAuthor = certs.findByNameValues("author").join(", ");
@@ -137,7 +137,7 @@ void NodeInfo::readAndSetInfo()
if (inventoryItem->getFSType() != InventoryItem::None)
{
- QFileInfo fileInfo(workspacePath + "/" + inventoryItem->getPath());
+ QFileInfo fileInfo(monotoneHandle + "/" + inventoryItem->getPath());
I(fileInfo.exists());
strFileSize = QString("%1 KB").arg(fileInfo.size() / 1024);
// FIXME: use Qt::DefaultLocaleShortDate if support for Qt 4.3 is dropped
@@ -225,3 +225,4 @@ void NodeInfo::showEvent(QShowEvent * ev
Q_UNUSED(ev);
readAndSetInfo();
}
+
============================================================
--- src/view/panels/NodeInfo.h d99d10fed6ffaf7817948cac2fda0fa4120326a9
+++ src/view/panels/NodeInfo.h da7bfab77b9e00ce784c8fb3e0b7f6f2a8984554
@@ -30,7 +30,7 @@ public:
public:
NodeInfo(QWidget *);
~NodeInfo();
- void setWorkspacePath(const WorkspacePath &);
+ void setMonotoneHandle(const MonotoneHandlePtr &);
signals:
void showSelectRevision(const QString &);
@@ -42,7 +42,7 @@ private:
private:
void showEvent(QShowEvent *);
- WorkspacePath workspacePath;
+ MonotoneHandlePtr monotoneHandle;
const InventoryItem * inventoryItem;
};
============================================================
--- src/vocab.h 45f37ad58d947f6ab3e7b07d314fd62f54c5356c
+++ src/vocab.h 6d7889ef50ac0ea2b509b5930cddfd2efc118880
@@ -52,9 +52,7 @@ struct StanzaEntry
QStringList vals;
StanzaEntry() {}
-
StanzaEntry(QString s, QString h) : sym(s), hash(h) {}
-
StanzaEntry(QString s, QStringList v) : sym(s), vals(v) {}
};
@@ -70,9 +68,7 @@ struct FileEntry
QMap attrs;
FileEntry() {}
-
FileEntry(QString p, bool d) : path(p), is_dir(d) {}
-
FileEntry(QString p, bool d, QString f) : path(p), is_dir(d), fileid(f) {}
inline bool operator<(const FileEntry & other) const
@@ -83,203 +79,6 @@ typedef QList FileEntryList;
typedef QList FileEntryList;
-typedef QStringList RevisionList;
-
-#include
-struct Cert
-{
- enum Trust { Trusted, Untrusted } trust;
- enum Signature { Ok, Bad, Unknown } signature;
- QString key;
- QString name;
- QString value;
-
- QDateTime dateTimeValue() const
- {
- return QDateTime::fromString(value, "yyyy-MM-ddThh:mm:ss");
- }
-
- QString plainValue() const
- {
- return QString(value).replace(QRegExp("\\s+"), " ");
- }
-
- QString htmlValue() const
- {
- QString val(value);
- QStringList lines = val.replace("<", "<").split(QRegExp("(\\r\\n|\\n|\\n\\r)"));
- QString htmlValue;
- bool inList = false;
- foreach (const QString & line, lines)
- {
- if (line.isEmpty())
- {
- if (inList)
- {
- htmlValue += "\n\n";
- inList = false;
- continue;
- }
-
- htmlValue += "
\n";
- continue;
- }
- bool listStart = (0 == line.indexOf(QRegExp("^[*-]")));
- if (listStart)
- {
- if (inList)
- {
- htmlValue += "\n";
- }
- else
- {
- inList = true;
- htmlValue += "\n";
- }
-
- htmlValue += "- " + line.mid(1).trimmed();
- continue;
- }
- if (inList)
- {
- htmlValue += " " + line.trimmed();
- continue;
- }
- htmlValue += line.trimmed() + "
\n";
- }
- if (inList)
- {
- htmlValue += " \n
\n";
- }
- return htmlValue
- .replace(QRegExp("(\\b)([_])(\\w+)\\2"), "\\1\\2\\3\\2")
- .replace(QRegExp("(\\b)([*])(\\w+)\\2"), "\\1\\2\\3\\2")
- .replace(QRegExp("(https?://[^() ]+)"), "\\1")
- .replace(QRegExp("\\t"), " ");
- }
-};
-
-struct CertList
-{
- QString revision;
- QList certs;
-
- void add(const Cert & c) { certs.push_back(c); }
-
- int size() const { return certs.size(); }
-
- Cert at(int pos) const { return certs.at(pos); }
-
- void clear()
- {
- certs.clear();
- revision = QString();
- }
-
- QStringList signers() const
- {
- QStringList signers;
- foreach (const Cert & cert, certs)
- {
- if (!signers.contains(cert.key))
- signers.push_back(cert.key);
- }
- return signers;
- }
-
- QList findBySigner(const QString & key = QString()) const
- {
- QList foundCerts;
- foreach (const Cert & cert, certs)
- {
- if (key.isEmpty() || key == cert.key)
- foundCerts.push_back(cert);
- }
- return foundCerts;
- }
-
- QList findByName(const QString & name, const QString & key = QString()) const
- {
- QList foundCerts;
- foreach (const Cert & cert, findBySigner(key))
- {
- if (cert.name != name)
- continue;
- foundCerts.push_back(cert);
- }
- return foundCerts;
- }
-
- QStringList findByNameValues(const QString & name, const QString & key = QString()) const
- {
- QStringList values;
- QList certs = findByName(name, key);
- foreach (const Cert & cert, certs)
- {
- values.push_back(cert.value);
- }
- return values;
- }
-
- void fill(const StanzaList & stanzas)
- {
- foreach (const Stanza & st, stanzas)
- {
- Cert cert;
- foreach (const StanzaEntry & entry, st)
- {
- if (entry.sym == "key")
- {
- I(!entry.hash.isEmpty());
- cert.key = entry.hash;
- continue;
- }
- if (entry.sym == "name")
- {
- I(entry.vals.size() == 1);
- cert.name = entry.vals.at(0);
- continue;
- }
- if (entry.sym == "value")
- {
- I(entry.vals.size() == 1);
- cert.value = entry.vals.at(0).trimmed();
- continue;
- }
- if (entry.sym == "signature")
- {
- I(entry.vals.size() == 1);
- QString sig = entry.vals.at(0);
- if (sig == "ok")
- cert.signature = Cert::Ok;
- else if (sig == "bad")
- cert.signature = Cert::Bad;
- else if (sig == "unknown")
- cert.signature = Cert::Unknown;
- else
- W(QString("Unknown cert signature state '%1'.").arg(sig));
- continue;
- }
- if (entry.sym == "trust")
- {
- I(entry.vals.size() == 1);
- QString trust = entry.vals.at(0);
- if (trust == "trusted")
- cert.trust = Cert::Trusted;
- else if (trust == "untrusted")
- cert.trust = Cert::Untrusted;
- else
- W(QString("Unknown cert trust '%1'.").arg(trust));
- continue;
- }
- }
- if (cert.key.isEmpty())
- continue;
- add(cert);
- }
- }
-};
-
typedef QList ByteArrayList;
struct Ticker
@@ -342,14 +141,11 @@ class MonotoneTask;
#include
class MonotoneThread;
class MonotoneTask;
+class MonotoneHandle;
typedef QSharedPointer MonotoneThreadPtr;
typedef QSharedPointer MonotoneTaskPtr;
+typedef QSharedPointer MonotoneHandlePtr;
-// FIXME: just a few stupid typedefs which should be expanded later on
-// to more "intelligent" objects
-typedef QString WorkspacePath;
-typedef QString DatabaseFile;
-
#include
class GuitoneException : public std::exception
{