Exemplo n.º 1
0
    TARFILE_WRITE_MODE = 'w'
    ZIP_COMPRESSION_METHOD = zipfile.ZIP_STORED
else:
    del zlib
    ZLIB_SUPPORT = True
    TARFILE_WRITE_MODE = 'w:gz'
    ZIP_COMPRESSION_METHOD = zipfile.ZIP_DEFLATED

ZIP_EXTENSION = '.zip'
TAR_EXTENSION = '.tar'
TGZ_EXTENSION = '.tar.gz'

EPOCH_START = datetime(1970, 1, 1)

archives = Blueprint('archives', __name__)  # pylint: disable=C0103
register_converter(archives, 'sha', SHAConverter)
register_general_error_handler(archives, json_error_page)


def _walk_tree_recursively(repo, tree, blobs_only=False, base_path=''):
    for entry in tree:
        if entry.filemode == GIT_MODE_SUBMODULE:
            continue  # FIX ME: handle submodules & symlinks
        path = base_path + entry.name
        obj = repo[entry.id]
        if not blobs_only or obj.type == GIT_OBJ_BLOB:
            yield path, entry.filemode, obj

        if obj.type == GIT_OBJ_TREE:
            for subpath, subfilemode, subobj in _walk_tree_recursively(
                    repo, obj, blobs_only, (path + '/')):
Exemplo n.º 2
0
    import mimetypes

    def guess_mime_type(filename, content):  # pylint: disable=W0613
        (mime_type, encoding) = mimetypes.guess_type(filename)  # pylint: disable=W0612
        return mime_type
else:
    import atexit
    MAGIC = libmagic.Magic(flags=libmagic.MAGIC_MIME_TYPE)
    atexit.register(MAGIC.close)

    def guess_mime_type(filename, content):  # pylint: disable=W0613
        return MAGIC.id_buffer(content)


porcelain = Blueprint('porcelain', __name__)  # pylint: disable=C0103
register_converter(porcelain, 'sha', SHAConverter)
register_general_error_handler(porcelain, json_error_page)


@porcelain.route('/repos/')
@corsify
@jsonify
def get_repo_list():
    return [convert_repo(repo_key) for repo_key in sorted(get_repo_names())]


@porcelain.route('/repos/<repo_key>/')
@corsify
@jsonify
def get_repo_info(repo_key):
    get_repo(repo_key)  # check repo_key validity
Exemplo n.º 3
0
    import mimetypes

    def guess_mime_type(filename, content):  # pylint: disable=W0613
        (mime_type, encoding) = mimetypes.guess_type(filename)  # pylint: disable=W0612
        return mime_type
else:
    import atexit
    MAGIC = libmagic.Magic(flags=libmagic.MAGIC_MIME_TYPE)
    atexit.register(MAGIC.close)

    def guess_mime_type(filename, content):  # pylint: disable=W0613
        return MAGIC.id_buffer(content)


porcelain = Blueprint('porcelain', __name__)  # pylint: disable=C0103
register_converter(porcelain, 'sha', SHAConverter)
register_general_error_handler(porcelain, json_error_page)


@porcelain.route('/repos/')
@corsify
@jsonify
def get_repo_list():
    return [convert_repo(repo_key) for repo_key in sorted(get_repo_names())]


@porcelain.route('/repos/<repo_key>/')
@corsify
@jsonify
def get_repo_info(repo_key):
    get_repo(repo_key)  # check repo_key validity
Exemplo n.º 4
0
        (mime_type, encoding) = mimetypes.guess_type(filename)  # pylint: disable=W0612
        return mime_type


else:
    import atexit

    MAGIC = libmagic.Magic(flags=libmagic.MAGIC_MIME_TYPE)
    atexit.register(MAGIC.close)

    def guess_mime_type(filename, content):  # pylint: disable=W0613
        return MAGIC.id_buffer(content)


porcelain = Blueprint("porcelain", __name__)  # pylint: disable=C0103
register_converter(porcelain, "sha", SHAConverter)
register_general_error_handler(porcelain, json_error_page)


