129 lines
5.8 KiB
EmacsLisp
129 lines
5.8 KiB
EmacsLisp
|
;;; buck.el --- minuscule client library for the Bitbucket API -*- lexical-binding: t -*-
|
||
|
|
||
|
;; Copyright (C) 2016-2018 Jonas Bernoulli
|
||
|
|
||
|
;; Author: Jonas Bernoulli <jonas@bernoul.li>
|
||
|
;; Homepage: https://github.com/magit/ghub
|
||
|
;; Keywords: tools
|
||
|
|
||
|
;; This file is not part of GNU Emacs.
|
||
|
|
||
|
;; This file is free software; you can redistribute it and/or modify
|
||
|
;; it under the terms of the GNU General Public License as published by
|
||
|
;; the Free Software Foundation; either version 3, or (at your option)
|
||
|
;; any later version.
|
||
|
|
||
|
;; This file is distributed in the hope that it will be useful,
|
||
|
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
;; GNU General Public License for more details.
|
||
|
|
||
|
;; For a copy of the GPL see https://www.gnu.org/licenses/gpl.txt.
|
||
|
|
||
|
;;; Commentary:
|
||
|
|
||
|
;; Buck is a library that provides basic support for using the Bitbucket API
|
||
|
;; from Emacs packages. It abstracts access to API resources using only
|
||
|
;; a handful of functions that are not resource-specific.
|
||
|
|
||
|
;; This library is implemented on top of Ghub. Unlike Ghub, Buck does
|
||
|
;; not support the guided creation of tokens because Bitbucket lacks the
|
||
|
;; features that would be necessary to implement that. Users have to
|
||
|
;; create tokens through the web interface.
|
||
|
|
||
|
;;; Code:
|
||
|
|
||
|
(require 'ghub)
|
||
|
|
||
|
(defconst buck-default-host "api.bitbucket.org/2.0"
|
||
|
"The default host that is used if `buck.host' is not set.")
|
||
|
|
||
|
;; HEAD and PATCH are not supported according to
|
||
|
;; https://developer.atlassian.com/bitbucket/api/2/reference/meta/uri-uuid
|
||
|
|
||
|
(cl-defun buck-get (resource &optional params
|
||
|
&key query payload headers
|
||
|
silent unpaginate noerror reader
|
||
|
username auth host
|
||
|
callback errorback extra)
|
||
|
"Make a `GET' request for RESOURCE, with optional query PARAMS.
|
||
|
Like calling `ghub-request' (which see) with \"GET\" as METHOD
|
||
|
and `bitbucket' as FORGE."
|
||
|
(ghub-request "GET" resource params :forge 'bitbucket
|
||
|
:query query :payload payload :headers headers
|
||
|
:silent silent :unpaginate unpaginate
|
||
|
:noerror noerror :reader reader
|
||
|
:username username :auth auth :host host
|
||
|
:callback callback :errorback errorback :extra extra))
|
||
|
|
||
|
(cl-defun buck-put (resource &optional params
|
||
|
&key query payload headers
|
||
|
silent unpaginate noerror reader
|
||
|
username auth host
|
||
|
callback errorback extra)
|
||
|
"Make a `PUT' request for RESOURCE, with optional payload PARAMS.
|
||
|
Like calling `ghub-request' (which see) with \"PUT\" as METHOD
|
||
|
and `bitbucket' as FORGE."
|
||
|
(ghub-request "PUT" resource params :forge 'bitbucket
|
||
|
:query query :payload payload :headers headers
|
||
|
:silent silent :unpaginate unpaginate
|
||
|
:noerror noerror :reader reader
|
||
|
:username username :auth auth :host host
|
||
|
:callback callback :errorback errorback :extra extra))
|
||
|
|
||
|
(cl-defun buck-post (resource &optional params
|
||
|
&key query payload headers
|
||
|
silent unpaginate noerror reader
|
||
|
username auth host
|
||
|
callback errorback extra)
|
||
|
"Make a `POST' request for RESOURCE, with optional payload PARAMS.
|
||
|
Like calling `ghub-request' (which see) with \"POST\" as METHOD
|
||
|
and `bitbucket' as FORGE."
|
||
|
(ghub-request "POST" resource params :forge 'bitbucket
|
||
|
:query query :payload payload :headers headers
|
||
|
:silent silent :unpaginate unpaginate
|
||
|
:noerror noerror :reader reader
|
||
|
:username username :auth auth :host host
|
||
|
:callback callback :errorback errorback :extra extra))
|
||
|
|
||
|
(cl-defun buck-delete (resource &optional params
|
||
|
&key query payload headers
|
||
|
silent unpaginate noerror reader
|
||
|
username auth host
|
||
|
callback errorback extra)
|
||
|
"Make a `DELETE' request for RESOURCE, with optional payload PARAMS.
|
||
|
Like calling `ghub-request' (which see) with \"DELETE\" as METHOD
|
||
|
and `bitbucket' as FORGE."
|
||
|
(ghub-request "DELETE" resource params :forge 'bitbucket
|
||
|
:query query :payload payload :headers headers
|
||
|
:silent silent :unpaginate unpaginate
|
||
|
:noerror noerror :reader reader
|
||
|
:username username :auth auth :host host
|
||
|
:callback callback :errorback errorback :extra extra))
|
||
|
|
||
|
(cl-defun buck-request (method resource &optional params
|
||
|
&key query payload headers
|
||
|
silent unpaginate noerror reader
|
||
|
username auth host
|
||
|
callback errorback extra)
|
||
|
"Make a request for RESOURCE and return the response body.
|
||
|
Like calling `ghub-request' (which see) with `bitbucket' as FORGE."
|
||
|
(ghub-request method resource params :forge 'bitbucket
|
||
|
:query query :payload payload :headers headers
|
||
|
:silent silent :unpaginate unpaginate
|
||
|
:noerror noerror :reader reader
|
||
|
:username username :auth auth :host host
|
||
|
:callback callback :errorback errorback :extra extra))
|
||
|
|
||
|
(cl-defun buck-repository-id (owner name &key username auth host)
|
||
|
"Return the id of the repository specified by OWNER, NAME and HOST."
|
||
|
(substring (cdr (assq 'uuid
|
||
|
(buck-get (format "/repositories/%s/%s" owner name)
|
||
|
nil
|
||
|
:username username :auth auth :host host)))
|
||
|
1 -1))
|
||
|
|
||
|
;;; _
|
||
|
(provide 'buck)
|
||
|
;;; buck.el ends here
|