* Add a function to check if a dyndns provider provides a domain
* Add a function to check a domain availability from a dyndns provider
* Use new functions in dyndns_subscribe
* Replace complete madness by _dyndns_available in dyndns_update
* This regex is only used in dyndns_update, no need to define it at the whole file scope level
* Try to clarify management of old ipv4/ipv6 ...
* Add a nice helper to get both ipv4 and ipv6...
* Clarify the dyndns_update madness to get current ipv4/v6
* Remove now useless IPRouteLine
* Change default values of old ipv4/v6 to None, otherwise shit gets update just because IPv6 = None
* Rearrange thing a bit, move path to global variable
* Copypasta typo
* Dyndns zone file as a global variable
* Use helper to write zone content to file
* Adding some debugs/info messages
* Move the domain guessing to a dedicated function...
* Adding comments..
* Using subprocess check_call instead of os.system for nsupdate
* Removing dump of the zone update because it's kinda duplicated from what nsupdate already does
* Ignore error if old_ipvx file is non existent
* Add docstring for _dyndns_available
* Remove parenthesis otherwise this gonna displease Bram-sama :P
* Start working on postinstall .. use _dyndns_provides to check if domain is a .nohost.me or .nohost.st
* Use _dyndns_available to cleanly check for domain availability
* Forget about the weird 'domain split' check...
* Clean dyndns stuff in domain.py
* Missing argument for string
* [enh] list migrations
* [enh] first version of the migrate command
* [mod] add todo comment
* [mod] migrate command shouldn't return anything
* [mod] rename yunohost_migrations to data_migrations
* [mod] better regex
* [enh] had base class for migration
* [fix] inverted condition
* [enh] save last runned migration
* [enh] add migrations state command
* [mod] add todo comments
* [mod] error handling
* [mod] DRY
* [doc] more comment
* [enh] handle exceptions on migration
* [mod] error handling
* [mod] DRY
* [enh] error handling
* [mod] this is done earlier
* [doc] docstring
* [enh] handle fail to load migration case
* [doc] add TODO Comment
* [fix] typos, thx ju
* [enh] add a migration to remove archivemount (as an example)
* [fix] check_call is boring
* [enh] support forward/backward migrations
* [mod] I don't need auth
* [fix] apt is expecting input...
* [mod] save it as int
* [mod] add some logging
* [doc] update todo
* [fix] I also need to run backward latest runed migration
* [enh] add target cli argument
* [enh] fake migration
* [enh] uniformly convert to int at the same place
* [fix] we need to filename now
* [enh] validate input
* [enh] handle 0 special case
* [mod] rename fake to skip
* [mod] s/runed/run/g
* [doc] anglich typo in comments
* [mod] more explicit error message
* [mod] more typo
* [doc] put comment in the right place
* [mod] typo
* [fix] forgot to cape migrations by target
* [fix] typo
* [mod] uses moulinette helpers
* [enh] launch migrations during package upgrade
* [mod] remove unused import
* [mod] sort translation keys
* [enh] i18n
* [fix] missing __init__.py in data_migrations
* [mod] move to a subcategory
* Typo / caps / consistency
* [fix] forgot that migrations is now in tools, in postinst
* Skip migrations during postinstall
* Remove archivemount example migration
It relied on apt-get, which can't be used during 'postinst' debian scripts because we're already inside a apt
* Add migration for cert group from 'metronome' to 'ssl-cert'
* Adding resolvconf as dependency
* Adding new templates for dnsmasq
* Adding libnss-myhostname as dependency
* tableflip.gif
* Moar tableflip.gif :/
* Tweaking dns resolvers used by dnsmasq
* Adding Aquilenet + moving FDN back to top
* Clarifying how the resolv.dnsmasq.conf template is used
* Moving nsswitch force regen back to postinstall
* Adding a 'upgradable' attribute directly in app_info
Conflicts:
src/yunohost/app.py
src/yunohost/tools.py
* Fixing a few weird stuff from cherry-picking
* Adding new port availability checker in tools
* [fix] move import at file's beginning.
* Moving back import inside function
* Using boolean instead of Yes/No
* Using built-in depreciation mechanism in Moulinette
* We're now using boolean instead of yes/no
* Renaming to port-available
* Returning directly a boolean
* [mod] directly use python to retreive json list
* [enh] app_fetchlist fetch all app_list by default
* [fix] name variable doesn't exists here
* [fix] re returns None when there is not matchs
* [enh] app_fetchlist fetch all app_list by default
* Some cleaning for better readability
* Simpler variable name
* Prepare a function that register lists to be fetched
* Skeletong for applist system migration
* Add implementation of migration system with tests
* Refactorize app_fetchlist
* Misc fixes + adding test for single app fetching
* Fixing a few issues + test removelist
* Adding fetchlist and cron install during postinstall
* Adding debug messages
* Adding particular exception for SSL connection error
* Update actionmap help
* We don't use urlretrieve
* Clean tests, some description were bad
* [mod] some cleaning
* Moving to a .json file to store lists url + adjusting tests
* Adding missing string in locale
* Moving exception to logger.error when fetching fails
* Adding name of applist in error messages
* Fixing cron job stuff + adding proper tests
* Using None instead of -1 for applist lastupdate
* Handling exceptions when writing applist files
* More exception handling...
* [mod] pep8
* Updating test for migration of conflicting lists
* More general error when return code is not 200
* [enh] Improve app_fetchlist help.
* [fix] Use appslist instead of applist.
* [fix] Consistent user string for translation.