@porcelain.route("/repos/")
@corsify
@jsonify
def get_repo_list():
    return [convert_repo(repo_key) for repo_key in sorted(get_repo_names())]


@porcelain.route("/repos/<repo_key>/")
@corsify
@jsonify
def get_repo_info(repo_key):
    get_repo(repo_key)  # check repo_key validity
Exemplo n.º 5
0
from itertools import islice

from flask import current_app, request, Blueprint
from werkzeug.exceptions import NotFound, BadRequest
from pygit2 import GIT_REF_SYMBOLIC, GIT_SORT_TIME

from restfulgit.plumbing.retrieval import get_repo, get_commit as _get_commit, get_blob as _get_blob, get_tree as _get_tree, lookup_ref, get_tag as _get_tag
from restfulgit.plumbing.converters import convert_commit, convert_blob, convert_tree, convert_ref, convert_tag
from restfulgit.utils.json import jsonify
from restfulgit.utils.cors import corsify
from restfulgit.utils.json_err_pages import json_error_page, register_general_error_handler
from restfulgit.utils.url_converters import SHAConverter, register_converter

plumbing = Blueprint('plumbing', __name__)  # pylint: disable=C0103
register_converter(plumbing, 'sha', SHAConverter)
register_general_error_handler(plumbing, json_error_page)


@plumbing.route('/repos/<repo_key>/git/commits/')
@corsify
@jsonify
def get_commit_list(repo_key):
    ref_name = request.args.get('ref_name') or None
    start_sha = request.args.get('start_sha') or None
    limit = request.args.get(
        'limit') or current_app.config['RESTFULGIT_DEFAULT_COMMIT_LIST_LIMIT']
    try:
        limit = int(limit)
    except ValueError:
        raise BadRequest("invalid limit")
Exemplo n.º 6
0
    TARFILE_WRITE_MODE = 'w'
    ZIP_COMPRESSION_METHOD = zipfile.ZIP_STORED
else:
    del zlib
    ZLIB_SUPPORT = True
    TARFILE_WRITE_MODE = 'w:gz'
    ZIP_COMPRESSION_METHOD = zipfile.ZIP_DEFLATED

ZIP_EXTENSION = '.zip'
TAR_EXTENSION = '.tar'
TGZ_EXTENSION = '.tar.gz'

EPOCH_START = datetime(1970, 1, 1)

archives = Blueprint('archives', __name__)  # pylint: disable=C0103
register_converter(archives, 'sha', SHAConverter)
register_converter(archives, 'repo', RepoConverter)
register_general_error_handler(archives, json_error_page)


