Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 22 Oct 2020 06:39:16 +0000 (UTC)
From:      Baptiste Daroussin <bapt@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r552938 - head/Keywords
Message-ID:  <202010220639.09M6dGYp033784@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bapt
Date: Thu Oct 22 06:39:16 2020
New Revision: 552938
URL: https://svnweb.freebsd.org/changeset/ports/552938

Log:
  Convert @shell from shell script to lua script
  
  This makes @shell rootdir friendly and cross install friendly
  as well as capsicumized.
  
  Bonus: the /etc/shells is now only touched when needed
  
  Reviewed by:	manu, mat
  Approved by:	portmgr (mat)
  Differential Revision:	D26640

Modified:
  head/Keywords/shell.ucl

Modified: head/Keywords/shell.ucl
==============================================================================
--- head/Keywords/shell.ucl	Thu Oct 22 06:38:09 2020	(r552937)
+++ head/Keywords/shell.ucl	Thu Oct 22 06:39:16 2020	(r552938)
@@ -8,21 +8,40 @@
 #
 
 actions: [file]
-post-install: <<EOD
-  case "%@" in
-  /*) file="%@" ;;
-  *) file="%D/%@" ;;
-  esac
-        cp ${PKG_ROOTDIR}/etc/shells ${PKG_ROOTDIR}/etc/shells.bak
-        (grep -v "^${file}$" ${PKG_ROOTDIR}/etc/shells.bak; echo ${file}) > ${PKG_ROOTDIR}/etc/shells
-        rm -f ${PKG_ROOTDIR}/etc/shells.bak
+post-install-lua: <<EOD
+  shell_path = pkg.prefixed_path("%@")
+  shell = io.open("/etc/shells", "r+")
+  while true do
+    line = shell:read()
+    if line == nil then break end
+    if line == shell_path then
+      -- the shell path is already in the shell file
+      shell:close()
+      return
+    end
+  end
+  shell:write(shell_path .. "\n")
+  shell:close()
 EOD
-pre-deinstall: <<EOD
-  case "%@" in
-  /*) file="%@" ;;
-  *) file="%D/%@" ;;
-  esac
-        cp ${PKG_ROOTDIR}/etc/shells ${PKG_ROOTDIR}/etc/shells.bak
-        grep -v "^${file}$" ${PKG_ROOTDIR}/etc/shells.bak > ${PKG_ROOTDIR}/etc/shells
-        rm -f ${PKG_ROOTDIR}/etc/shells.bak
+pre-deinstall-lua: <<EOD
+  shell_path = pkg.prefixed_path("%@")
+  shellsbuf = ""
+  shells_path = "/etc/shells"
+  shell = io.open(shells_path, "r+")
+  found = false
+  while true do
+    line = shell:read()
+    if line == nil then break end
+    if line == shell_path then
+      found = true
+    else
+      shellsbuf = shellsbuf .. line .. "\n"
+    end
+  end
+  shell:close()
+  if found then
+    shell = io.open(shells_path, "w+")
+    shell:write(shellsbuf)
+    shell:close()
+  end
 EOD



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202010220639.09M6dGYp033784>