# HG changeset patch # User Edho Arief # Date 1320728389 -25200 # Node ID fbb03c862b632c903d6cc2f9ea9903232357bbf5 # Parent 53b39ca5a6ea109a6de93bd59a75f3cff35a6f33# Parent 3d57990fe9d146f373fd916615f1bbdf316de3b3 Awesome merge. diff -r 53b39ca5a6ea -r fbb03c862b63 .hgtags --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgtags Tue Nov 08 11:59:49 2011 +0700 @@ -0,0 +1,2 @@ +04af8306398e3a30b325f9ea799ac3b2d522a632 0.2.1 +417968e2d5a73e72df4e08ac21e06382b29335ae 0.2 diff -r 53b39ca5a6ea -r fbb03c862b63 LICENSE --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LICENSE Tue Nov 08 11:59:49 2011 +0700 @@ -0,0 +1,13 @@ +Copyright (c) 2010-2011, Edho Arief + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff -r 53b39ca5a6ea -r fbb03c862b63 bin/moefetch.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/moefetch.sh Tue Nov 08 11:59:49 2011 +0700 @@ -0,0 +1,420 @@ +#!/bin/sh + +# Copyright (c) 2009, edogawaconan +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +# Lots of bugs here. Use with care +# USE WITH CARE +# +# what it does: fetch every picture that has the specified TAGS. +# requirement: wget, libxslt, openssl + +# program additional paths for: cut, sed, wc, openssl, wget, xsltproc, grep +ADDITIONAL_PATH= + +# default server address. Danbooru only! I do not take responsibility of stupidity. +DEFAULT_SITE="moe.imouto.org" + +# base directory. make sure it's writeable. I do not take responsibility if you don't own the folder and files as no check is done for this one. +# Structure is ${BASE_DIR}/ +# Absolute path only. +# Leave empty to use whatever folder you're running this at +BASE_DIR= + +# not user modifiable from here + +# useless welcome message. Also version +msg_welcome() { + echo "moefetch ${_version} +Copyright (c) 2009 edogawaconan +" +} + +# Sanitize path. Totally safe. Usage: cmd "$(safe_path "${filename}")" +safe_path() +{ + # It all depends on the first character. + start=$(printf "%s" "$*" | cut -c 1) + path= + case "${start}" in + .|/) path="$*";; # . and / is safe. No change. + *) path="./$*";; # Anything else must be prefixed with ./ + esac + printf "%s" "${path}" # Return. +} + +# Checks md5. OpenSSL should be available on anything usable. +get_md5() { cat "$(safe_path "${1}")" | openssl dgst -md5 | tail -n 1 | sed -e 's/.*\([[:xdigit:]]\{32\}\).*/\1/'; } + +# Safely get basename. +get_basename() { basename "$(safe_path "${1}")"; } + +# Safely get filename (basename without the extension). +get_filename() { get_basename "${1%.*}"; } + +# Transformation for tag url. +get_cleantags() { printf "%s " "$*" | sed -e 's/\&/%26/g;s/=/%3D/g'; } + +# Returns something if not an md5 value. +is_not_md5() { get_filename "$1" | sed -e 's/\([0-9a-f]\{32\}\)//g'; } + + +# fatal error handler +Err_Fatal() { + echo " +Fatal error: ${1}" + exit 1 +} + +Err_Impossible() { + echo " +Impossible error. Or you modified content of the working directories when the script is running. +Please report to moefetch.googlecode.com if you see this message (complete with entire run log)" + exit 1 +} + +# help message +Err_Help() { + echo "moefetch.sh COMMAND [-n] [-p PASSWORD] [-s SITE_URL] [-u USERNAME] TAGS + +COMMAND: + (quick)fetch: + Do a complete update. Add prefix quick to skip file checking + check: + Get list of new files, clean up local folder and print total new files + +OPTIONS: + -n: + Skip checking repository directory. + -p PASSWORD: + Specifies password for login. + -s SITE_URL: + Specify URL of the Danbooru powered site you want to leech from. Default is ${DEFAULT_SITE}. + -u USERNAME: + Specifies username for login. + TAGS: + Tags you want to download. Separated by spaces. Tag name follows standard Danbooru tagging scheme." + exit 2 +} + +# generate link by transforming xml +Generate_Link() { + echo " +Fetching XML file" + tempnum=1000 + iternum=1 + > "${TEMP_PREFIX}-list" + while [ "${tempnum}" -ge 1000 ]; do + url="http://${SITE}/post/index.xml?tags=$(get_cleantags "${TAGS}")&offset=0&limit=1000&page=${iternum}" + [ ${_use_login} -eq 1 ] && url="${url}&login=${LOGIN_USER}&password_hash=${LOGIN_PASS}" + wget --quiet "${url}" -O "${TEMP_PREFIX}-xml" -e continue=off || Err_Fatal "Failed download catalog file" + printf "Processing XML file... " + # xslt evilry + xsltproc - "${TEMP_PREFIX}-xml" < "${TEMP_PREFIX}-templist" + + + + + + +EOF + tempnum=$(grep -c . "${TEMP_PREFIX}-templist") + iternum=$((iternum + 1)) + cat "${TEMP_PREFIX}-templist" >> "${TEMP_PREFIX}-list" + echo "${tempnum} file(s) available" + done + numfiles=$(grep -c . "${TEMP_PREFIX}-list") + echo "${numfiles} file(s) available on server" + [ "${numfiles}" -gt 0 ] || Err_Fatal "Error in processing list or no files can be found with specified tag(s) or site." +} + + +progress_init() { + _last="-" + printf "${_last}" +} + +progress_anim() { + case "${_last}" in + /) _last="-";; + -) _last=\\;; + \\) _last=\|;; + \|) _last="/";; + esac + printf "\b${_last}" +} + +progress_done() { printf "\bdone\n"; } + +# getting rid of ls (as per suggestion) +Count_Files() { + numfiles=0 + for dircontent in "${*}/"* "${*}/".*; do + if [ "${dircontent}" != "${*}/*" ] || [ -e "${dircontent}" ]; then + numfiles=$((numfiles + 1)) + fi + done + echo $((numfiles - 2)) +} + +# check tools availability +Check_Tools() { + # verify all programs required do indeed exist + commands="cut sed wc wget xsltproc xargs rm mkdir chown comm grep date openssl" + for cmd in ${commands} + do + [ "$(command -v "${cmd}")" ] || Err_Fatal "${cmd} doesn't exist in ${PATH}" + done +} + +# verify required folders exist and writeable +Check_Folders(){ + [ -O "${BASE_DIR}" ] || Err_Fatal "You don't own ${BASE_DIR}. Please fix ${BASE_DIR} or run this script in your own directory." + for directory in temp trash deleted "${SITE_DIR}/${TARGET_DIR}"; do + if [ ! -d "${BASE_DIR}/${directory}" ]; then + mkdir -p "${BASE_DIR}/${directory}" || Err_Impossible + fi + if [ ! -O "${BASE_DIR}/${directory}" ]; then + echo "You don't own the ${BASE_DIR}/${directory}, applying globally writeable permission on it" + chmod -R u=rwX,g=rwX,o=rwX "${BASE_DIR}/${directory}" || Err_Impossible + fi + done + [ "$(Count_Files "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}")" -eq 0 ] && ISNEW=1 + for i in error ok list newlist templist; do + touch "${TEMP_PREFIX}-${i}" || Fatal_Err "Error creating ${TEMP_PREFIX}-${i}. This shouldn't happen" + done + # +} + +# Do some cleanup +Cleanup_Repository() { + # current dir: ${BASE_DIR}/${SITE_DIR}/${TARGET_DIR} + printf "Cleaning up repository folder... " + progress_init + trash_dir="${BASE_DIR}/trash/${trash_dir}/$(date -u "+${SITE_DIR}-${TARGET_DIR}-%Y%m%d-%H.%M")" + trashes="These files have been moved to ${trash_dir}:" + has_trash= + if [ ! -d "${trash_dir}" ]; then + mkdir -p "${trash_dir}" || Err_Impossible + else + if [ ! -O "${trash_dir}" ]; then + chmod -R u=rwX,g=rwX,o=rwX "${BASE_DIR}/${directory}" || Err_Impossible + fi + fi + for trash in "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}/"* + do + is_trash= + if [ -d "${trash}" ] || [ -n "$(is_not_md5 "${trash}")" ] || [ -z "$(grep "$(get_basename "${trash}")" "${TEMP_PREFIX}-list")" ]; then + is_trash=1 + has_trash=1 + mv -f -- "${trash}" "${trash_dir}" || Err_Impossible + trashes="${trashes} + $(get_basename "${trash}")" + fi + progress_anim + done + rmdir "${trash_dir}" 2>/dev/null + progress_done + [ -n "${has_trash}" ] && echo "${trashes}" +} + +# check files correctness +Check_Files() { + if [ ! -n "${ISNEW}" ]; then + [ -z "${NOCLEAN}" ] && Cleanup_Repository + printf "Checking for errors... " + progress_init + files_error="These files do not match its md5:" + files_notdanbooru="These files are not checked:" + has_err_filename= + has_err_md5= + > "${TEMP_PREFIX}-error" + > "${TEMP_PREFIX}-ok" + for file in "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}/"* + do + if [ "${file}" != "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}/*" ]; then + if [ -n "$(is_not_md5 "${file}")" ] || [ -d "${file}" ]; then + files_notdanbooru="${files_notdanbooru} + $(get_basename "${file}")" + has_err_filename=1 + else + if [ "$(get_md5 "${file}")" = "$(get_filename "${file}")" ]; then + echo "$(get_basename "${file}")" >> "${TEMP_PREFIX}-ok" + else + rm "${file}" || Err_Fatal "Error removing ${file}" + echo "$(get_basename "${file}")" >> "${TEMP_PREFIX}-error" + files_error="${files_error} + $(get_basename "${file}")" + has_err_md5=1 + fi + fi + fi + progress_anim + done + progress_done + if [ ! -n "${has_err_md5}" ] && [ ! -n "${has_err_filename}" ]; then + echo "All files OK" + else + if [ -n "${has_err_md5}" ]; then + echo "${files_error}" + echo "$(grep -c . "${TEMP_PREFIX}-error") file(s) removed" + fi + [ -n "${has_err_filename}" ] && echo "${files_notdanbooru}" + fi + echo "$(grep -c . "${TEMP_PREFIX}-ok") file(s) available locally" + + printf "Generating list of new files... " + progress_init + cp -f "${TEMP_PREFIX}-list" "${TEMP_PREFIX}-templist" + while read -r is_ok; do + grep -v "${is_ok}" "${TEMP_PREFIX}-templist" > "${TEMP_PREFIX}-newlist" + cp -f "${TEMP_PREFIX}-newlist" "${TEMP_PREFIX}-templist" || Err_Impossible + progress_anim + done < "${TEMP_PREFIX}-ok" + progress_done + echo "$(grep -c . "${TEMP_PREFIX}-newlist") file(s) to be downloaded" + else + if [ -n "${ISQUICK}" ]; then + echo "Quick mode selected. Skipping check" + else + echo "Empty local repository" + fi + cat "${TEMP_PREFIX}-list" > "${TEMP_PREFIX}-newlist" + fi +} + +# start downloading the images +Fetch_Images() { + if [ "$(grep -c . "${TEMP_PREFIX}-newlist")" -eq 0 ]; then + echo "No new file" + else + printf "Downloading files... " + cd "${BASE_DIR}/${SITE_DIR}/${TARGET_DIR}" + wget -e continue=on -i "${TEMP_PREFIX}-newlist" -o "${TEMP_PREFIX}.log" + fi +} + +# initialize base variables and initial command check +init() +{ + # path initialization + # check if additional path is specified + if [ -n "${ADDITIONAL_PATH}" ] + then + # insert the additional path + PATH="${ADDITIONAL_PATH}:${PATH}" + export PATH + fi + + # misc variables + ISQUICK= + ISNEW= + + # minimum number of arguments: 2 (command and tag). If less than two, exit and print help message + [ $# -lt 2 ] && Err_Help + case "$1" in + check|fetch|quickfetch) + echo "Starting..." + JOB="$1" + ;; + *) + Err_Help + ;; + esac + shift + SITE= + TAGS= + has_pass=0 + has_user=0 + x=1 + while getopts "s:nu:p:" opt + do + case "$opt" in + s) SITE="$OPTARG";; + n) NOCLEAN=1;; + p) + LOGIN_PASS=$(printf "%s" "$OPTARG" | openssl dgst -sha1 | sed -e 's/.*\([[:xdigit:]]\{40\}\).*/\1/') + has_pass=1 + ;; + u) + LOGIN_USER="$OPTARG" + has_user=1 + ;; + esac + x=$OPTIND + done + shift $(($x-1)) + if [ "$1" = -- ]; then shift; fi + TAGS="$@" + [ -n "${SITE}" ] || SITE=${DEFAULT_SITE} + [ -n "${TAGS}" ] || Err_Fatal "No tag specified" + # Get base folder - default, current folder or fallback to ${HOME} + [ -n "${BASE_DIR}" ] || BASE_DIR=${PWD} + [ -n "${BASE_DIR}" ] || BASE_DIR=${HOME} + [ -n "$(echo "${BASE_DIR}" | cut -c1 | grep \/)" ] || BASE_DIR="/${BASE_DIR}" + # see if both pass and use are set. If they're set, switch _use_login variable content to 1. + [ ${has_pass} -eq 1 -a ${has_user} -eq 1 ] && _use_login=1 + + echo "Tags: ${TAGS}" + # slash is not wanted for folder name + TARGET_DIR=$(echo "${TAGS}" | sed -e 's/\//_/g') + SITE_DIR=$(echo "${SITE}" | sed -e 's/\/$//g;s/\//_/g') + TEMP_PREFIX="${BASE_DIR}/temp/${SITE_DIR}-${TARGET_DIR}" +} + +# global variables goes here +init_globals() +{ + _version="1.0-rc2" # version of this script + _use_login=0 # variable to check whether a login is used or not +} + +main() +{ + # removing GNU-ism as much as possible + POSIXLY_CORRECT=1 + #initialize global variables + init_globals + #print welcome message + msg_welcome + # initialization + init "$@" + Check_Tools + Check_Folders + + + # let's do the job! + case "${JOB}" in + check) + Generate_Link + Check_Files + ;; + fetch) + Generate_Link + Check_Files + Fetch_Images + ;; + quickfetch) + ISNEW=1 + ISQUICK=1 + Generate_Link + Check_Files + Fetch_Images + ;; + esac +} + +# call the main routine! +main "$@" + diff -r 53b39ca5a6ea -r fbb03c862b63 bin/ren --- a/bin/ren Tue Nov 08 11:56:49 2011 +0700 +++ b/bin/ren Tue Nov 08 11:59:49 2011 +0700 @@ -16,7 +16,7 @@ $newname =~ s/\[t-n\]/[T-N]/i; #TITLE AND NAMES $newname =~ s/^(\(|\[)W B(\)|\])/[W_B]/; - if ($newname =~ m/\[Doremi/) { + if ($newname =~ m/\[(Doremi|Elysium)/) { $newname =~ s/\.([a-z0-9]+)$/,$1/i; $newname =~ s/\./ /g; $newname =~ s/,([a-z0-9]+)$/.$1/i; @@ -41,6 +41,8 @@ $newname =~ s/\] *Pocket Monsters - (\d+) - .*\[(H264 |)SUB\]/] Pokemon - $1 /i; $newname =~ s/\] Fafner - /] Soukyuu no Fafner - /; $newname =~ s/\] Mashiro iro symphony - /] Mashiro-iro Symphony - /i; + $newname =~ s/\] To Aru Kagaku no Railgun /] Toaru Kagaku no Railgun /i; + $newname =~ s/\] To Aru Majutsu no Index /] Toaru Majutsu no Index /i; $newname =~ s/\] Shakugan no Shana III /] Shakugan no Shana Final /i; $newname =~ s/\] Boku Ha Tomodachi Ga Sukunai - /] Boku wa Tomodachi ga Sukunai - /i; $newname =~ s/\] Seikon no Qwaser II BD - (\d+) \[720p\]/] Seikon no Qwaser II - $1 [720p BD]/i; @@ -57,6 +59,7 @@ $newname =~ s/\] Maji de Watashi ni Koi Shinasai!! /] Maji de Watashi ni Koi Shinasai! /i; $newname =~ s/\] Sei Juushi Bismarck /] Sei Juushi Bismark /i; $newname =~ s/\] Tamayura - hitotose - /] Tamayura ~hitotose~ - /i; + $newname =~ s/\] Yumekui Merry /] Dream Eater Merry /i; $newname =~ s/^Arigatou\.Tsubasa\.Chronicles\.(|2\.)(\d{2})(|v2)\./[Arigatou] Tsubasa Chronicles $1 - $2$3/; $newname =~ s/^Niea\.Under\.Seven\.(\d+)\.\(Dual\.Audio\)\.XVID\.\[AM\]/[AM] Niea Under Seven - $1/; $newname =~ s/ Tsubasa Chronicles 2\. - / Tsubasa Chronicles 2 /; @@ -206,7 +209,7 @@ $newname =~ s/Naruto (\d+-\d+) /Naruto - $1 /; $newname =~ s/Lupin III Series 1 - (\d+) - .+ \[neo1024\]/[neo1024] Lupin III - $1 /; $newname =~ s/Mitsudomoe Picture Drama - 0/Mitsudomoe Picture Drama - /; - $newname =~ s/^(Star Driver .*)(\[AtsA\])/$2 $1 /i; + $newname =~ s/^(Fullmetal Alchemist Brotherhood .*|Star Driver .*)(\[AtsA\])/$2 $1 /i; $newname =~ s/(Sora no Woto|Ichiban Ushiro no Daimaou|Mayoi Neko Overrun!) - ([^ ]+|OP Clean|ED Clean|Theater [a-z0-9]+) \[BD 1080p\]\[AtsA\]/[AtsA] $1 - $2 [1080p BD]/; $newname =~ s/(Sora no Woto|Ichiban Ushiro no Daimaou|Mayoi Neko Overrun!) ([^ ]+|Opening Clean|Ending Clean|Theater - [a-z0-9]+) \[1080p BD\]\[AtsA\]/[AtsA] $1 - $2 [1080p BD]/; $newname =~ s/Battle\.Programmer\.Shirase\./Battle Programmer Shirase /; @@ -262,7 +265,7 @@ $newname =~ s/ OP(\d+[a-z]*)/ - Opening $1 /i; $newname =~ s/ ED / - Ending /; $newname =~ s/ Clean (Opening|Ending) v2/ - $1 (Clean) [v2]/i; - $newname =~ s/ Creditless Opening (\d+) / - Opening $1 (Clean) /i; + $newname =~ s/ Creditless (Opening|Ending) (\d+) / - $1 $2 (Clean) /i; $newname =~ s/ Ep(\d+) Creditless Ending / - Ending $1 (Clean) /i; $newname =~ s/ (NCED|Ending Clean) / - Ending (Clean) /i; $newname =~ s/ NCED(\d+) / - Ending $1 (Clean) /i; @@ -278,7 +281,8 @@ $newname =~ s/(\(|\[) *(DVD H264 640x480|DVD H264 720x480 AAC|DVD 704x480 H264 AC3|DVD 704x480|DVDRip\.Xvid\.864x480\.Vorbis|DVD H264 848x480|DVD 720x480|DVD H264 720x480|DVD, wmv, mp3) *(\)|\])/[DVD]/i; $newname =~ s/(\(|\[) *(BD\]\[1080p-FLAC|1920x1080 Hi10p h264 AAC|BD 1920x1080 x264 AAC|BD 1080p Hi10P|BDRip 1080p x264 FLAC|BD-1080p-|BD-1080p-FLAC|1920x1038 Blu-Ray FLAC|1920x1080 Blu-Ray FLAC|1920x1080 h264 BD FLAC|1920x1080 BD|BD\.1080p\.FLAC|BD 1080p H\.264 AAC 5\.1|BD 1080p) *(\)|\])/[1080p BD]/i; $newname =~ s/(\(|\[) *(Hi10P 1280x720 H264|Hi10P 1280x720|1280x720 Hi10P|1280x720 5\.1|1280x720 x264 AAC|1280x720 H264 AAC|720p H264 AAC|1280x720|1280x720 H\.?264 AAC) *(\)|\])/[720p]/i; - $newname =~ s/(\(|\[) *(BD 1280x720 H264 AAC|BD, 720p,|BD 720p H264-AAC|BDRip 720p|BD, 720p, ,|1280x720 BD|BD 1280x720 H264 AAC|BD 720p|BD 720p FLAC|BD 1280x720 H264 AAC) *(\)|\])/[720p BD]/i; + $newname =~ s/(\(|\[) *(BDrip 720p Vorbis|BD 720p Hi10P AAC|BD, 720p,|BD 720p H264-AAC|BDRip 720p|BD, 720p, ,|1280x720 BD|BD 1280x720 H264 AAC|BD 720p|BD 720p FLAC|BD 1280x720 H264 AAC) *(\)|\])/[720p BD]/i; + $newname =~ s/(\(|\[) *(BD 540p) *(\)|\])/[BD]/i; $newname =~ s/(\(|\[) *(1024x576|H264 1024x576) *(\)|\])/[576p]/i; $newname =~ s/(\(|\[) *(1920x1080) *(\)|\])/[1080p]/i; ##SLICED BREAD pt.2 @@ -429,6 +433,8 @@ $newname =~ s/ SP0/ - Special /; $newname =~ s/ SP(\d+) / - Special $1 /; $newname =~ s/ Special - / - Special /; + $newname =~ s/ Animated Commentary - / - Animated Commentary /; + $newname =~ s/ Fullmetal Alchemist Brotherhood (- |)Skit - / Fullmetal Alchemist Brotherhood - Skit /i; $newname =~ s/ - Picture Drama - / - Picture Drama /; $newname =~ s/ (Mayoi Neko Overrun! - Theater) - / $1 /; $newname =~ s/ Opening - / Opening /; @@ -461,6 +467,7 @@ $newname =~ s/^Naruto - (\d{2}) /Naruto - 0$1 /; $newname =~ s/^Fairy Tail - (\d{2}) /Fairy Tail - 0$1 /; $newname =~ s/^Naruto - (\d{2})-(\d{2}) /Naruto - 0$1-0$2 /; + if ($^O eq "MSWin32") { $newname =~ s/ *\\ */\\/g; } print(qq($_: $newname already exists, skipping\n)) and next() if -e $newname and $_ ne $newname; if ($_ eq $newname) { print("$_: no need to rename, skipping\n"); diff -r 53b39ca5a6ea -r fbb03c862b63 bin/termcolors.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/termcolors.sh Tue Nov 08 11:59:49 2011 +0700 @@ -0,0 +1,47 @@ +#!/bin/sh + +# Usage: +# _c [bold_|] +# +# can be one of: +# black, blue, green, cyan, red, purple, brown, gray +# Prefix the color with bold_ to use bold style/light color. +# +# Example: +# To print word "Hello" in bold blue: +# _c bold_blue "Hello" +# +# To print text with only one word colored: +# echo "Hello, $(c green world)." +# +# To do: +# Support for background color, underline, etc. +# +# Reference: +# Colours, http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html +# + +_c() { + color_name="${1}" + shift + text="${*}" + esq="\033[" + r="${esq}0m" # r for reset + case "${color_name}" in + bold_*) color="1;";; + *) color="0;";; + esac + case "${color_name}" in + *black) color="${color}30";; + *blue) color="${color}34";; + *green) color="${color}32";; + *cyan) color="${color}36";; + *red) color="${color}31";; + *purple) color="${color}35";; + *brown) color="${color}33";; + *gray) color="${color}37";; + esac + color="${esq}${color}m" + printf "${color}%s${r}" "${text}" +} + diff -r 53b39ca5a6ea -r fbb03c862b63 rc/bash --- a/rc/bash Tue Nov 08 11:56:49 2011 +0700 +++ b/rc/bash Tue Nov 08 11:59:49 2011 +0700 @@ -1,5 +1,10 @@ #!/usr/bin/env bash +case "${-}" in + *i*) ;; + *) return;; +esac + if [ "${ECOS_BASH_LOADED}" != "yes" ]; then ECOS_BASH_LOADED="yes" else @@ -35,6 +40,7 @@ _has_rm_I= _has_gnu_ls= _has_gnu_grep= +_ls="ls" case "$(uname -s)" in Linux) _has_rm_I=y @@ -45,10 +51,11 @@ [ -x /usr/gnu/bin/rm ] && _has_rm_I=y [ -x /usr/gnu/bin/ls ] && _has_gnu_ls=y [ -x /usr/gnu/bin/grep ] && _has_gnu_grep=y - [ -d /usr/xpg4/bin ] && PATH="/usr/xpg4/bin:${PATH}" [ -d /opt/csw/bin ] && PATH="/opt/csw/bin:${PATH}" [ -d /opt/csw/sbin ] && PATH="/opt/csw/sbin:${PATH}" [ -d /usr/gnu/bin ] && PATH="/usr/gnu/bin:${PATH}" + [ -d /usr/sfw/bin ] && PATH="${PATH}:/usr/sfw/bin" + [ -d /usr/xpg4/bin ] && PATH="${PATH}:/usr/xpg4/bin" export PATH alias ping="ping -s" alias ping6="ping -A inet6" @@ -59,8 +66,12 @@ export LSCOLORS=ExGxFxdxCxegedabagExEx ;; OpenBSD) - if command -v colorls > /dev/null 2>&1; then + if command -v gls > /dev/null 2>&1; then + _has_gnu_ls=y + _ls="gls" + elif command -v colorls > /dev/null 2>&1; then export CLICOLOR= + export LSCOLORS=ExGxFxdxCxegedabagExEx alias ls='colorls -F' fi ;; @@ -70,17 +81,18 @@ esac [ "${_has_rm_I}" = y ] && alias rm="rm -I" -[ "${_has_gnu_ls}" = y ] && alias ls="ls -F --color=auto" +[ "${_has_gnu_ls}" = y ] && alias ls="${_ls} -F --color=auto" [ "${_has_gnu_grep}" = y ] && alias grep="grep --color=auto" unset _has_rm_I unset _has_gnu_ls unset _has_gnu_grep +unset _ls case "${TERM}" in xterm*|screen*|dtterm) - PROMPT_COMMAND='echo -ne "\033]0;${LOGNAME}@${HOSTNAME}: ${PWD}\007"' + PROMPT_COMMAND='echo -ne "\033]0;${LOGNAME}@${HOSTNAME}: ${PWD}\007";'"${PROMPT_COMMAND}" ;; esac diff -r 53b39ca5a6ea -r fbb03c862b63 rc/hg --- a/rc/hg Tue Nov 08 11:56:49 2011 +0700 +++ b/rc/hg Tue Nov 08 11:59:49 2011 +0700 @@ -1,5 +1,5 @@ [ui] -username = Edho Prima Arief +username = Edho Arief merge = vimdiff verbose = true @@ -14,3 +14,5 @@ [hostfingerprints] bitbucket.org = 81:2b:08:90:dc:d3:71:ee:e0:7c:b4:75:ce:9b:6c:48:94:56:a1:fe +[defaults] +addremove = --similarity 100 diff -r 53b39ca5a6ea -r fbb03c862b63 rc/tcsh --- a/rc/tcsh Tue Nov 08 11:56:49 2011 +0700 +++ b/rc/tcsh Tue Nov 08 11:59:49 2011 +0700 @@ -1,5 +1,23 @@ #!/usr/bin/env tcsh -[ -e "${HOME}/.ecos_tcsh.before" ] && source "${HOME}/.ecos_tcsh.before" + +# Ensures it's tcsh +if ( ! $?tcsh ) then + exit +endif + +# Ensures this script is running on terminal. Otherwise exit immediately. +if ( ! $?prompt ) then + exit +endif + +# Ensures we're not loading this script again. +if ( ! $?ecos_tcsh_loaded ) then + set ecos_tcsh_loaded="yes" +else + exit +endif + +test -f "${HOME}/.ecos_tcsh.before" && source "${HOME}/.ecos_tcsh.before" umask 22 limit coredumpsize 0 @@ -78,7 +96,7 @@ case OpenBSD: set path=(${path} /usr/local/{bin,sbin}) setenv LSCOLORS ExGxFxdxCxegedabagExEx - [ "${iscolor}" -eq 1 ] && setenv TERM xterm-256color + test "${iscolor}" -eq 1 && setenv TERM xterm-256color ( which colorls ) > /dev/null && alias ls colorls -FG breaksw case DragonFly: @@ -88,7 +106,7 @@ breaksw case SunOS: set path=(${path} /usr/{gnu,csw,xpg4}/{bin,sbin}) - [ -x /usr/gnu/bin/ls ] && alias ls /usr/gnu/bin/ls ${gnuls_opts} + test -x /usr/gnu/bin/ls && alias ls /usr/gnu/bin/ls ${gnuls_opts} breaksw case Linux: alias ls ls ${gnuls_opts} @@ -99,6 +117,6 @@ ( which vim ) > /dev/null && alias vi vim && setenv EDITOR vim -[ -e "${HOME}/.ecos_tcsh.after" ] && source "${HOME}/.ecos_tcsh.after" +test -f "${HOME}/.ecos_tcsh.after" && source "${HOME}/.ecos_tcsh.after" -[ -x "/usr/games/fortune" ] && "/usr/games/fortune" +test -x "/usr/games/fortune" && "/usr/games/fortune" diff -r 53b39ca5a6ea -r fbb03c862b63 setup --- a/setup Tue Nov 08 11:56:49 2011 +0700 +++ b/setup Tue Nov 08 11:59:49 2011 +0700 @@ -19,7 +19,7 @@ case "$1" in uninstall|install) _rc "${1}" "tcsh" ".ecos_tcsh" - _init "${1}" '[ -r "${HOME}/.ecos_tcsh" ] && source "${HOME}/.ecos_tcsh" #ECCORE_TCSH' ".cshrc" + _init "${1}" 'test -r "${HOME}/.ecos_tcsh" && source "${HOME}/.ecos_tcsh" #ECCORE_TCSH' ".cshrc" ;; esac } @@ -44,17 +44,22 @@ } _rc() { + if test -z "${3}" || test -z "${2}" || test -z "${1}"; then + _echo "Invalid command." + return + fi _srcfile="${rcdir}/${2}" _dstfile="${HOME}/${3}" if test ! -h "${_dstfile}"; then if test -f "${_dstfile}"; then cp "${_dstfile}" "${_dstfile}.bak" + _echo "${_dstfile} backed up to ${_dstfile}.bak" elif test -d "${_dstfile}"; then cp -r "${_dstfile}" "${_dstfile}.bak" + _echo "Directory ${_dstfile} backed up to ${_dstfile}.bak" fi - _echo "${_dstfile} backed up to ${_dstfile}.bak" fi - rm -f "${_dstfile}" + rm -rf "${_dstfile}" case "${1}" in install) ln -fs "${_srcfile}" "${_dstfile}" @@ -71,7 +76,7 @@ _scripttmp="${HOME}/.tmp.${3}" _data="${2}" if [ -f "${_script}" ]; then - grep -v "${_data}" "${_script}" > "${_scripttmp}" + grep -v "`printf "%s\n" "${_data}" | sed 's/.*#//'`" "${_script}" > "${_scripttmp}" mv -f "${_scripttmp}" "${_script}" fi case "${1}" in @@ -106,3 +111,4 @@ _help ;; esac +