{"action":"created","issue":{"url":"https://api.github.com/repos/KSP-CKAN/CKAN/issues/1268","labels_url":"https://api.github.com/repos/KSP-CKAN/CKAN/issues/1268/labels{/name}","comments_url":"https://api.github.com/repos/KSP-CKAN/CKAN/issues/1268/comments","events_url":"https://api.github.com/repos/KSP-CKAN/CKAN/issues/1268/events","html_url":"https://github.com/KSP-CKAN/CKAN/issues/1268","id":94139429,"number":1268,"title":"Changeset page: Repurpose the  Description Column ","user":{"login":"Murdabenne","id":12688578,"avatar_url":"https://avatars.githubusercontent.com/u/12688578?v=3","gravatar_id":"","url":"https://api.github.com/users/Murdabenne","html_url":"https://github.com/Murdabenne","followers_url":"https://api.github.com/users/Murdabenne/followers","following_url":"https://api.github.com/users/Murdabenne/following{/other_user}","gists_url":"https://api.github.com/users/Murdabenne/gists{/gist_id}","starred_url":"https://api.github.com/users/Murdabenne/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Murdabenne/subscriptions","organizations_url":"https://api.github.com/users/Murdabenne/orgs","repos_url":"https://api.github.com/users/Murdabenne/repos","events_url":"https://api.github.com/users/Murdabenne/events{/privacy}","received_events_url":"https://api.github.com/users/Murdabenne/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/KSP-CKAN/CKAN/labels/enhancement","name":"enhancement","color":"eb6420"},{"url":"https://api.github.com/repos/KSP-CKAN/CKAN/labels/gui","name":"gui","color":"006b75"},{"url":"https://api.github.com/repos/KSP-CKAN/CKAN/labels/%E2%98%85%E2%98%86%E2%98%86","name":"★☆☆","color":"009800"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":2,"created_at":"2015-07-09T19:58:05Z","updated_at":"2015-07-18T00:04:38Z","closed_at":null,"body":"The changeset \"Description\" column is currently unused.\r\n\r\nPropose the following\r\n\r\n1) on adds, the mods the the mod-to-be-added depends on are listed (forward dependencies).  This accomplishes the task of informing the end use just which mod is causing the install of the additional mods listed.  Also, changeset line for added dependencies would list the reverse dependency as the reason why it was installed ex: \"[modname] added because [mod you are adding] depends on it\" (CKAN #589).  Per CKAN #978, also the things that were installed by user request  (not via dependency) get tagged as being independently installed, and flagged against optional removal.\r\n\r\n2) on removes, the mods that depend on the mod-to-be-removed are listed (reverse dependencies).  This accomplishes the task of informing the user a list of the mods that this will cause to be removed with it.  Also automatically removed mods listed would have in their description \"[modname being autoremoved] removed because it depends on [modname you are removing]\". Also, per CKAN #978, the user should be offered an option to uninstall any mods that were installed a a dependency that have no other mods depending on them - but not ones that are flagged as being deliberately installed by the user (those would have to be deliberately removed by the usual way of the user unchecking the box on the main screen).\r\n\r\nIn the case of something with >5 mods depending on it (modulemanager, firespitter, FAR, etc), the \"these mods depend on this\" would be too much data to put on a single line of text, so instead the text would say \"removing this mod will cause XX other mods to be removed\". \r\n\r\nRelationships: \r\n\r\nA depends on B.  This means A has a dependency (needs) on B, and B has a reverse dependency (is needed by) on A.\r\n\r\nExamples to clarify (All these are on the changeset screen)\r\nMods A, B C, and X are as follows:\r\nA depends on B and C\r\nB is independent\r\nC is independent\r\nX depends on B\r\n\r\nThe user installs X, B is noted as dependency and installed along with it as well as being on the notification line \r\n\r\nThe user then installs mod A, which causes mod C to be installed as a dependency, and mod B is updated to have mod A as a reverse dependency. \r\n\r\nNow the user removes mod A - which causes Mod C to be offered for uninstall since the only mod it has as a reverse dependency is Mod A.  B is not offered because removing the reverse for B to A still leaves reverse dependency of B to X\r\n\r\nNext the user removes mod X, which causes Mod B to be offered for uninstall since the only remaining reverse dependency is mod X.\r\n\r\nreset, have both X and A installed, meaning A B C X are all there.\r\n\r\nFirst, remove X - nothing is offered since A and C are uninvolved, and B still has a reverse dependency B to A after eliminating B to X.\r\n\r\nnext remove A - both B and C are offered for removal since neither have any reverse dependencies other than the B to A and C to A that are being cut. \r\n\r\nThere is the nasty case of A depends on B, B depends on C, and C depends on A, a cycle. \r\n\r\nRemoving any of these should trigger automatic removal of the others.  By keeping a stack of removed mods, the potential cycle can be terminated like a tail recursion (yay lisp code a long time ago), and unwound in that manner.\r\n\r\nRemove B. B is not on the remove list, add B (B).  B triggers reverse depends A, Remove A, (B) \r\nRemove A. A is not on the remove list, add A (B,A). A triggers reverse depends C. Remove C (B,A).\r\nRemove C. C is not on the remove list, add C (B,A,C).  C triggers reverse depends B. Remove B (B,A,C). \r\nRemove B. B is on the list so pop. (and pop and pop finally yielding a list B A C to be removed)\r\n\r\nThere are other variations, but this may already exist in some for of registry checking in the current system. \r\n\r\nOriginal discussion in ckan irc http://pastebin.com/xqg8Z9Ks\r\nNote this also includes parts of CKAN #978 \r\nThis may include CKAN #589 as well. "},"comment":{"url":"https://api.github.com/repos/KSP-CKAN/CKAN/issues/comments/122458444","html_url":"https://github.com/KSP-CKAN/CKAN/issues/1268#issuecomment-122458444","issue_url":"https://api.github.com/repos/KSP-CKAN/CKAN/issues/1268","id":122458444,"user":{"login":"plague006","id":10162554,"avatar_url":"https://avatars.githubusercontent.com/u/10162554?v=3","gravatar_id":"","url":"https://api.github.com/users/plague006","html_url":"https://github.com/plague006","followers_url":"https://api.github.com/users/plague006/followers","following_url":"https://api.github.com/users/plague006/following{/other_user}","gists_url":"https://api.github.com/users/plague006/gists{/gist_id}","starred_url":"https://api.github.com/users/plague006/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/plague006/subscriptions","organizations_url":"https://api.github.com/users/plague006/orgs","repos_url":"https://api.github.com/users/plague006/repos","events_url":"https://api.github.com/users/plague006/events{/privacy}","received_events_url":"https://api.github.com/users/plague006/received_events","type":"User","site_admin":false},"created_at":"2015-07-18T00:04:38Z","updated_at":"2015-07-18T00:04:38Z","body":"Throwing this up as an example for this PR and #1311.\r\n![Picture of a dog flying a train to Pluto](http://i.imgur.com/I8aWPJG.jpg)"}}