mkpk

Систем за управљање пакетима који користи mk из система Plan9
git clone https://git.sr.ht/~strahinja/mkpk
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

recent (2185B)


      1 #!/bin/sh
      2 
      3 output_recent()
      4 {
      5 	local ver1=$1 ver2=$2 major1 major2 minor1 minor2 patch1 patch2
      6 	local rest1 rest2 recent
      7 
      8 	case "${ver1}" in
      9 		*.*)	major1=$(echo "${ver1}" | cut -s -d. -f1)
     10 			rest1=$(echo "${ver1}" | sed 's/^'$major1'\.//');;
     11 		*)	major1="${ver1}"
     12 			rest1=$(echo "${ver1}" | sed 's/^'$major1'//');;
     13 	esac
     14 	case "${ver2}" in
     15 		*.*)	major2=$(echo "${ver2}" | cut -s -d. -f1)
     16 			rest2=$(echo "${ver2}" | sed 's/^'$major2'\.//');;
     17 		*)	major2="${ver2}"
     18 			rest2=$(echo "${ver2}" | sed 's/^'$major2'//');;
     19 	esac
     20 
     21 	if [ "${major1}" -gt "${major2}" ]; then
     22 		echo "${ver1}"
     23 		return
     24 	elif [ "${major1}" -lt "${major2}" ]; then
     25 		echo "${ver2}"
     26 		return
     27 	fi
     28 
     29 	case "${rest1}" in
     30 		*.*)	minor1=$(echo "${rest1}" | cut -s -d. -f1)
     31 			rest1=$(echo "${rest1}" | sed 's/^'$minor1'\.//');;
     32 		*)	minor1="${rest1}"
     33 			rest1=$(echo "${rest1}" | sed 's/^'$minor1'//');;
     34 	esac
     35 	case "${rest2}" in
     36 		*.*)	minor2=$(echo "${rest2}" | cut -s -d. -f1)
     37 			rest2=$(echo "${rest2}" | sed 's/^'$minor2'\.//');;
     38 		*)	minor2="${rest2}"
     39 			rest2=$(echo "${rest2}" | sed 's/^'$minor2'//');;
     40 	esac
     41 
     42 	if [ "${minor1}" -gt "${minor2}" ]; then
     43 		echo "${ver1}"
     44 		return
     45 	elif [ "${minor1}" -lt "${minor2}" ]; then
     46 		echo "${ver2}"
     47 		return
     48 	fi
     49 
     50 	case "${rest1}" in
     51 		*-*)	patch1=$(echo "${rest1}" | cut -s -d- -f1)
     52 			rest1=$(echo "${rest1}" | sed 's/^'$patch1'-//');;
     53 		*)	patch1="${rest1}"
     54 			rest1=$(echo "${rest1}" | sed 's/^'$patch1'//');;
     55 	esac
     56 	case "${rest2}" in
     57 		*-*)	patch2=$(echo "${rest2}" | cut -s -d- -f1)
     58 			rest2=$(echo "${rest2}" | sed 's/^'$patch2'-//');;
     59 		*)	patch2="${rest2}"
     60 			rest2=$(echo "${rest2}" | sed 's/^'$patch2'//');;
     61 	esac
     62 
     63 	if [ "${patch1}" -gt "${patch2}" ]; then
     64 		echo "${ver1}"
     65 		return
     66 	elif [ "${patch1}" -lt "${patch2}" ]; then
     67 		echo "${ver2}"
     68 		return
     69 	fi
     70 
     71 	recent=$(printf "%s\n%s\n" "${rest1}" "${rest2}" | sort -n -r | sed 1q)
     72 	if [ "${recent}" = "${rest1}" ]; then
     73 		echo "${ver1}"
     74 	else
     75 		echo "${ver2}"
     76 	fi
     77 }
     78 
     79 rec=''
     80 prev=''
     81 while read -r line; do
     82 	if [ -z "${prev}" ]; then
     83 		prev=$line
     84 		rec=$line
     85 		continue
     86 	fi
     87 	ver=${line}
     88 	cur=$(output_recent "${prev}" "${ver}")
     89 	if [ "${cur}" != "${rec}" ]; then
     90 		rec=${cur}
     91 	fi
     92 	prev=${cur}
     93 done
     94 echo "${rec}"