[MonoDevelop] Feedback wanted: Settings and data storage locations
Michael Hutchinson
m.j.hutchinson at gmail.com
Fri Jan 22 00:25:14 EST 2010
Hi all,
I'm seeking feedback on a proposal to change the locations in which
MonoDevelop stores data. This affects all users, so please have your
say!
Historically MonoDevelop has stored all data, cache, settings, etc. in
a subdirectory of
Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData).
Typically on Linux/Mac this is /home/$USER/.config/MonoDevelop/ and on
Windows Vista/7 it's C:\Users\$USER\AppData\Roaming\MonoDevelop\. The
path has been accessible via PropertyService.ConfigPath, for addins to
determine where to store their own data.
There are a few problems here. Firstly, it's not clear to the user
which data need to be backed up and which can be regenerated. It's not
particularly well-structured if one ever needs to look in the
directory and find things. On Windows, all data is in the roaming
profile, which is inefficient with network logins. And on Mac, this
doesn't match the standard ~/Library subdirectories for caches, prefs,
etc.
I therefore propose that we add more granular locations for different
types of data. Since the migration will be a pain and we will have to
review and set up migrations for all current uses, we may as well get
it *right* first time so it only needs to be done once.
* UserPreferencesPath: current preferences/settings
Lin: ~/.config/MonoDevelop/Preferences
Mac: ~/Library/Preferences/MonoDevelop/
Win: ~\AppData\Roaming\MonoDevelop\ Preferences
* UserDataRoot: Root location for data files created or modifiable by
the user, such as templates, snippets and color schemes.
Lin: ~/.config/MonoDevelop/
Mac: ~/Library/MonoDevelop/
Win: ~\AppData\Roaming\MonoDevelop\
* UserCachePath: cached data that can be regenerated
Lin: ~/.share/local/MonoDevelop/Cache
Mac: ~/Library/Cache/MonoDevelop/
Win: ~\AppData\Local\MonoDevelop\Cache
* UserLogsPath: MD log output and anything similar from addins
Lin: ~/.share/local/MonoDevelop/Logs
Mac: ~/Library/Logs/MonoDevelop/
Win: ~\AppData\Local\MonoDevelop\Logs
* UserAddinsPath: addin registry and user-installed addins
Lin: ~/.share/local/MonoDevelop/Addins
Mac: ~/Library/Application Support/MonoDevelop/
Win: ~\AppData\Local\MonoDevelop\Addins
In summary, the contents of UserPreferencesPath and UserDataRoot
should be backed up.
I also intend to add FileService.MigratePath (string
oldRelativeConfigPath, string newFullPath, bool removeEmpty) call that
can be used to migrate files and folders from an old path to a new
path. This can be used to move files and directories to the new
locations.
There is also the question of whether some of these directories should
be versioned so that multiple MD versions can be used in parallel on
one user profile. I don't think it's worth the maintenance burden; in
general we've only ever supported forward migrations properly. Perhaps
we should have an error message if you try to run MD with too-new
settings/data formats, or alter all the location properties to point
to some dummy temp location so you can run the older version without
corrupting your newer settings.
You can see the current patch at http://monobin.com/__d215cffd5 if
you're curious.
--
Michael Hutchinson
http://mjhutchinson.com
More information about the Monodevelop-list
mailing list