def _walk_tree_recursively(repo, tree, blobs_only=False, base_path=''):
    for entry in tree:
        if entry.filemode == GIT_MODE_SUBMODULE:
            continue  # FIX ME: handle submodules & symlinks
        path = base_path + entry.name
        obj = repo[entry.id]
        if not blobs_only or obj.type == GIT_OBJ_BLOB:
            yield path, entry.filemode, obj

        if obj.type == GIT_OBJ_TREE:
            for subpath, subfilemode, subobj in _walk_tree_recursively(
Exemplo n.º 7
0
from itertools import ifilter, islice

from flask import current_app, request, Blueprint
from werkzeug.exceptions import NotFound, BadRequest
from pygit2 import GIT_REF_SYMBOLIC, GIT_SORT_TIME

from restfulgit.plumbing.retrieval import get_repo, get_commit as _get_commit, get_blob as _get_blob, get_tree as _get_tree, lookup_ref, get_tag as _get_tag
from restfulgit.plumbing.converters import convert_commit, convert_blob, convert_tree, convert_ref, convert_tag
from restfulgit.utils.json import jsonify
from restfulgit.utils.cors import corsify
from restfulgit.utils.json_err_pages import json_error_page, register_general_error_handler
from restfulgit.utils.url_converters import SHAConverter, register_converter


plumbing = Blueprint('plumbing', __name__)  # pylint: disable=C0103
register_converter(plumbing, 'sha', SHAConverter)
register_general_error_handler(plumbing, json_error_page)


@plumbing.route('/repos/<repo_key>/git/commits/')
@corsify
@jsonify
def get_commit_list(repo_key):
    ref_name = request.args.get('ref_name') or None
    start_sha = request.args.get('start_sha') or None
    limit = request.args.get('limit') or current_app.config['RESTFULGIT_DEFAULT_COMMIT_LIST_LIMIT']
    try:
        limit = int(limit)
    except ValueError:
        raise BadRequest("invalid limit")
    if limit < 0:
Exemplo n.º 8
0
    import mimetypes

    def guess_mime_type(filename, content):  # pylint: disable=W0613
        (mime_type, encoding) = mimetypes.guess_type(filename)  # pylint: disable=W0612
        return mime_type
else:
    import atexit
    MAGIC = libmagic.Magic(flags=libmagic.MAGIC_MIME_TYPE)
    atexit.register(MAGIC.close)

    def guess_mime_type(filename, content):  # pylint: disable=W0613
        return MAGIC.id_buffer(content)


porcelain = Blueprint('porcelain', __name__)  # pylint: disable=C0103
register_converter(porcelain, 'sha', SHAConverter)
register_converter(porcelain, 'repo', RepoConverter)
register_general_error_handler(porcelain, json_error_page)


@porcelain.route('/repos/')
@corsify
@jsonify
def get_repo_list():
    return [convert_repo(repo_key) for repo_key in sorted(get_repo_names())]


@porcelain.route('/repos/<repo:repo_key>/')
@corsify
@jsonify
def get_repo_info(repo_key):
Exemplo n.º 9
0
else:
    del zlib
    ZLIB_SUPPORT = True
    TARFILE_WRITE_MODE = 'w:gz'
    ZIP_COMPRESSION_METHOD = zipfile.ZIP_DEFLATED


ZIP_EXTENSION = '.zip'
TAR_EXTENSION = '.tar'
TGZ_EXTENSION = '.tar.gz'

EPOCH_START = datetime(1970, 1, 1)


archives = Blueprint('archives', __name__)  # pylint: disable=C0103
register_converter(archives, 'sha', SHAConverter)
register_general_error_handler(archives, json_error_page)


def _walk_tree_recursively(repo, tree, blobs_only=False, base_path=''):
    for entry in tree:
        if entry.filemode == GIT_MODE_SUBMODULE:
            continue  # FIX ME: handle submodules & symlinks
        path = base_path + entry.name
        obj = repo[entry.oid]
        if not blobs_only or obj.type == GIT_OBJ_BLOB:
            yield path, entry.filemode, obj

        if obj.type == GIT_OBJ_TREE:
            for subpath, subfilemode, subobj in _walk_tree_recursively(repo, obj, blobs_only, (path + '/')):
                yield subpath, subfilemode, subobj
Exemplo n.º 10
0
from itertools import islice

from flask import current_app, request, Blueprint
from werkzeug.exceptions import NotFound, BadRequest
from pygit2 import GIT_REF_SYMBOLIC, GIT_SORT_TIME

from restfulgit.plumbing.retrieval import get_repo, get_commit as _get_commit, get_blob as _get_blob, get_tree as _get_tree, lookup_ref, get_tag as _get_tag
from restfulgit.plumbing.converters import convert_commit, convert_blob, convert_tree, convert_ref, convert_tag
from restfulgit.utils.json import jsonify
from restfulgit.utils.cors import corsify
from restfulgit.utils.json_err_pages import json_error_page, register_general_error_handler
from restfulgit.utils.url_converters import RepoConverter, SHAConverter, register_converter

plumbing = Blueprint('plumbing', __name__)  # pylint: disable=C0103
register_converter(plumbing, 'sha', SHAConverter)
register_converter(plumbing, 'repo', RepoConverter)
register_general_error_handler(plumbing, json_error_page)


@plumbing.route('/repos/<repo:repo_key>/git/commits/')
@corsify
@jsonify
def get_commit_list(repo_key):
    ref_name = request.args.get('ref_name') or None
    start_sha = request.args.get('start_sha') or None
    limit = request.args.get(
        'limit') or current_app.config['RESTFULGIT_DEFAULT_COMMIT_LIST_LIMIT']
    try:
        limit = int(limit)
    except ValueError: