maven-central.el
author Oleksandr Gavenko <gavenkoa@gmail.com>
Sat, 25 Mar 2017 11:59:34 +0300
changeset 1513 0da077ba84ab
parent 1509 f9b34ef28954
child 1517 29677daeb8ab
permissions -rw-r--r--
Parser for ivy dependencies.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1082
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     1
;;; maven-central.el --- Maven central auxility
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     2
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     3
;;; Commentary:
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     4
;;
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     5
1091
bbe864449f48 Fix dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1082
diff changeset
     6
(require 'json)
1082
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     7
(require 'url-handlers)
1508
fad1a57bf25f Move maven handling logic from maven-central.el to separate file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1302
diff changeset
     8
(require 'maven)
1082
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
     9
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    10
;;; Code:
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    11
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    12
(defvar maven-central.buffer-name "*Maven Central*")
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    13
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    14
(defconst maven-central.search-url "http://search.maven.org/solrsearch/select?wt=json&rows=20")
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    15
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    16
(defun maven-central.versions-url (groupId artifactId)
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    17
  (concat maven-central.search-url "&core=gav&q=g:" (url-hexify-string groupId) (url-hexify-string " AND ") "a:" (url-hexify-string artifactId)))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    18
;; (maven-central.versions-url "junit" "junit")
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    19
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    20
(defun maven-central.versions-callback (status)
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    21
  (let ( (buffer (current-buffer)) json )
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    22
    (with-temp-buffer
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    23
      (url-insert buffer)
1245
545d1e17bfe3 Fix: Warning: `beginning-of-buffer' is for interactive use only; use `(goto-char (point-min))' instead.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1244
diff changeset
    24
      (goto-char (point-min))
1082
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    25
      (setq json (json-read))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    26
      ;; (switch-to-buffer maven-central.buffer-name)
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    27
      ;; (pp json)
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    28
      (message "Available versions: %s" (mapconcat (lambda (json) (cdr (assq 'v json))) (cdr (assq 'docs (cdr (assoc 'response json)))) ", "))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    29
      )))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    30
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    31
(defun maven-central.versions (groupId artifactId)
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    32
  "Retrieve available versions."
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    33
  (url-retrieve (maven-central.versions-url groupId artifactId) #'maven-central.versions-callback))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    34
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    35
(defun maven-central.last-version-url (groupId artifactId)
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    36
  (concat maven-central.search-url "&q=g:" (url-hexify-string groupId) (url-hexify-string " AND ") "a:" (url-hexify-string artifactId)))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    37
;; (maven-central.versions-url "junit" "junit")
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    38
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    39
(defun maven-central.last-version-callback (status)
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    40
  (let ( (buffer (current-buffer)) json )
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    41
    (with-temp-buffer
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    42
      (url-insert buffer)
1245
545d1e17bfe3 Fix: Warning: `beginning-of-buffer' is for interactive use only; use `(goto-char (point-min))' instead.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1244
diff changeset
    43
      (goto-char (point-min))
1082
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    44
      (setq json (json-read))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    45
      ;; (switch-to-buffer maven-central.buffer-name)
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    46
      ;; (pp json)
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    47
      (message "Latest version: %s" (cdr (assq 'latestVersion (elt (cdr (assq 'docs (cdr (assoc 'response json)))) 0))))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    48
      )))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    49
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    50
(defun maven-central.last-version (groupId artifactId)
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    51
  "Retrieve last package version."
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    52
  (url-retrieve (maven-central.last-version-url groupId artifactId) #'maven-central.last-version-callback))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    53
1151
350534cdf7be Add missing autoloads.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1145
diff changeset
    54
;;;###autoload
1082
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    55
(defun maven-central.last-version-from-pom ()
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    56
  (interactive)
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    57
  (let (dependency groupId artifactId)
1508
fad1a57bf25f Move maven handling logic from maven-central.el to separate file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1302
diff changeset
    58
    (setq dependency (maven.parse-pom-dependency))
1082
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    59
    (setq groupId (elt dependency 0))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    60
    (setq artifactId (elt dependency 1))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    61
    (when (and groupId artifactId)
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    62
      (maven-central.last-version groupId artifactId))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    63
    ))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    64
1151
350534cdf7be Add missing autoloads.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1145
diff changeset
    65
;;;###autoload
1082
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    66
(defun maven-central.versions-from-pom ()
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    67
  (interactive)
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    68
  (let (dependency groupId artifactId)
1508
fad1a57bf25f Move maven handling logic from maven-central.el to separate file.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1302
diff changeset
    69
    (setq dependency (maven.parse-pom-dependency))
1082
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    70
    (setq groupId (elt dependency 0))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    71
    (setq artifactId (elt dependency 1))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    72
    (when (and groupId artifactId)
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    73
      (maven-central.versions groupId artifactId))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    74
    ))
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
    75
1513
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    76
(defun ivy.parse-dependency ()
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    77
  (let ( end groupId artifactId )
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    78
    (save-excursion
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    79
      (if (looking-at "[^>]*<dependency ")
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    80
          (progn (search-forward "<") (backward-char))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    81
        (search-backward "<dependency " nil t))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    82
      (when (re-search-forward "<dependency [^/]*/>")
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    83
        (setq end (point))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    84
        (search-backward "<")
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    85
        (save-restriction
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    86
          (narrow-to-region (point) end)
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    87
          (goto-char (point-min))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    88
          (when (re-search-forward "\\s-org\\s-*=\\s-*['\"]\\([^'\"]+\\)['\"]" nil t)
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    89
            (setq groupId (match-string 1)))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    90
          (goto-char (point-min))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    91
          (when (re-search-forward "\\s-name\\s-*=\\s-*['\"]\\([^'\"]+\\)['\"]" nil t)
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    92
            (setq artifactId (match-string 1)))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    93
          )))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    94
    (list groupId artifactId)))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    95
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    96
;;;###autoload
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    97
(defun maven-central.last-version-from-ivy ()
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    98
  (interactive)
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
    99
  (let (dependency groupId artifactId)
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   100
    (setq dependency (ivy.parse-dependency))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   101
    (setq groupId (elt dependency 0))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   102
    (setq artifactId (elt dependency 1))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   103
    (when (and groupId artifactId)
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   104
      (maven-central.last-version groupId artifactId))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   105
    ))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   106
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   107
;;;###autoload
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   108
(defun maven-central.versions-from-ivy ()
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   109
  (interactive)
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   110
  (let (dependency groupId artifactId)
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   111
    (setq dependency (ivy.parse-dependency))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   112
    (setq groupId (elt dependency 0))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   113
    (setq artifactId (elt dependency 1))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   114
    (when (and groupId artifactId)
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   115
      (maven-central.versions groupId artifactId))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   116
    ))
0da077ba84ab Parser for ivy dependencies.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents: 1509
diff changeset
   117
1082
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   118
;; (maven-central.last-version "junit" "junit")
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   119
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   120
(provide 'maven-central)
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   121
964519e5a5ac maven-central helper.
Oleksandr Gavenko <gavenkoa@gmail.com>
parents:
diff changeset
   122
;;; maven-central.el ends here