1
0
Fork 0

firefox-home-profile/checkpath: Use checkpath variant (instead of mktmp) with mktemp compatible swicthes

pull/890/head
tokiclover 10 years ago
parent ca94eccbb9
commit f3081c8a40

@ -1,86 +1,108 @@
# #
# Provide a cheap helper for temporary directory/file creation # $Header: firefox-home-profile/functions/checkpath Exp $
# # $Aythor: (c) 2012-015 -tclover <tokiclover@gmail.com> Exp $
# $Header: firefox-profile/functions/fhp Exp $ # $License: MIT (or 2-clause/new/simplified BSD) Exp $
# $Aythor: (c) 2011-2014 -tclover <tokiclover@gmail.com> Exp $ # $Version: 0.7 2015/05/05 21:09:26 Exp $
# $License: MIT (or 2-clause/new/simplified BSD) Exp $
# $Version: 0.2 2014/09/09 21:09:26 Exp $
# #
function die { function die {
local ret=$? local ret=$?
print -P " %F{red}%1x: %F{yellow}%U%I%u:%f $argv" >&2 print -P " %F{red}*%f ${(%):-%1x}: $argv" >&2
return $ret return $ret
} }
function usage { function checkpath {
function usage {
cat <<-EOH cat <<-EOH
usage: mktmp [-d|-f] [-m <mode>] [-o <owner[:group]>] [-g <group>] TEMPLATE usage: ${(%):-%1x} [-p] [-d|-f] [-m mode] [-o owner[:group]] TEMPLATE|DIR|FILE
-d, --dir create a directory -d, --dir (Create a) directory
-f, --file create a file -f, --file (Create a) file
-o, --owner <name> owner naame -P, --pipe (Create a) pipe (FIFO)
-g, --group <name> group name -o, --owner <name> Use owner name
-m, --mode <1700> octal mode -g, --group <name> Use group name
-h, --help help/exit -m, --mode <1700> Use octal mode
-c, --checkpath Enable check mode
-p, --tmpdir[=DIR] Enable mktmp mode
-q, --quiet Enable quiet mode
-h, --help Help/Exit
EOH EOH
return return
} }
(( $# == 0 )) && usage
local args temp=-XXXXXX type
args="$(getopt \
-o Pcdfg:hm:o:p::q \
-l checkpath,dir,file,group:,tmpdir:: \
-l help,mode:,owner:,pipe,quiet \
-s sh -n checkpath -- "$@")"
(( $? == 0 )) || usage
eval set -- $args
args=
test $# -ge 1 -a -n "$1" || return local group mode owner task tmp quiet
for (( ; $# > 1; )) {
local type temp=XXXXXX tmpdir=${TMPDIR:-/tmp} case $1 {
for (( ; $# > 1; )) (-c|--chec*) task=chk ;;
case $1 { (-p|--tmpd*) task=tmp tmpdir=${2:-$TMPDIR}; shift;;
(-d|--dir) (-d|--dir) args=-d type=dir;;
type=dir (-f|--file) type=file ;;
shift;; (-P|--pipe) type=pipe ;;
(-f|--file) (-h|--help) usage ;;
type=file (-m|--mode) mode=$2 ; shift;;
shift;; (-o|--owner) owner=$2 ; shift;;
(-h|--help) (-g|-group) group=$2 ; shift;;
usage;; (-q|--quiet) quiet=true;;
(-m|--mode) (*) shift; break ;;
local mode=$2 }
shift 2;; shift
(-o|--owner)
local owner="$2"
shift 2;;
(-g|-group)
local group="$2"
shift 2;;
(*)
die "invalid argument $@"
return;;
} }
if ! [ $# -eq 1 -a -n "$1" ]; then
test -n "$1" -a "${1%-$temp}" != "$1" die "Invalid argument(s)/TEMPLATE"
if (( $? )) {
die "invalid/null TEMPLATE"
return
}
(( $+commands[uuidgen] )) && temp=$($commands[uuidgen] --random)
local tmp="$tmpdir/${1%$temp}$temp[1,6]"
if [[ $type == "dir" ]] {
mkdir -p ${mode:+-m$mode} "$tmp"
if (( $? )) {
die "failed to make $tmp"
return return
fi
case $task {
(tmp)
quiet= tmpdir=${tmpdir:-/tmp}
if [[ ${1%$temp} = $1 ]] {
die "Invalid TEMPLATE"
return
}
if (( $+commands[mktemp] )) {
tmp=$($commands[mktemp] -p $tmpdir $args $1)
} else {
(( $+commands[uuidgen] )) && temp=$($commands[uuidgen] --random)
tmp=$tmpdir/${1%-*}-$temp[1,6]
}
;;
(*)
tmp=$1
} }
} else { case $type {
mkdir -p "$tmp:h" && touch "$tmp" (dir)
if (( $? )) { [[ -d $tmp ]] || mkdir -p $tmp
die "failed to make $tmp" ;;
return (*)
[[ -e $tmp ]] || mkdir -p $tmp:h && break
case $type {
(pipe) mkfifo $tmp;;
(file) touch $tmp;;
}
;;
} }
(( $+mode )) && chmod $mode "$tmp"
}
(( $+owner )) && chown $owner "$tmp" (( $? == 0 )) || { die "Failed to create ${tmp}"; return; }
(( $+group )) && chgrp $group "$tmp" [[ -h $tmp ]] && return
[[ -n $owner ]] && chown $owner $tmp
[[ -n $group ]] && chgrp $group $tmp
[[ -n $mode ]] && chmod $mode $tmp
[[ -n $quiet ]] || print $tmp
}
print "$tmp" if [[ ${(%):-%1x} == (checkpath|mktmp)(|.zsh) ]] {
checkpath "$@"
}
# #
# vim:fenc=utf-8:ft=zsh:ci:pi:sts=2:sw=2:ts=2: # vim:fenc=utf-8:ft=zsh:ci:pi:sts=0:sw=2:ts=2:
# #

Loading…
Cancel
Save