diff --git a/MANIFEST.in b/MANIFEST.in --- a/MANIFEST.in +++ b/MANIFEST.in @@ -11,7 +11,6 @@ recursive-include init.d * recursive-include kallithea/alembic * include kallithea/bin/ldap_sync.conf include kallithea/bin/template.ini.mako -include kallithea/config/deployment.ini_tmpl recursive-include kallithea/i18n * recursive-include kallithea/public * recursive-include kallithea/templates * diff --git a/docs/contributing.rst b/docs/contributing.rst --- a/docs/contributing.rst +++ b/docs/contributing.rst @@ -36,7 +36,7 @@ To get started with development:: source ../kallithea-venv/bin/activate pip install --upgrade pip setuptools pip install -e . - TODO make-config Kallithea my.ini + gearbox make-config my.ini gearbox setup-db -c my.ini --user=user --email=user@example.com --password=password --repos=/tmp gearbox serve -c my.ini --reload & firefox http://127.0.0.1:5000/ diff --git a/docs/dev/dbmigrations.rst b/docs/dev/dbmigrations.rst --- a/docs/dev/dbmigrations.rst +++ b/docs/dev/dbmigrations.rst @@ -18,7 +18,7 @@ changes, you should make a matching Alem 2. Create a separate throwaway configuration for iterating on the actual database changes:: - TODO make-config Kallithea temp.ini + gearbox make-config temp.ini Edit the file to change database settings. SQLite is typically fine, but make sure to change the path to e.g. ``temp.db``, to avoid diff --git a/docs/installation_win.rst b/docs/installation_win.rst --- a/docs/installation_win.rst +++ b/docs/installation_win.rst @@ -166,7 +166,7 @@ it, reopen it following the same command one). When ready, type:: cd C:\Kallithea\Bin - TODO make-config Kallithea production.ini + gearbox make-config production.ini Then you must edit production.ini to fit your needs (IP address, IP port, mail settings, database, etc.). `NotePad++`__ or a similar text diff --git a/docs/installation_win_old.rst b/docs/installation_win_old.rst --- a/docs/installation_win_old.rst +++ b/docs/installation_win_old.rst @@ -204,7 +204,7 @@ if you closed it reopen it following the "activate" one). When ready, just type:: cd C:\Kallithea\Bin - TODO make-config Kallithea production.ini + gearbox make-config production.ini Then, you must edit production.ini to fit your needs (network address and port, mail settings, database, whatever). I recommend using NotePad++ diff --git a/docs/setup.rst b/docs/setup.rst --- a/docs/setup.rst +++ b/docs/setup.rst @@ -11,7 +11,7 @@ Setting up Kallithea First, you will need to create a Kallithea configuration file. Run the following command to do so:: - TODO make-config Kallithea my.ini + gearbox make-config my.ini This will create the file ``my.ini`` in the current directory. This configuration file contains the various settings for Kallithea, e.g. diff --git a/docs/upgrade.rst b/docs/upgrade.rst --- a/docs/upgrade.rst +++ b/docs/upgrade.rst @@ -91,13 +91,11 @@ If you originally installed from version 5. Upgrade your configuration ----------------------------- -Run the following command to upgrade your configuration (``.ini``) file:: - - TODO make-config Kallithea my.ini +Run the following command to create a new configuration (``.ini``) file:: -This will display any changes made by the new version of Kallithea to your -current configuration, and attempt an automatic merge. It is recommended -that you check the contents after the merge. + gearbox make-config new.ini + +Then compare it with your old config file and see what changed. .. note:: Please always make sure your ``.ini`` files are up to date. Errors diff --git a/kallithea/config/deployment.ini_tmpl b/kallithea/config/deployment.ini_tmpl deleted file mode 100644 --- a/kallithea/config/deployment.ini_tmpl +++ /dev/null @@ -1,598 +0,0 @@ -################################################################################ -################################################################################ -# Kallithea - Example config # -# # -# The %(here)s variable will be replaced with the parent directory of this file# -################################################################################ -################################################################################ - -[DEFAULT] -debug = true -pdebug = false - -################################################################################ -## Email settings ## -## ## -## Refer to the documentation ("Email settings") for more details. ## -## ## -## It is recommended to use a valid sender address that passes access ## -## validation and spam filtering in mail servers. ## -################################################################################ - -## 'From' header for application emails. You can optionally add a name. -## Default: -#app_email_from = Kallithea -## Examples: -#app_email_from = Kallithea -#app_email_from = kallithea-noreply@example.com - -## Subject prefix for application emails. -## A space between this prefix and the real subject is automatically added. -## Default: -#email_prefix = -## Example: -#email_prefix = [Kallithea] - -## Recipients for error emails and fallback recipients of application mails. -## Multiple addresses can be specified, space-separated. -## Only addresses are allowed, do not add any name part. -## Default: -#email_to = -## Examples: -#email_to = admin@example.com -#email_to = admin@example.com another_admin@example.com - -## 'From' header for error emails. You can optionally add a name. -## Default: -#error_email_from = pylons@yourapp.com -## Examples: -#error_email_from = Kallithea Errors -#error_email_from = paste_error@example.com - -## SMTP server settings -## If specifying credentials, make sure to use secure connections. -## Default: Send unencrypted unauthenticated mails to the specified smtp_server. -## For "SSL", use smtp_use_ssl = true and smtp_port = 465. -## For "STARTTLS", use smtp_use_tls = true and smtp_port = 587. -#smtp_server = smtp.example.com -#smtp_username = -#smtp_password = -#smtp_port = 25 -#smtp_use_ssl = false -#smtp_use_tls = false - -[server:main] -## Gearbox default web server ## -#use = egg:gearbox#wsgiref -## nr of worker threads to spawn -#threadpool_workers = 1 -## max request before thread respawn -#threadpool_max_requests = 100 -## option to use threads of process -#use_threadpool = true - -## Gearbox gevent web server ## -#use = egg:gearbox#gevent - -## WAITRESS ## -use = egg:waitress#main -## number of worker threads -threads = 1 -## MAX BODY SIZE 100GB -max_request_body_size = 107374182400 -## use poll instead of select, fixes fd limits, may not work on old -## windows systems. -#asyncore_use_poll = True - -## GUNICORN ## -#use = egg:gunicorn#main -## number of process workers. You must set `instance_id = *` when this option -## is set to more than one worker -#workers = 1 -## process name -#proc_name = kallithea -## type of worker class, one of sync, eventlet, gevent, tornado -## recommended for bigger setup is using of of other than sync one -#worker_class = sync -#max_requests = 1000 -## amount of time a worker can handle request before it gets killed and -## restarted -#timeout = 3600 - -## UWSGI ## -## run with uwsgi --ini-paste-logged -#[uwsgi] -#socket = /tmp/uwsgi.sock -#master = true -#http = 127.0.0.1:5000 - -## set as deamon and redirect all output to file -#daemonize = ./uwsgi_kallithea.log - -## master process PID -#pidfile = ./uwsgi_kallithea.pid - -## stats server with workers statistics, use uwsgitop -## for monitoring, `uwsgitop 127.0.0.1:1717` -#stats = 127.0.0.1:1717 -#memory-report = true - -## log 5XX errors -#log-5xx = true - -## Set the socket listen queue size. -#listen = 256 - -## Gracefully Reload workers after the specified amount of managed requests -## (avoid memory leaks). -#max-requests = 1000 - -## enable large buffers -#buffer-size = 65535 - -## socket and http timeouts ## -#http-timeout = 3600 -#socket-timeout = 3600 - -## Log requests slower than the specified number of milliseconds. -#log-slow = 10 - -## Exit if no app can be loaded. -#need-app = true - -## Set lazy mode (load apps in workers instead of master). -#lazy = true - -## scaling ## -## set cheaper algorithm to use, if not set default will be used -#cheaper-algo = spare - -## minimum number of workers to keep at all times -#cheaper = 1 - -## number of workers to spawn at startup -#cheaper-initial = 1 - -## maximum number of workers that can be spawned -#workers = 4 - -## how many workers should be spawned at a time -#cheaper-step = 1 - -## COMMON ## -host = 127.0.0.1 -port = 5000 - -## middleware for hosting the WSGI application under a URL prefix -#[filter:proxy-prefix] -#use = egg:PasteDeploy#prefix -#prefix = / - -[app:main] -use = egg:kallithea -## enable proxy prefix middleware -#filter-with = proxy-prefix - -full_stack = true -static_files = true -## Available Languages: -## cs de fr hu ja nl_BE pl pt_BR ru sk zh_CN zh_TW -lang = -cache_dir = %(here)s/data -index_dir = %(here)s/data/index - -## perform a full repository scan on each server start, this should be -## set to false after first startup, to allow faster server restarts. -initial_repo_scan = false - -## uncomment and set this path to use archive download cache -archive_cache_dir = %(here)s/tarballcache - -## change this to unique ID for security -app_instance_uuid = ${app_instance_uuid} - -## cut off limit for large diffs (size in bytes) -cut_off_limit = 256000 - -## force https in Kallithea, fixes https redirects, assumes it's always https -force_https = false - -## use Strict-Transport-Security headers -use_htsts = false - -## number of commits stats will parse on each iteration -commit_parse_limit = 25 - -## path to git executable -git_path = git - -## git rev filter option, --all is the default filter, if you need to -## hide all refs in changelog switch this to --branches --tags -#git_rev_filter = --branches --tags - -## RSS feed options -rss_cut_off_limit = 256000 -rss_items_per_page = 10 -rss_include_diff = false - -## options for showing and identifying changesets -show_sha_length = 12 -show_revision_number = false - -## Canonical URL to use when creating full URLs in UI and texts. -## Useful when the site is available under different names or protocols. -## Defaults to what is provided in the WSGI environment. -#canonical_url = https://kallithea.example.com/repos - -## gist URL alias, used to create nicer urls for gist. This should be an -## url that does rewrites to _admin/gists/. -## example: http://gist.example.com/{gistid}. Empty means use the internal -## Kallithea url, ie. http[s]://kallithea.example.com/_admin/gists/ -gist_alias_url = - -## white list of API enabled controllers. This allows to add list of -## controllers to which access will be enabled by api_key. eg: to enable -## api access to raw_files put `FilesController:raw`, to enable access to patches -## add `ChangesetController:changeset_patch`. This list should be "," separated -## Syntax is :. Check debug logs for generated names -## Recommended settings below are commented out: -api_access_controllers_whitelist = -# ChangesetController:changeset_patch, -# ChangesetController:changeset_raw, -# FilesController:raw, -# FilesController:archivefile - -## default encoding used to convert from and to unicode -## can be also a comma separated list of encoding in case of mixed encodings -default_encoding = utf8 - -## issue tracker for Kallithea (leave blank to disable, absent for default) -#bugtracker = https://bitbucket.org/conservancy/kallithea/issues - -## issue tracking mapping for commits messages -## comment out issue_pat, issue_server, issue_prefix to enable - -## pattern to get the issues from commit messages -## default one used here is # with a regex passive group for `#` -## {id} will be all groups matched from this pattern - -issue_pat = (?:\s*#)(\d+) - -## server url to the issue, each {id} will be replaced with match -## fetched from the regex and {repo} is replaced with full repository name -## including groups {repo_name} is replaced with just name of repo - -issue_server_link = https://issues.example.com/{repo}/issue/{id} - -## prefix to add to link to indicate it's an url -## #314 will be replaced by - -issue_prefix = # - -## issue_pat, issue_server_link, issue_prefix can have suffixes to specify -## multiple patterns, to other issues server, wiki or others -## below an example how to create a wiki pattern -# wiki-some-id -> https://wiki.example.com/some-id - -#issue_pat_wiki = (?:wiki-)(.+) -#issue_server_link_wiki = https://wiki.example.com/{id} -#issue_prefix_wiki = WIKI- - -## alternative return HTTP header for failed authentication. Default HTTP -## response is 401 HTTPUnauthorized. Currently Mercurial clients have trouble with -## handling that. Set this variable to 403 to return HTTPForbidden -auth_ret_code = - -## locking return code. When repository is locked return this HTTP code. 2XX -## codes don't break the transactions while 4XX codes do -lock_ret_code = 423 - -## allows to change the repository location in settings page -allow_repo_location_change = True - -## allows to setup custom hooks in settings page -allow_custom_hooks_settings = True - -## extra extensions for indexing, space separated and without the leading '.'. -# index.extensions = -# gemfile -# lock - -## extra filenames for indexing, space separated -# index.filenames = -# .dockerignore -# .editorconfig -# INSTALL -# CHANGELOG - -#################################### -### CELERY CONFIG #### -#################################### - -use_celery = false - -## Example: connect to the virtual host 'rabbitmqhost' on localhost as rabbitmq: -broker.url = amqp://rabbitmq:qewqew@localhost:5672/rabbitmqhost - -celery.imports = kallithea.lib.celerylib.tasks -celery.accept.content = pickle -celery.result.backend = amqp -celery.result.dburi = amqp:// -celery.result.serialier = json - -#celery.send.task.error.emails = true -#celery.amqp.task.result.expires = 18000 - -celeryd.concurrency = 2 -celeryd.max.tasks.per.child = 1 - -## If true, tasks will never be sent to the queue, but executed locally instead. -celery.always.eager = false - -#################################### -### BEAKER CACHE #### -#################################### - -beaker.cache.data_dir = %(here)s/data/cache/data -beaker.cache.lock_dir = %(here)s/data/cache/lock - -beaker.cache.regions = short_term,long_term,sql_cache_short - -beaker.cache.short_term.type = memory -beaker.cache.short_term.expire = 60 -beaker.cache.short_term.key_length = 256 - -beaker.cache.long_term.type = memory -beaker.cache.long_term.expire = 36000 -beaker.cache.long_term.key_length = 256 - -beaker.cache.sql_cache_short.type = memory -beaker.cache.sql_cache_short.expire = 10 -beaker.cache.sql_cache_short.key_length = 256 - -#################################### -### BEAKER SESSION #### -#################################### - -## Name of session cookie. Should be unique for a given host and path, even when running -## on different ports. Otherwise, cookie sessions will be shared and messed up. -beaker.session.key = kallithea -## Sessions should always only be accessible by the browser, not directly by JavaScript. -beaker.session.httponly = true -## Session lifetime. 2592000 seconds is 30 days. -beaker.session.timeout = 2592000 - -## Server secret used with HMAC to ensure integrity of cookies. -beaker.session.secret = ${app_instance_uuid} -## Further, encrypt the data with AES. -#beaker.session.encrypt_key = -#beaker.session.validate_key = - -## Type of storage used for the session, current types are -## dbm, file, memcached, database, and memory. - -## File system storage of session data. (default) -#beaker.session.type = file - -## Cookie only, store all session data inside the cookie. Requires secure secrets. -#beaker.session.type = cookie - -## Database storage of session data. -#beaker.session.type = ext:database -#beaker.session.sa.url = postgresql://postgres:qwe@localhost/kallithea -#beaker.session.table_name = db_session - -############################ -## ERROR HANDLING SYSTEMS ## -############################ - -#################### -### [appenlight] ### -#################### - -## AppEnlight is tailored to work with Kallithea, see -## http://appenlight.com for details how to obtain an account -## you must install python package `appenlight_client` to make it work - -## appenlight enabled -appenlight = false - -appenlight.server_url = https://api.appenlight.com -appenlight.api_key = YOUR_API_KEY - -## TWEAK AMOUNT OF INFO SENT HERE - -## enables 404 error logging (default False) -appenlight.report_404 = false - -## time in seconds after request is considered being slow (default 1) -appenlight.slow_request_time = 1 - -## record slow requests in application -## (needs to be enabled for slow datastore recording and time tracking) -appenlight.slow_requests = true - -## enable hooking to application loggers -#appenlight.logging = true - -## minimum log level for log capture -#appenlight.logging.level = WARNING - -## send logs only from erroneous/slow requests -## (saves API quota for intensive logging) -appenlight.logging_on_error = false - -## list of additional keywords that should be grabbed from environ object -## can be string with comma separated list of words in lowercase -## (by default client will always send following info: -## 'REMOTE_USER', 'REMOTE_ADDR', 'SERVER_NAME', 'CONTENT_TYPE' + all keys that -## start with HTTP* this list be extended with additional keywords here -appenlight.environ_keys_whitelist = - -## list of keywords that should be blanked from request object -## can be string with comma separated list of words in lowercase -## (by default client will always blank keys that contain following words -## 'password', 'passwd', 'pwd', 'auth_tkt', 'secret', 'csrf' -## this list be extended with additional keywords set here -appenlight.request_keys_blacklist = - -## list of namespaces that should be ignores when gathering log entries -## can be string with comma separated list of namespaces -## (by default the client ignores own entries: appenlight_client.client) -appenlight.log_namespace_blacklist = - -################ -### [sentry] ### -################ - -## sentry is a alternative open source error aggregator -## you must install python packages `sentry` and `raven` to enable - -sentry.dsn = YOUR_DNS -sentry.servers = -sentry.name = -sentry.key = -sentry.public_key = -sentry.secret_key = -sentry.project = -sentry.site = -sentry.include_paths = -sentry.exclude_paths = - -################################################################################ -## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ## -## Debug mode will enable the interactive debugging tool, allowing ANYONE to ## -## execute malicious code after an exception is raised. ## -################################################################################ -set debug = false - -################################## -### LOGVIEW CONFIG ### -################################## - -logview.sqlalchemy = #faa -logview.pylons.templating = #bfb -logview.pylons.util = #eee - -######################################################### -### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ### -######################################################### - -# SQLITE [default] -sqlalchemy.url = sqlite:///%(here)s/kallithea.db?timeout=60 - -# POSTGRESQL -#sqlalchemy.url = postgresql://user:pass@localhost/kallithea - -# MySQL -#sqlalchemy.url = mysql://user:pass@localhost/kallithea?charset=utf8 - -# see sqlalchemy docs for others - -sqlalchemy.echo = false -sqlalchemy.pool_recycle = 3600 - -################################ -### ALEMBIC CONFIGURATION #### -################################ - -[alembic] -script_location = kallithea:alembic - -################################ -### LOGGING CONFIGURATION #### -################################ - -[loggers] -keys = root, routes, kallithea, sqlalchemy, gearbox, beaker, templates, whoosh_indexer - -[handlers] -keys = console, console_sql - -[formatters] -keys = generic, color_formatter, color_formatter_sql - -############# -## LOGGERS ## -############# - -[logger_root] -level = NOTSET -handlers = console - -[logger_routes] -level = DEBUG -handlers = -qualname = routes.middleware -## "level = DEBUG" logs the route matched and routing variables. -propagate = 1 - -[logger_beaker] -level = DEBUG -handlers = -qualname = beaker.container -propagate = 1 - -[logger_templates] -level = INFO -handlers = -qualname = pylons.templating -propagate = 1 - -[logger_kallithea] -level = DEBUG -handlers = -qualname = kallithea -propagate = 1 - -[logger_gearbox] -level = DEBUG -handlers = -qualname = gearbox -propagate = 1 - -[logger_sqlalchemy] -level = INFO -handlers = console_sql -qualname = sqlalchemy.engine -propagate = 0 - -[logger_whoosh_indexer] -level = DEBUG -handlers = -qualname = whoosh_indexer -propagate = 1 - -############## -## HANDLERS ## -############## - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = INFO -formatter = generic - -[handler_console_sql] -class = StreamHandler -args = (sys.stderr,) -level = WARN -formatter = generic - -################ -## FORMATTERS ## -################ - -[formatter_generic] -format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %Y-%m-%d %H:%M:%S - -[formatter_color_formatter] -class = kallithea.lib.colored_formatter.ColorFormatter -format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %Y-%m-%d %H:%M:%S - -[formatter_color_formatter_sql] -class = kallithea.lib.colored_formatter.ColorFormatterSql -format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %Y-%m-%d %H:%M:%S diff --git a/kallithea/bin/kallithea_config.py b/kallithea/lib/paster_commands/make_config.py old mode 100755 new mode 100644 rename from kallithea/bin/kallithea_config.py rename to kallithea/lib/paster_commands/make_config.py --- a/kallithea/bin/kallithea_config.py +++ b/kallithea/lib/paster_commands/make_config.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python2 - # -*- coding: utf-8 -*- # 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 @@ -14,16 +12,11 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . """ -kallithea.bin.kallithea_config -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -configuration generator for Kallithea +kallithea.lib.paster_commands.make_config +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -This file was forked by the Kallithea project in July 2014. -Original author and date, and relevant copyright and licensing information is below: -:created_on: Jun 18, 2013 -:author: marcink -:copyright: (c) 2013 RhodeCode GmbH, and others. +make-config gearbox command for Kallithea + :license: GPLv3, see LICENSE.md for more details. """ @@ -36,31 +29,36 @@ from mako.template import Template TMPL = 'template.ini.mako' here = os.path.dirname(os.path.abspath(__file__)) -def argparser(argv): - usage = ( - "kallithea-config [-h] [--filename=FILENAME] [--template=TEMPLATE] \n" - "VARS optional specify extra template variable that will be available in " - "template. Use comma separated key=val format eg.\n" - "key1=val1,port=5000,host=127.0.0.1,elements='a\,b\,c'\n" - ) +from kallithea.lib.paster_commands.common import ask_ok, BasePasterCommand + + +class Command(BasePasterCommand): + """Kallithea: Create a new config file - parser = argparse.ArgumentParser( - description='Kallithea CONFIG generator with variable replacement', - usage=usage - ) + make-config is part of a two-phase installation process (the + second phase is setup-app). make-config creates a bare configuration + file (possibly filling in defaults from the extra + variables you give). + """ + + takes_config_file = False # at least not an existing one ... - ## config - group = parser.add_argument_group('CONFIG') - group.add_argument('--filename', help='Output ini filename.') - group.add_argument('--template', help='Mako template file to use instead of ' - 'the default builtin template') - group.add_argument('--raw', help='Store given mako template as raw without ' - 'parsing. Use this to create custom template ' - 'initially', action='store_true') - group.add_argument('--show-defaults', help='Show all default variables for ' - 'builtin template', action='store_true') - args, other = parser.parse_known_args() - return parser, args, other + def take_action(self, args): + _run(args) + + def get_parser(self, prog_name): + parser = super(Command, self).get_parser(prog_name) + + parser.add_argument('config_file', nargs='?', + help='application config file to write') + + parser.add_argument('custom', nargs=argparse.REMAINDER, + help='custom values to write to config file') + + parser.add_argument('--show-defaults', action='store_true', + help="Show the default values that can be overridden") + + return parser def _escape_split(text, sep): @@ -90,11 +88,15 @@ def _escape_split(text, sep): return startlist + [unfinished] + endlist[1:] # put together all the parts -def _run(argv): - parser, args, other = argparser(argv) - if not len(sys.argv) > 1: - print parser.print_help() - sys.exit(0) + +def _run(args): + if args.config_file is None: + if not args.show_defaults: + raise ValueError("Missing argument: config_file") + else: + if args.show_defaults: + raise ValueError("Can't specify both config_file and --show_defaults") + # defaults that can be overwritten by arguments tmpl_stored_args = { 'http_server': 'waitress', @@ -104,10 +106,10 @@ def _run(argv): 'port': 5000, 'error_aggregation_service': None, } - if other: - # parse arguments, we assume only first is correct + for custom in args.custom: + # parse arguments kwargs = {} - for el in _escape_split(other[0], ','): + for el in _escape_split(custom, ','): kv = _escape_split(el, '=') if len(kv) == 2: k, v = kv @@ -115,46 +117,27 @@ def _run(argv): # update our template stored args tmpl_stored_args.update(kwargs) - # use default that cannot be replaced - tmpl_stored_args.update({ - 'uuid': lambda: uuid.uuid4().hex, - 'here': os.path.abspath(os.curdir), - }) if args.show_defaults: for k,v in tmpl_stored_args.iteritems(): print '%s=%s' % (k, v) sys.exit(0) + + # use default that cannot be replaced + tmpl_stored_args.update({ + 'uuid': lambda: uuid.uuid4().hex, + 'here': os.path.dirname(os.path.abspath(args.config_file)), + }) try: # built in template tmpl_file = os.path.join(here, TMPL) - if args.template: - tmpl_file = args.template with open(tmpl_file, 'rb') as f: tmpl_data = f.read().decode('utf-8') - if args.raw: - tmpl = tmpl_data - else: - tmpl = Template(tmpl_data).render(**tmpl_stored_args) - with open(args.filename, 'wb') as f: + tmpl = Template(tmpl_data).render(**tmpl_stored_args) + with open(args.config_file, 'wb') as f: f.write(tmpl.encode('utf-8')) - print 'Wrote new config file in %s' % (os.path.abspath(args.filename)) + print 'Wrote new config file in %s' % (os.path.abspath(args.config_file)) except Exception: from mako import exceptions print exceptions.text_error_template().render() - -def main(argv=None): - """ - Main execution function for cli - - :param argv: - """ - if argv is None: - argv = sys.argv - - return _run(argv) - - -if __name__ == '__main__': - sys.exit(main(sys.argv)) diff --git a/kallithea/bin/template.ini.mako b/kallithea/lib/paster_commands/template.ini.mako rename from kallithea/bin/template.ini.mako rename to kallithea/lib/paster_commands/template.ini.mako diff --git a/scripts/generate-ini.py b/scripts/generate-ini.py --- a/scripts/generate-ini.py +++ b/scripts/generate-ini.py @@ -1,14 +1,13 @@ #!/usr/bin/env python2 """ -Based on kallithea/bin/template.ini.mako, generate - kallithea/config/deployment.ini_tmpl +Based on kallithea/lib/paster_commands/template.ini.mako, generate development.ini kallithea/tests/test.ini """ import re -makofile = 'kallithea/bin/template.ini.mako' +makofile = 'kallithea/lib/paster_commands/template.ini.mako' # the mako conditionals used in all other ini files and templates selected_mako_conditionals = set([ @@ -28,14 +27,6 @@ mako_variable_values = { # files to be generated from the mako template ini_files = [ - ('kallithea/config/deployment.ini_tmpl', - ''' - Kallithea - Example config - - The %(here)s variable will be replaced with the parent directory of this file - ''', - {}, # exactly the same settings as template.ini.mako - ), ('kallithea/tests/test.ini', ''' Kallithea - config for tests: diff --git a/scripts/manifest b/scripts/manifest --- a/scripts/manifest +++ b/scripts/manifest @@ -75,11 +75,9 @@ kallithea/bin/kallithea_gist.py kallithea/bin/ldap_sync.conf kallithea/bin/ldap_sync.py kallithea/bin/rebranddb.py -kallithea/bin/template.ini.mako kallithea/config/ kallithea/config/__init__.py kallithea/config/conf.py -kallithea/config/deployment.ini_tmpl kallithea/config/environment.py kallithea/config/middleware.py kallithea/config/post_receive_tmpl.py @@ -355,6 +353,7 @@ kallithea/lib/paster_commands/make_index kallithea/lib/paster_commands/make_rcextensions.py kallithea/lib/paster_commands/repo_scan.py kallithea/lib/paster_commands/setup_db.py +kallithea/lib/paster_commands/template.ini.mako kallithea/lib/paster_commands/update_repoinfo.py kallithea/lib/pidlock.py kallithea/lib/profiler.py diff --git a/setup.py b/setup.py --- a/setup.py +++ b/setup.py @@ -155,6 +155,7 @@ setuptools.setup( main = pylons.util:PylonsInstaller [gearbox.commands] + make-config=kallithea.lib.paster_commands.make_config:Command setup-db=kallithea.lib.paster_commands.setup_db:Command cleanup-repos=kallithea.lib.paster_commands.cleanup:Command update-repoinfo=kallithea.lib.paster_commands.update_repoinfo:Command