emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/dockerfile-mode 69bfba7acc 064/104: Merge pull request #31


From: ELPA Syncer
Subject: [nongnu] elpa/dockerfile-mode 69bfba7acc 064/104: Merge pull request #31 from purcell/master
Date: Sat, 29 Jan 2022 07:58:34 -0500 (EST)

branch: elpa/dockerfile-mode
commit 69bfba7acc6bda0d0a5834c3774fffc145337a63
Merge: 3c6bc90360 39f35d927f
Author: Drew Csillag <drew@thecsillags.com>
Commit: GitHub <noreply@github.com>

    Merge pull request #31 from purcell/master
    
    Collection of fixes and improvements
---
 dockerfile-mode.el | 95 ++++++++++++++++++++++++++++--------------------------
 1 file changed, 50 insertions(+), 45 deletions(-)

diff --git a/dockerfile-mode.el b/dockerfile-mode.el
index 793de05c8d..ca131af588 100644
--- a/dockerfile-mode.el
+++ b/dockerfile-mode.el
@@ -1,6 +1,8 @@
-;;; dockerfile-mode.el --- Major mode for editing Docker's Dockerfiles
+;;; dockerfile-mode.el --- Major mode for editing Docker's Dockerfiles -*- 
lexical-binding: t -*-
 
 ;; Copyright (c) 2013 Spotify AB
+;; Package-Requires: ((emacs "24") (s "1.12"))
+;; Homepage: https://github.com/spotify/dockerfile-mode
 ;;
 ;; Licensed under the Apache License, Version 2.0 (the "License"); you may not
 ;; use this file except in compliance with the License. You may obtain a copy 
of
@@ -14,14 +16,20 @@
 ;; License for the specific language governing permissions and limitations 
under
 ;; the License.
 
+;;; Commentary:
+
+;; Provides a major mode `dockerfile-mode' for use with the standard
+;; `Dockerfile' file format.  Additional convenience functions allow
+;; images to be built easily.
+
 ;;; Code:
 
 (require 'sh-script)
 (require 'rx)
+(require 's)
 
-(declare-function cygwin-convert-file-name-to-windows "cygw32.c" (file 
&optional absolute-p))
 
-(defvar docker-image-name nil)
+(declare-function cygwin-convert-file-name-to-windows "cygw32.c" (file 
&optional absolute-p))
 
 (defgroup dockerfile nil
   "dockerfile code editing commands for Emacs."
@@ -93,61 +101,58 @@ Each element of the list will be passed as a separate
 
 (defun dockerfile-build-arg-string ()
   "Create a --build-arg string for each element in `dockerfile-build-args'."
-  (mapconcat (lambda (arg) (concat "--build-arg " "\"" arg "\""))
+  (mapconcat (lambda (arg) (concat "--build-arg " (shell-quote-argument arg)))
              dockerfile-build-args " "))
 
-(defun standard-filename (file)
+(defun dockerfile-standard-filename (file)
   "Convert the file name to OS standard.
 If in Cygwin environment, uses Cygwin specific function to convert the
 file name. Otherwise, uses Emacs' standard conversion function."
-  (format "%s" (if (fboundp 'cygwin-convert-file-name-to-windows)
-                   (s-replace "\\" "\\\\" (cygwin-convert-file-name-to-windows 
file))
-                 (convert-standard-filename file))))
+  (if (fboundp 'cygwin-convert-file-name-to-windows)
+      (s-replace "\\" "\\\\" (cygwin-convert-file-name-to-windows file))
+    (convert-standard-filename file)))
+
+(defvar dockerfile-image-name nil
+  "Name of the dockerfile currently being used.
+This can be set in file or directory-local variables.")
+(define-obsolete-variable-alias 'docker-image-name 'dockerfile-image-name)
+
+(defvar dockerfile-image-name-history nil
+  "History of image names read by `dockerfile-read-image-name'.")
+
+(defun dockerfile-read-image-name ()
+  "Read a docker image name."
+  (read-string "Image name: " dockerfile-image-name 
'dockerfile-image-name-history))
+
 
 ;;;###autoload
-(defun dockerfile-build-buffer (image-name)
-  "Build an image based upon the buffer"
-  (interactive
-   (if (null docker-image-name)
-       (list (read-string "image-name: " nil nil))
-     (list docker-image-name)))
+(defun dockerfile-build-buffer (image-name &optional no-cache)
+  "Build an image called IMAGE-NAME based upon the buffer.
+If prefix arg NO-CACHE is set, don't cache the image."
+  (interactive (list (dockerfile-read-image-name) prefix-arg))
   (save-buffer)
   (if (stringp image-name)
-      (async-shell-command
-       (format "%sdocker build -t %s %s -f \"%s\" \"%s\""
-               (if dockerfile-use-sudo "sudo " "")
-               image-name
-               (dockerfile-build-arg-string)
-               (standard-filename (buffer-file-name))
-               (standard-filename (file-name-directory (buffer-file-name))))
-       "*docker-build-output*")
-    (print "docker-image-name must be a string, consider surrounding it with 
double quotes")))
+      (compilation-start
+       (format
+        "%sdocker build %s -t %s %s -f %s %s"
+        (if dockerfile-use-sudo "sudo " "")
+        (if no-cache "--no-cache" "")
+        (shell-quote-argument image-name)
+        (dockerfile-build-arg-string)
+        (shell-quote-argument (dockerfile-standard-filename 
(buffer-file-name)))
+        (shell-quote-argument (dockerfile-standard-filename 
default-directory)))
+       nil
+       (lambda (_) (format "*docker-build-output: %s *" image-name)))
+    (print "dockerfile-image-name must be a string, consider surrounding it 
with double quotes")))
 
 ;;;###autoload
 (defun dockerfile-build-no-cache-buffer (image-name)
-  "Build an image based upon the buffer without cache"
-  (interactive
-   (if (null docker-image-name)
-       (list (read-string "image-name: " nil nil))
-     (list docker-image-name)))
-  (save-buffer)
-  (if (stringp image-name)
-      (async-shell-command
-       (format "%s docker build --no-cache -t %s %s -f \"%s\" \"%s\""
-               (if dockerfile-use-sudo "sudo" "")
-               image-name
-               (dockerfile-build-arg-string)
-               (standard-filename (buffer-file-name))
-               (standard-filename (file-name-directory (buffer-file-name))))
-       "*docker-build-output*")
-    (print "docker-image-name must be a string, consider surrounding it with 
double quotes")))
-
-;; Handle emacs < 24, which does not have prog-mode
-(defalias 'dockerfile-parent-mode
-  (if (fboundp 'prog-mode) 'prog-mode 'fundamental-mode))
+  "Build an image called IMAGE-NAME based upon the buffer without cache."
+  (interactive (list (dockerfile-read-image-name)))
+  (dockerfile-build-buffer image-name t))
 
 ;;;###autoload
-(define-derived-mode dockerfile-mode dockerfile-parent-mode "Dockerfile"
+(define-derived-mode dockerfile-mode prog-mode "Dockerfile"
   "A major mode to edit Dockerfiles.
 \\{dockerfile-mode-map}
 "
@@ -162,7 +167,7 @@ file name. Otherwise, uses Emacs' standard conversion 
function."
   (setq local-abbrev-table dockerfile-mode-abbrev-table))
 
 ;;;###autoload
-(add-to-list 'auto-mode-alist '("Dockerfile.*\\'" . dockerfile-mode))
+(add-to-list 'auto-mode-alist '("Dockerfile\\'" . dockerfile-mode))
 
 (provide 'dockerfile-mode)
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]