##// END OF EJS Templates
auth: don't break hashing in case of user with empty password....
auth: don't break hashing in case of user with empty password. In some cases such as LDAP user created via external scripts users might set the passwords to empty. The hashing uses the md5(password_hash) to store reference to detect password changes and forbid using the same password. In case of pure LDAP users this is not valid, and we shouldn't raise Errors in such case. This change makes it work for empty passwords now.

File last commit:

r552:9a0f45b0 default
r2203:8a18c3c3 default
Show More
tools-cli.rst
677 lines | 18.3 KiB | text/x-rst | RstLexer

|RCT| CLI

The commands available with |RCT| can be split into three categories:

  • Remotely executable commands that can be run from your local machine once you have your connection details to |RCE| configured.
  • Locally executable commands the can be run on the server to carry out general maintenance.
  • Local configuration commands used to help set up your |RCT| configuration.

rhodecode-tools

Use |RCT| to setup automation, run the indexer, and install extensions for your |RCM| instances. Options:

Example usage:

$ rhodecode-tools --apikey=key --apihost=http://rhodecode.server \
    --save-config

rhodecode-api

The |RC| API lets you connect to |RCE| and carry out management tasks from a remote machine, for more information about the API, see the :ref:`api`. To pass arguments on the command-line use the method:option syntax.

Example usage:

# Run the get_repos API call and sample output
$ rhodecode-api --instance-name=enterprise-1 create_repo \
    repo_name:brand-new repo_type:hg description:repo-desc

{
  "error": null,
  "id": 1110,
  "result": {
    "msg": "Created new repository `brand-new`",
    "success": true,
    "task": null
  }
}

Options:

rhodecode-cleanup-gists

Use this to delete gists within |RCM|. Options:

Example usage:

# Clean up gists related to an instance
$ rhodecode-cleanup-gists --instance-name=enterprise-1
Scanning for gists in /home/brian/repos/.rc_gist_store...
preparing to remove [3] found gists

# Clean up corrupted gists in an instance
$ rhodecode-cleanup-gists --instance-name=enterprise-1 --corrupted
Scanning for gists in /home/brian/repos/.rc_gist_store...
preparing to remove [2] found gists
the following gists will be archived:
  * EXPIRED: BAD METADATA        | /home/brian/repos/.rc_gist_store/5
  * EXPIRED: BAD METADATA        | /home/brian/repos/.rc_gist_store/8FtC
are you sure you want to archive them? [y/N]: y
removing gist /home/brian/repos/.rc_gist_store/5
removing gist /home/brian/repos/.rc_gist_store/8FtCKdcbRKmEvRzTVsEt

rhodecode-cleanup-repos

Use this to manage |repos| and |repo| groups within |RCM|. Options:

Example usage:

# Cleaning up repos using tools installed with RCE 350 and above
$ ~/.rccontrol/enterprise-4/profile/bin/rhodecode-cleanup-repos \
    --instance-name=enterprise-4 --older-than=1d
Scanning for repositories in /home/brian/repos...
preparing to remove [2] found repositories older than 1 day, 0:00:00 (1d)

the following repositories will be deleted completely:
* REMOVED: 2015-08-05 00:23:18 | /home/brian/repos/rm__20150805_002318_831
* REMOVED: 2015-08-04 01:22:10 | /home/brian/repos/rm__20150804_012210_336
are you sure you want to remove them? [y/N]:

# Clean up repos older than 1 year
# If using virtualenv and pre RCE 350 tools installation
(venv)$ rhodecode-cleanup-repos --instance-name=enterprise-1 \
    --older-than=365d

Scanning for repositories in /home/brian/repos...
preparing to remove [343] found repositories older than 365 days

# clean up repos older than 3 days
# If using virtualenv and pre RCE 350 tools installation
(venv)$ rhodecode-cleanup-repos --instance-name=enterprise-1 \
    --older-than=3d
Scanning for repositories in /home/brian/repos...
preparing to remove [3] found repositories older than 3 days

rhodecode-config

Use this to create or update a |RCE| configuration file on the local machine.

# Create a new config file
$ rhodecode-config --filename=dev.ini
Wrote new config file in /Users/user/dev.ini

# Update config value for given section:
$ rhodecode-config --update --filename=prod.ini [handler_console]level=INFO

$ rhodecode-config --filename=dev.ini --show-defaults
lang=en
cpu_number=4
uuid=<function <lambda> at 0x10d86ac08>
license_token=ff1e-aa9c-bb66-11e5
host=127.0.0.1
here=/Users/brian
error_aggregation_service=None
database_url=sqlite:///%(here)s/rhodecode.db?timeout=30
git_path=git
http_server=waitress
port=5000

rhodecode-extensions

|RCT| adds additional mapping for :ref:`indexing-ref`, statistics, and adds additional code for push/pull/create/delete |repo| hooks. These hooks can be used to send signals to build-bots such as jenkins. Options:

Once installed, you will see a :file:`rcextensions` folder in the instance directory, for example :file:`home/{user}/.rccontrol/{instance-id}/rcextensions`

To install rcextensions, use the following example:

# install extensions on the given instance
# If using virtualenv prior to RCE 350
(venv)$ rhodecode-extensions --instance-name=enterprise-1 \
    --ini-file=rhodecode.ini
Writen new extensions file to rcextensions

# install extensions with additional plugins on the given instance
(venv)$ rhodecode-extensions --instance-name=enterprise-1 \
    --ini-file=rhodecode.ini --plugins
Writen new extensions file to rcextensions

# installing extensions from 350 onwards
# as they are packaged with RCE
$ .rccontrol/enterprise-4/profile/bin/rhodecode-extensions --plugins \
  --instance-name=enterprise-4 --ini-file=rhodecode.ini

Writen new extensions file to rcextensions

See the new extensions inside this directory for more details about the additional hooks available, for example see the push_post.py file.

import urllib
import urllib2

def run(*args, **kwargs):
    """
    Extra params

    :param URL: url to send the data to
    """

    url = kwargs.pop('URL', None)
    if url:
        from rhodecode.lib.compat import json
        from rhodecode.model.db import Repository

        repo = Repository.get_by_repo_name(kwargs['repository'])
        changesets = []
        vcs_repo = repo.scm_instance_no_cache()
        for r in kwargs['pushed_revs']:
            cs = vcs_repo.get_changeset(r)
            changesets.append(json.dumps(cs))

        kwargs['pushed_revs'] = changesets
        headers = {
            'User-Agent': 'RhodeCode-SCM web hook',
            'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'Accept': 'text/javascript, text/html, application/xml, '
                      'text/xml, */*',
            'Accept-Encoding': 'gzip,deflate,sdch',
        }

        data = kwargs
        data = urllib.urlencode(data)
        req = urllib2.Request(url, data, headers)
        response = urllib2.urlopen(req)
        response.read()
        return 0

rhodecode-gist

Use this to create, list, show, or delete gists within |RCM|. Options:

Example usage:

# List the gists in an instance
(venv)brian@ubuntu:~$ rhodecode-gist --instance-name=enterprise-1 list
{
  "error": null,
  "id": 7102,
  "result": [
    {
      "access_id": "2",
      "content": null,
      "created_on": "2015-01-19T12:52:26.494",
      "description": "A public gust",
      "expires": -1.0,
      "gist_id": 2,
      "type": "public",
      "url": "http://127.0.0.1:10003/_admin/gists/2"
    },
    {
      "access_id": "7gs6BsSEC4pKUEPLz5AB",
      "content": null,
      "created_on": "2015-01-19T11:27:40.812",
      "description": "Gist testing API",
      "expires": -1.0,
      "gist_id": 1,
      "type": "private",
      "url": "http://127.0.0.1:10003/_admin/gists/7gs6BsSEC4pKUEPLz5AB"
    }
  ]
}

# delete a particular gist
# You use the access_id to specify the gist to delete
(venv)brian@ubuntu:~$ rhodecode-gist delete 2  --instance-name=enterprise-1
{
  "error": null,
  "id": 6284,
  "result": {
    "gist": null,
    "msg": "deleted gist ID:2"
  }
}

# cat a file and pipe to new gist
# This is if you are using virtualenv
(venv)$ cat ~/.rhoderc | rhodecode-gist --instance-name=enterprise-1 \
    -d '.rhoderc copy' create

{
  "error": null,
  "id": 5374,
  "result": {
    "gist": {
      "access_id": "7",
      "content": null,
      "created_on": "2015-01-26T11:31:58.774",
      "description": ".rhoderc copy",
      "expires": -1.0,
      "gist_id": 7,
      "type": "public",
      "url": "http://127.0.0.1:10003/_admin/gists/7"
    },
    "msg": "created new gist"
  }
}

# Cat a file and pipe to gist
# in RCE 3.5.0 tools and above
$ cat ~/.rhoderc | ~/.rccontrol/{instance-id}/profile/bin/rhodecode-gist \
   --instance-name=enterprise-4 -d '.rhoderc copy' create
{
  "error": null,
  "id": 9253,
  "result": {
    "gist": {
      "access_id": "4",
      "acl_level": "acl_public",
      "content": null,
      "created_on": "2015-08-20T05:54:11.250",
      "description": ".rhoderc copy",
      "expires": -1.0,
      "gist_id": 4,
      "modified_at": "2015-08-20T05:54:11.250",
      "type": "public",
      "url": "http://127.0.0.1:10000/_admin/gists/4"
    },
    "msg": "created new gist"
  }
}

rhodecode-index

More detailed information regarding setting up the indexer is available in the :ref:`indexing-ref` section. Options:

Example usage:

# Run the indexer
$ ~/.rccontrol/enterprise-4/profile/bin/rhodecode-index \
    --instance-name=enterprise-4

# Run indexer based on mapping.ini file
# This is using pre-350 virtualenv
(venv)$ rhodecode-index --instance-name=enterprise-1

# Index from the command line without creating
# the .rhoderc file
$ rhodecode-index --apikey=key --apihost=http://rhodecode.server \
    --instance-name=enterprise-2 --save-config

# Create the indexing mapping file
$ ~/.rccontrol/enterprise-4/profile/bin/rhodecode-index \
    --create-mapping mapping.ini --instance-name=enterprise-4

rhodecode-list-instances

Use this command to list the instance details configured in the :file:`~/.rhoderc` file.

$ .rccontrol/enterprise-1/profile/bin/rhodecode-list-instances
[instance:production] - Config only
API-HOST: https://some.url.com
API-KEY:  some.auth.token

[instance:development] - Config only
API-HOST: http://some.ip.address
API-KEY:  some.auth.token

rhodecode-setup-config

Use this command to create the ~.rhoderc file required by |RCT| to access remote instances.

(venv)$ rhodecode-setup-config --instance-name=tea api_host=URL api_key=xyz
Config not found under /Users/username/.rhoderc, creating a new one
Wrote new configuration into /Users/username/.rhoderc