mirror of
https://gitee.com/kennylee/docker.git
synced 2024-11-30 02:48:27 +08:00
优化ubuntu,瘦身,并且修改日期本地语言
This commit is contained in:
parent
2742d5ae74
commit
76f8d7bec2
@ -1,33 +1,32 @@
|
|||||||
# Ubuntu
|
# Ubuntu
|
||||||
#
|
#
|
||||||
# VERSION 0.0.1
|
|
||||||
# Base Docker Image http://dockerfile.github.io/#/ubuntu
|
# Base Docker Image http://dockerfile.github.io/#/ubuntu
|
||||||
# Authoer: kennylee26
|
# Authoer: kennylee26
|
||||||
# NAME: kennylee26/ubuntu
|
|
||||||
# Command format: Instruction [arguments command] ..
|
|
||||||
|
|
||||||
# 第一行必须指定基于的基础镜像
|
FROM ubuntu:xenial
|
||||||
FROM ubuntu:14.04
|
|
||||||
|
|
||||||
# 维护者信息
|
|
||||||
MAINTAINER kennylee26 <kennylee26@gmail.com>
|
MAINTAINER kennylee26 <kennylee26@gmail.com>
|
||||||
|
|
||||||
RUN sed -i 's/archive.ubuntu.com/mirrors.163.com/g' /etc/apt/sources.list
|
RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
|
||||||
|
|
||||||
# Install.
|
# Install.
|
||||||
RUN \
|
RUN \
|
||||||
sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list && \
|
sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list && \
|
||||||
apt-get update && \
|
apt-get update && \
|
||||||
apt-get -y upgrade && \
|
apt-get -y upgrade && \
|
||||||
apt-get install -y build-essential && \
|
apt-get install -y curl sudo git unzip vim wget && \
|
||||||
apt-get install -y software-properties-common && \
|
apt-get install -y language-pack-zh-hans && \
|
||||||
apt-get install -y byobu curl git htop man unzip vim wget && \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Add files.
|
RUN locale
|
||||||
ADD root/.bashrc /root/.bashrc
|
ENV LANG=zh_CN.UTF-8;\
|
||||||
ADD root/.gitconfig /root/.gitconfig
|
LANGUAGE=zh_CN:zh:en_US:en;\
|
||||||
ADD root/.scripts /root/.scripts
|
LC_ALL=zh_CN.UTF-8;\
|
||||||
|
TZ="Asia/Shanghai";\
|
||||||
|
TERM=xterm
|
||||||
|
|
||||||
|
RUN ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
|
||||||
|
dpkg-reconfigure --frontend noninteractive tzdata
|
||||||
|
|
||||||
# Set environment variables.
|
# Set environment variables.
|
||||||
ENV HOME /root
|
ENV HOME /root
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
参考 http://dockerfile.github.io/#/ubuntu
|
|
||||||
|
|
||||||
修改使用163的源。
|
|
||||||
|
|
||||||
此image默认安装好byobu curl git htop man unzip vim wget和software-properties-common常用工具。所以支持add-apt-repository ppa:webupd8team/java来添加第三方源。
|
|
||||||
|
|
||||||
|
|
||||||
build
|
|
||||||
docker build -t kennylee26/ubuntu .
|
|
@ -1,46 +0,0 @@
|
|||||||
alias rm='rm -i'
|
|
||||||
alias cp='cp -i'
|
|
||||||
alias mv='mv -i'
|
|
||||||
|
|
||||||
alias ls='ls -hFG'
|
|
||||||
alias l='ls -lF'
|
|
||||||
alias ll='ls -alF'
|
|
||||||
alias lt='ls -ltrF'
|
|
||||||
alias ll='ls -alF'
|
|
||||||
alias lls='ls -alSrF'
|
|
||||||
alias llt='ls -altrF'
|
|
||||||
|
|
||||||
alias tarc='tar cvf'
|
|
||||||
alias tarcz='tar czvf'
|
|
||||||
alias tarx='tar xvf'
|
|
||||||
alias tarxz='tar xvzf'
|
|
||||||
|
|
||||||
alias g='git'
|
|
||||||
alias less='less -R'
|
|
||||||
alias os='lsb_release -a'
|
|
||||||
alias vi='vim'
|
|
||||||
|
|
||||||
# Colorize directory listing
|
|
||||||
alias ls="ls -ph --color=auto"
|
|
||||||
|
|
||||||
# Colorize grep
|
|
||||||
if echo hello|grep --color=auto l >/dev/null 2>&1; then
|
|
||||||
export GREP_OPTIONS="--color=auto" GREP_COLOR="1;31"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Shell
|
|
||||||
export CLICOLOR="1"
|
|
||||||
if [ -f $HOME/.scripts/git-prompt.sh ]; then
|
|
||||||
source $HOME/.scripts/git-prompt.sh
|
|
||||||
export GIT_PS1_SHOWDIRTYSTATE="1"
|
|
||||||
export PS1="\[\033[40m\]\[\033[34m\][ \u@\H:\[\033[36m\]\w\$(__git_ps1 \" \[\033[35m\]{\[\033[32m\]%s\[\033[35m\]}\")\[\033[34m\] ]$\[\033[0m\] "
|
|
||||||
else
|
|
||||||
export PS1="\[\033[40m\]\[\033[34m\][ \u@\H:\[\033[36m\]\w\[\033[34m\] ]$\[\033[0m\] "
|
|
||||||
fi
|
|
||||||
export LS_COLORS="di=34:ln=35:so=32:pi=33:ex=1;40:bd=34;40:cd=34;40:su=0;40:sg=0;40:tw=0;40:ow=0;40:"
|
|
||||||
|
|
||||||
# Git
|
|
||||||
source $HOME/.scripts/git-completion.sh
|
|
||||||
|
|
||||||
# Z
|
|
||||||
source $HOME/.scripts/z.sh
|
|
@ -1,39 +0,0 @@
|
|||||||
[user]
|
|
||||||
name =
|
|
||||||
email =
|
|
||||||
|
|
||||||
[alias]
|
|
||||||
a = add
|
|
||||||
b = branch
|
|
||||||
c = commit
|
|
||||||
co = checkout
|
|
||||||
d = diff
|
|
||||||
e = add --edit
|
|
||||||
f = fetch
|
|
||||||
g = grep
|
|
||||||
h = help
|
|
||||||
i = init
|
|
||||||
l = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
|
|
||||||
ll = log --stat
|
|
||||||
m = merge
|
|
||||||
r = remote
|
|
||||||
s = status --branch --short
|
|
||||||
t = tag
|
|
||||||
w = whatchanged
|
|
||||||
|
|
||||||
[core]
|
|
||||||
excludesfile = ~/.gitignore
|
|
||||||
editor = vim
|
|
||||||
|
|
||||||
[color]
|
|
||||||
ui = always
|
|
||||||
status = auto
|
|
||||||
branch = auto
|
|
||||||
interactive = auto
|
|
||||||
diff = auto
|
|
||||||
|
|
||||||
[merge]
|
|
||||||
tool = vimdiff
|
|
||||||
|
|
||||||
[push]
|
|
||||||
default = upstream
|
|
File diff suppressed because it is too large
Load Diff
@ -1,445 +0,0 @@
|
|||||||
# bash/zsh git prompt support
|
|
||||||
#
|
|
||||||
# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
|
|
||||||
# Distributed under the GNU General Public License, version 2.0.
|
|
||||||
#
|
|
||||||
# This script allows you to see repository status in your prompt.
|
|
||||||
#
|
|
||||||
# To enable:
|
|
||||||
#
|
|
||||||
# 1) Copy this file to somewhere (e.g. ~/.git-prompt.sh).
|
|
||||||
# 2) Add the following line to your .bashrc/.zshrc:
|
|
||||||
# source ~/.git-prompt.sh
|
|
||||||
# 3a) Change your PS1 to call __git_ps1 as
|
|
||||||
# command-substitution:
|
|
||||||
# Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
|
|
||||||
# ZSH: setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
|
|
||||||
# the optional argument will be used as format string.
|
|
||||||
# 3b) Alternatively, for a slightly faster prompt, __git_ps1 can
|
|
||||||
# be used for PROMPT_COMMAND in Bash or for precmd() in Zsh
|
|
||||||
# with two parameters, <pre> and <post>, which are strings
|
|
||||||
# you would put in $PS1 before and after the status string
|
|
||||||
# generated by the git-prompt machinery. e.g.
|
|
||||||
# Bash: PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'
|
|
||||||
# will show username, at-sign, host, colon, cwd, then
|
|
||||||
# various status string, followed by dollar and SP, as
|
|
||||||
# your prompt.
|
|
||||||
# ZSH: precmd () { __git_ps1 "%n" ":%~$ " "|%s" }
|
|
||||||
# will show username, pipe, then various status string,
|
|
||||||
# followed by colon, cwd, dollar and SP, as your prompt.
|
|
||||||
# Optionally, you can supply a third argument with a printf
|
|
||||||
# format string to finetune the output of the branch status
|
|
||||||
#
|
|
||||||
# The repository status will be displayed only if you are currently in a
|
|
||||||
# git repository. The %s token is the placeholder for the shown status.
|
|
||||||
#
|
|
||||||
# The prompt status always includes the current branch name.
|
|
||||||
#
|
|
||||||
# In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty value,
|
|
||||||
# unstaged (*) and staged (+) changes will be shown next to the branch
|
|
||||||
# name. You can configure this per-repository with the
|
|
||||||
# bash.showDirtyState variable, which defaults to true once
|
|
||||||
# GIT_PS1_SHOWDIRTYSTATE is enabled.
|
|
||||||
#
|
|
||||||
# You can also see if currently something is stashed, by setting
|
|
||||||
# GIT_PS1_SHOWSTASHSTATE to a nonempty value. If something is stashed,
|
|
||||||
# then a '$' will be shown next to the branch name.
|
|
||||||
#
|
|
||||||
# If you would like to see if there're untracked files, then you can set
|
|
||||||
# GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're untracked
|
|
||||||
# files, then a '%' will be shown next to the branch name. You can
|
|
||||||
# configure this per-repository with the bash.showUntrackedFiles
|
|
||||||
# variable, which defaults to true once GIT_PS1_SHOWUNTRACKEDFILES is
|
|
||||||
# enabled.
|
|
||||||
#
|
|
||||||
# If you would like to see the difference between HEAD and its upstream,
|
|
||||||
# set GIT_PS1_SHOWUPSTREAM="auto". A "<" indicates you are behind, ">"
|
|
||||||
# indicates you are ahead, "<>" indicates you have diverged and "="
|
|
||||||
# indicates that there is no difference. You can further control
|
|
||||||
# behaviour by setting GIT_PS1_SHOWUPSTREAM to a space-separated list
|
|
||||||
# of values:
|
|
||||||
#
|
|
||||||
# verbose show number of commits ahead/behind (+/-) upstream
|
|
||||||
# legacy don't use the '--count' option available in recent
|
|
||||||
# versions of git-rev-list
|
|
||||||
# git always compare HEAD to @{upstream}
|
|
||||||
# svn always compare HEAD to your SVN upstream
|
|
||||||
#
|
|
||||||
# By default, __git_ps1 will compare HEAD to your SVN upstream if it can
|
|
||||||
# find one, or @{upstream} otherwise. Once you have set
|
|
||||||
# GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by
|
|
||||||
# setting the bash.showUpstream config variable.
|
|
||||||
#
|
|
||||||
# If you would like to see more information about the identity of
|
|
||||||
# commits checked out as a detached HEAD, set GIT_PS1_DESCRIBE_STYLE
|
|
||||||
# to one of these values:
|
|
||||||
#
|
|
||||||
# contains relative to newer annotated tag (v1.6.3.2~35)
|
|
||||||
# branch relative to newer tag or branch (master~4)
|
|
||||||
# describe relative to older annotated tag (v1.6.3.1-13-gdd42c2f)
|
|
||||||
# default exactly matching tag
|
|
||||||
#
|
|
||||||
# If you would like a colored hint about the current dirty state, set
|
|
||||||
# GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
|
|
||||||
# the colored output of "git status -sb" and are available only when
|
|
||||||
# using __git_ps1 for PROMPT_COMMAND or precmd.
|
|
||||||
|
|
||||||
# stores the divergence from upstream in $p
|
|
||||||
# used by GIT_PS1_SHOWUPSTREAM
|
|
||||||
__git_ps1_show_upstream ()
|
|
||||||
{
|
|
||||||
local key value
|
|
||||||
local svn_remote svn_url_pattern count n
|
|
||||||
local upstream=git legacy="" verbose=""
|
|
||||||
|
|
||||||
svn_remote=()
|
|
||||||
# get some config options from git-config
|
|
||||||
local output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')"
|
|
||||||
while read -r key value; do
|
|
||||||
case "$key" in
|
|
||||||
bash.showupstream)
|
|
||||||
GIT_PS1_SHOWUPSTREAM="$value"
|
|
||||||
if [[ -z "${GIT_PS1_SHOWUPSTREAM}" ]]; then
|
|
||||||
p=""
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
svn-remote.*.url)
|
|
||||||
svn_remote[$((${#svn_remote[@]} + 1))]="$value"
|
|
||||||
svn_url_pattern+="\\|$value"
|
|
||||||
upstream=svn+git # default upstream is SVN if available, else git
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done <<< "$output"
|
|
||||||
|
|
||||||
# parse configuration values
|
|
||||||
for option in ${GIT_PS1_SHOWUPSTREAM}; do
|
|
||||||
case "$option" in
|
|
||||||
git|svn) upstream="$option" ;;
|
|
||||||
verbose) verbose=1 ;;
|
|
||||||
legacy) legacy=1 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
# Find our upstream
|
|
||||||
case "$upstream" in
|
|
||||||
git) upstream="@{upstream}" ;;
|
|
||||||
svn*)
|
|
||||||
# get the upstream from the "git-svn-id: ..." in a commit message
|
|
||||||
# (git-svn uses essentially the same procedure internally)
|
|
||||||
local -a svn_upstream
|
|
||||||
svn_upstream=($(git log --first-parent -1 \
|
|
||||||
--grep="^git-svn-id: \(${svn_url_pattern#??}\)" 2>/dev/null))
|
|
||||||
if [[ 0 -ne ${#svn_upstream[@]} ]]; then
|
|
||||||
svn_upstream=${svn_upstream[${#svn_upstream[@]} - 2]}
|
|
||||||
svn_upstream=${svn_upstream%@*}
|
|
||||||
local n_stop="${#svn_remote[@]}"
|
|
||||||
for ((n=1; n <= n_stop; n++)); do
|
|
||||||
svn_upstream=${svn_upstream#${svn_remote[$n]}}
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ -z "$svn_upstream" ]]; then
|
|
||||||
# default branch name for checkouts with no layout:
|
|
||||||
upstream=${GIT_SVN_ID:-git-svn}
|
|
||||||
else
|
|
||||||
upstream=${svn_upstream#/}
|
|
||||||
fi
|
|
||||||
elif [[ "svn+git" = "$upstream" ]]; then
|
|
||||||
upstream="@{upstream}"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Find how many commits we are ahead/behind our upstream
|
|
||||||
if [[ -z "$legacy" ]]; then
|
|
||||||
count="$(git rev-list --count --left-right \
|
|
||||||
"$upstream"...HEAD 2>/dev/null)"
|
|
||||||
else
|
|
||||||
# produce equivalent output to --count for older versions of git
|
|
||||||
local commits
|
|
||||||
if commits="$(git rev-list --left-right "$upstream"...HEAD 2>/dev/null)"
|
|
||||||
then
|
|
||||||
local commit behind=0 ahead=0
|
|
||||||
for commit in $commits
|
|
||||||
do
|
|
||||||
case "$commit" in
|
|
||||||
"<"*) ((behind++)) ;;
|
|
||||||
*) ((ahead++)) ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
count="$behind $ahead"
|
|
||||||
else
|
|
||||||
count=""
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# calculate the result
|
|
||||||
if [[ -z "$verbose" ]]; then
|
|
||||||
case "$count" in
|
|
||||||
"") # no upstream
|
|
||||||
p="" ;;
|
|
||||||
"0 0") # equal to upstream
|
|
||||||
p="=" ;;
|
|
||||||
"0 "*) # ahead of upstream
|
|
||||||
p=">" ;;
|
|
||||||
*" 0") # behind upstream
|
|
||||||
p="<" ;;
|
|
||||||
*) # diverged from upstream
|
|
||||||
p="<>" ;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
case "$count" in
|
|
||||||
"") # no upstream
|
|
||||||
p="" ;;
|
|
||||||
"0 0") # equal to upstream
|
|
||||||
p=" u=" ;;
|
|
||||||
"0 "*) # ahead of upstream
|
|
||||||
p=" u+${count#0 }" ;;
|
|
||||||
*" 0") # behind upstream
|
|
||||||
p=" u-${count% 0}" ;;
|
|
||||||
*) # diverged from upstream
|
|
||||||
p=" u+${count#* }-${count% *}" ;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
# Helper function that is meant to be called from __git_ps1. It
|
|
||||||
# injects color codes into the appropriate gitstring variables used
|
|
||||||
# to build a gitstring.
|
|
||||||
__git_ps1_colorize_gitstring ()
|
|
||||||
{
|
|
||||||
if [[ -n ${ZSH_VERSION-} ]]; then
|
|
||||||
local c_red='%F{red}'
|
|
||||||
local c_green='%F{green}'
|
|
||||||
local c_lblue='%F{blue}'
|
|
||||||
local c_clear='%f'
|
|
||||||
else
|
|
||||||
# Using \[ and \] around colors is necessary to prevent
|
|
||||||
# issues with command line editing/browsing/completion!
|
|
||||||
local c_red='\[\e[31m\]'
|
|
||||||
local c_green='\[\e[32m\]'
|
|
||||||
local c_lblue='\[\e[1;34m\]'
|
|
||||||
local c_clear='\[\e[0m\]'
|
|
||||||
fi
|
|
||||||
local bad_color=$c_red
|
|
||||||
local ok_color=$c_green
|
|
||||||
local flags_color="$c_lblue"
|
|
||||||
|
|
||||||
local branch_color=""
|
|
||||||
if [ $detached = no ]; then
|
|
||||||
branch_color="$ok_color"
|
|
||||||
else
|
|
||||||
branch_color="$bad_color"
|
|
||||||
fi
|
|
||||||
c="$branch_color$c"
|
|
||||||
|
|
||||||
z="$c_clear$z"
|
|
||||||
if [ "$w" = "*" ]; then
|
|
||||||
w="$bad_color$w"
|
|
||||||
fi
|
|
||||||
if [ -n "$i" ]; then
|
|
||||||
i="$ok_color$i"
|
|
||||||
fi
|
|
||||||
if [ -n "$s" ]; then
|
|
||||||
s="$flags_color$s"
|
|
||||||
fi
|
|
||||||
if [ -n "$u" ]; then
|
|
||||||
u="$bad_color$u"
|
|
||||||
fi
|
|
||||||
r="$c_clear$r"
|
|
||||||
}
|
|
||||||
|
|
||||||
# __git_ps1 accepts 0 or 1 arguments (i.e., format string)
|
|
||||||
# when called from PS1 using command substitution
|
|
||||||
# in this mode it prints text to add to bash PS1 prompt (includes branch name)
|
|
||||||
#
|
|
||||||
# __git_ps1 requires 2 or 3 arguments when called from PROMPT_COMMAND (pc)
|
|
||||||
# in that case it _sets_ PS1. The arguments are parts of a PS1 string.
|
|
||||||
# when two arguments are given, the first is prepended and the second appended
|
|
||||||
# to the state string when assigned to PS1.
|
|
||||||
# The optional third parameter will be used as printf format string to further
|
|
||||||
# customize the output of the git-status string.
|
|
||||||
# In this mode you can request colored hints using GIT_PS1_SHOWCOLORHINTS=true
|
|
||||||
__git_ps1 ()
|
|
||||||
{
|
|
||||||
local pcmode=no
|
|
||||||
local detached=no
|
|
||||||
local ps1pc_start='\u@\h:\w '
|
|
||||||
local ps1pc_end='\$ '
|
|
||||||
local printf_format=' (%s)'
|
|
||||||
|
|
||||||
case "$#" in
|
|
||||||
2|3) pcmode=yes
|
|
||||||
ps1pc_start="$1"
|
|
||||||
ps1pc_end="$2"
|
|
||||||
printf_format="${3:-$printf_format}"
|
|
||||||
;;
|
|
||||||
0|1) printf_format="${1:-$printf_format}"
|
|
||||||
;;
|
|
||||||
*) return
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
local repo_info rev_parse_exit_code
|
|
||||||
repo_info="$(git rev-parse --git-dir --is-inside-git-dir \
|
|
||||||
--is-bare-repository --is-inside-work-tree \
|
|
||||||
--short HEAD 2>/dev/null)"
|
|
||||||
rev_parse_exit_code="$?"
|
|
||||||
|
|
||||||
if [ -z "$repo_info" ]; then
|
|
||||||
if [ $pcmode = yes ]; then
|
|
||||||
#In PC mode PS1 always needs to be set
|
|
||||||
PS1="$ps1pc_start$ps1pc_end"
|
|
||||||
fi
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
local short_sha
|
|
||||||
if [ "$rev_parse_exit_code" = "0" ]; then
|
|
||||||
short_sha="${repo_info##*$'\n'}"
|
|
||||||
repo_info="${repo_info%$'\n'*}"
|
|
||||||
fi
|
|
||||||
local inside_worktree="${repo_info##*$'\n'}"
|
|
||||||
repo_info="${repo_info%$'\n'*}"
|
|
||||||
local bare_repo="${repo_info##*$'\n'}"
|
|
||||||
repo_info="${repo_info%$'\n'*}"
|
|
||||||
local inside_gitdir="${repo_info##*$'\n'}"
|
|
||||||
local g="${repo_info%$'\n'*}"
|
|
||||||
|
|
||||||
local r=""
|
|
||||||
local b=""
|
|
||||||
local step=""
|
|
||||||
local total=""
|
|
||||||
if [ -d "$g/rebase-merge" ]; then
|
|
||||||
read b 2>/dev/null <"$g/rebase-merge/head-name"
|
|
||||||
read step 2>/dev/null <"$g/rebase-merge/msgnum"
|
|
||||||
read total 2>/dev/null <"$g/rebase-merge/end"
|
|
||||||
if [ -f "$g/rebase-merge/interactive" ]; then
|
|
||||||
r="|REBASE-i"
|
|
||||||
else
|
|
||||||
r="|REBASE-m"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if [ -d "$g/rebase-apply" ]; then
|
|
||||||
read step 2>/dev/null <"$g/rebase-apply/next"
|
|
||||||
read total 2>/dev/null <"$g/rebase-apply/last"
|
|
||||||
if [ -f "$g/rebase-apply/rebasing" ]; then
|
|
||||||
read b 2>/dev/null <"$g/rebase-apply/head-name"
|
|
||||||
r="|REBASE"
|
|
||||||
elif [ -f "$g/rebase-apply/applying" ]; then
|
|
||||||
r="|AM"
|
|
||||||
else
|
|
||||||
r="|AM/REBASE"
|
|
||||||
fi
|
|
||||||
elif [ -f "$g/MERGE_HEAD" ]; then
|
|
||||||
r="|MERGING"
|
|
||||||
elif [ -f "$g/CHERRY_PICK_HEAD" ]; then
|
|
||||||
r="|CHERRY-PICKING"
|
|
||||||
elif [ -f "$g/REVERT_HEAD" ]; then
|
|
||||||
r="|REVERTING"
|
|
||||||
elif [ -f "$g/BISECT_LOG" ]; then
|
|
||||||
r="|BISECTING"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$b" ]; then
|
|
||||||
:
|
|
||||||
elif [ -h "$g/HEAD" ]; then
|
|
||||||
# symlink symbolic ref
|
|
||||||
b="$(git symbolic-ref HEAD 2>/dev/null)"
|
|
||||||
else
|
|
||||||
local head=""
|
|
||||||
if ! read head 2>/dev/null <"$g/HEAD"; then
|
|
||||||
if [ $pcmode = yes ]; then
|
|
||||||
PS1="$ps1pc_start$ps1pc_end"
|
|
||||||
fi
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
# is it a symbolic ref?
|
|
||||||
b="${head#ref: }"
|
|
||||||
if [ "$head" = "$b" ]; then
|
|
||||||
detached=yes
|
|
||||||
b="$(
|
|
||||||
case "${GIT_PS1_DESCRIBE_STYLE-}" in
|
|
||||||
(contains)
|
|
||||||
git describe --contains HEAD ;;
|
|
||||||
(branch)
|
|
||||||
git describe --contains --all HEAD ;;
|
|
||||||
(describe)
|
|
||||||
git describe HEAD ;;
|
|
||||||
(* | default)
|
|
||||||
git describe --tags --exact-match HEAD ;;
|
|
||||||
esac 2>/dev/null)" ||
|
|
||||||
|
|
||||||
b="$short_sha..."
|
|
||||||
b="($b)"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$step" ] && [ -n "$total" ]; then
|
|
||||||
r="$r $step/$total"
|
|
||||||
fi
|
|
||||||
|
|
||||||
local w=""
|
|
||||||
local i=""
|
|
||||||
local s=""
|
|
||||||
local u=""
|
|
||||||
local c=""
|
|
||||||
local p=""
|
|
||||||
|
|
||||||
if [ "true" = "$inside_gitdir" ]; then
|
|
||||||
if [ "true" = "$bare_repo" ]; then
|
|
||||||
c="BARE:"
|
|
||||||
else
|
|
||||||
b="GIT_DIR!"
|
|
||||||
fi
|
|
||||||
elif [ "true" = "$inside_worktree" ]; then
|
|
||||||
if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ] &&
|
|
||||||
[ "$(git config --bool bash.showDirtyState)" != "false" ]
|
|
||||||
then
|
|
||||||
git diff --no-ext-diff --quiet --exit-code || w="*"
|
|
||||||
if [ -n "$short_sha" ]; then
|
|
||||||
git diff-index --cached --quiet HEAD -- || i="+"
|
|
||||||
else
|
|
||||||
i="#"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ] &&
|
|
||||||
[ -r "$g/refs/stash" ]; then
|
|
||||||
s="$"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ] &&
|
|
||||||
[ "$(git config --bool bash.showUntrackedFiles)" != "false" ] &&
|
|
||||||
git ls-files --others --exclude-standard --error-unmatch -- '*' >/dev/null 2>/dev/null
|
|
||||||
then
|
|
||||||
u="%${ZSH_VERSION+%}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then
|
|
||||||
__git_ps1_show_upstream
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
local z="${GIT_PS1_STATESEPARATOR-" "}"
|
|
||||||
|
|
||||||
# NO color option unless in PROMPT_COMMAND mode
|
|
||||||
if [ $pcmode = yes ] && [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
|
|
||||||
__git_ps1_colorize_gitstring
|
|
||||||
fi
|
|
||||||
|
|
||||||
local f="$w$i$s$u"
|
|
||||||
local gitstring="$c${b##refs/heads/}${f:+$z$f}$r$p"
|
|
||||||
|
|
||||||
if [ $pcmode = yes ]; then
|
|
||||||
if [[ -n ${ZSH_VERSION-} ]]; then
|
|
||||||
gitstring=$(printf -- "$printf_format" "$gitstring")
|
|
||||||
else
|
|
||||||
printf -v gitstring -- "$printf_format" "$gitstring"
|
|
||||||
fi
|
|
||||||
PS1="$ps1pc_start$gitstring$ps1pc_end"
|
|
||||||
else
|
|
||||||
printf -- "$printf_format" "$gitstring"
|
|
||||||
fi
|
|
||||||
}
|
|
@ -1,242 +0,0 @@
|
|||||||
# Copyright (c) 2009 rupa deadwyler under the WTFPL license
|
|
||||||
|
|
||||||
# maintains a jump-list of the directories you actually use
|
|
||||||
#
|
|
||||||
# INSTALL:
|
|
||||||
# * put something like this in your .bashrc/.zshrc:
|
|
||||||
# . /path/to/z.sh
|
|
||||||
# * cd around for a while to build up the db
|
|
||||||
# * PROFIT!!
|
|
||||||
# * optionally:
|
|
||||||
# set $_Z_CMD in .bashrc/.zshrc to change the command (default z).
|
|
||||||
# set $_Z_DATA in .bashrc/.zshrc to change the datafile (default ~/.z).
|
|
||||||
# set $_Z_NO_RESOLVE_SYMLINKS to prevent symlink resolution.
|
|
||||||
# set $_Z_NO_PROMPT_COMMAND if you're handling PROMPT_COMMAND yourself.
|
|
||||||
# set $_Z_EXCLUDE_DIRS to an array of directories to exclude.
|
|
||||||
#
|
|
||||||
# USE:
|
|
||||||
# * z foo # cd to most frecent dir matching foo
|
|
||||||
# * z foo bar # cd to most frecent dir matching foo and bar
|
|
||||||
# * z -r foo # cd to highest ranked dir matching foo
|
|
||||||
# * z -t foo # cd to most recently accessed dir matching foo
|
|
||||||
# * z -l foo # list matches instead of cd
|
|
||||||
# * z -c foo # restrict matches to subdirs of $PWD
|
|
||||||
|
|
||||||
[ -d "${_Z_DATA:-$HOME/.z}" ] && {
|
|
||||||
echo "ERROR: z.sh's datafile (${_Z_DATA:-$HOME/.z}) is a directory."
|
|
||||||
}
|
|
||||||
|
|
||||||
_z() {
|
|
||||||
|
|
||||||
local datafile="${_Z_DATA:-$HOME/.z}"
|
|
||||||
|
|
||||||
# bail if we don't own ~/.z (we're another user but our ENV is still set)
|
|
||||||
[ -f "$datafile" -a ! -O "$datafile" ] && return
|
|
||||||
|
|
||||||
# add entries
|
|
||||||
if [ "$1" = "--add" ]; then
|
|
||||||
shift
|
|
||||||
|
|
||||||
# $HOME isn't worth matching
|
|
||||||
[ "$*" = "$HOME" ] && return
|
|
||||||
|
|
||||||
# don't track excluded dirs
|
|
||||||
local exclude
|
|
||||||
for exclude in "${_Z_EXCLUDE_DIRS[@]}"; do
|
|
||||||
[ "$*" = "$exclude" ] && return
|
|
||||||
done
|
|
||||||
|
|
||||||
# maintain the data file
|
|
||||||
local tempfile="$datafile.$RANDOM"
|
|
||||||
while read line; do
|
|
||||||
# only count directories
|
|
||||||
[ -d "${line%%\|*}" ] && echo $line
|
|
||||||
done < "$datafile" | awk -v path="$*" -v now="$(date +%s)" -F"|" '
|
|
||||||
BEGIN {
|
|
||||||
rank[path] = 1
|
|
||||||
time[path] = now
|
|
||||||
}
|
|
||||||
$2 >= 1 {
|
|
||||||
# drop ranks below 1
|
|
||||||
if( $1 == path ) {
|
|
||||||
rank[$1] = $2 + 1
|
|
||||||
time[$1] = now
|
|
||||||
} else {
|
|
||||||
rank[$1] = $2
|
|
||||||
time[$1] = $3
|
|
||||||
}
|
|
||||||
count += $2
|
|
||||||
}
|
|
||||||
END {
|
|
||||||
if( count > 6000 ) {
|
|
||||||
# aging
|
|
||||||
for( x in rank ) print x "|" 0.99*rank[x] "|" time[x]
|
|
||||||
} else for( x in rank ) print x "|" rank[x] "|" time[x]
|
|
||||||
}
|
|
||||||
' 2>/dev/null >| "$tempfile"
|
|
||||||
# do our best to avoid clobbering the datafile in a race condition
|
|
||||||
if [ $? -ne 0 -a -f "$datafile" ]; then
|
|
||||||
env rm -f "$tempfile"
|
|
||||||
else
|
|
||||||
env mv -f "$tempfile" "$datafile" || env rm -f "$tempfile"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# tab completion
|
|
||||||
elif [ "$1" = "--complete" ]; then
|
|
||||||
while read line; do
|
|
||||||
[ -d "${line%%\|*}" ] && echo $line
|
|
||||||
done < "$datafile" | awk -v q="$2" -F"|" '
|
|
||||||
BEGIN {
|
|
||||||
if( q == tolower(q) ) imatch = 1
|
|
||||||
split(substr(q, 3), fnd, " ")
|
|
||||||
}
|
|
||||||
{
|
|
||||||
if( imatch ) {
|
|
||||||
for( x in fnd ) tolower($1) !~ tolower(fnd[x]) && $1 = ""
|
|
||||||
} else {
|
|
||||||
for( x in fnd ) $1 !~ fnd[x] && $1 = ""
|
|
||||||
}
|
|
||||||
if( $1 ) print $1
|
|
||||||
}
|
|
||||||
' 2>/dev/null
|
|
||||||
|
|
||||||
else
|
|
||||||
# list/go
|
|
||||||
while [ "$1" ]; do case "$1" in
|
|
||||||
--) while [ "$1" ]; do shift; local fnd="$fnd${fnd:+ }$1";done;;
|
|
||||||
-*) local opt=${1:1}; while [ "$opt" ]; do case ${opt:0:1} in
|
|
||||||
c) local fnd="^$PWD $fnd";;
|
|
||||||
h) echo "${_Z_CMD:-z} [-chlrtx] args" >&2; return;;
|
|
||||||
x) sed -i "\:^${PWD}|.*:d" "$datafile";;
|
|
||||||
l) local list=1;;
|
|
||||||
r) local typ="rank";;
|
|
||||||
t) local typ="recent";;
|
|
||||||
esac; opt=${opt:1}; done;;
|
|
||||||
*) local fnd="$fnd${fnd:+ }$1";;
|
|
||||||
esac; local last=$1; shift; done
|
|
||||||
[ "$fnd" -a "$fnd" != "^$PWD " ] || local list=1
|
|
||||||
|
|
||||||
# if we hit enter on a completion just go there
|
|
||||||
case "$last" in
|
|
||||||
# completions will always start with /
|
|
||||||
/*) [ -z "$list" -a -d "$last" ] && cd "$last" && return;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# no file yet
|
|
||||||
[ -f "$datafile" ] || return
|
|
||||||
|
|
||||||
local cd
|
|
||||||
cd="$(while read line; do
|
|
||||||
[ -d "${line%%\|*}" ] && echo $line
|
|
||||||
done < "$datafile" | awk -v t="$(date +%s)" -v list="$list" -v typ="$typ" -v q="$fnd" -F"|" '
|
|
||||||
function frecent(rank, time) {
|
|
||||||
# relate frequency and time
|
|
||||||
dx = t - time
|
|
||||||
if( dx < 3600 ) return rank * 4
|
|
||||||
if( dx < 86400 ) return rank * 2
|
|
||||||
if( dx < 604800 ) return rank / 2
|
|
||||||
return rank / 4
|
|
||||||
}
|
|
||||||
function output(files, out, common) {
|
|
||||||
# list or return the desired directory
|
|
||||||
if( list ) {
|
|
||||||
cmd = "sort -n >&2"
|
|
||||||
for( x in files ) {
|
|
||||||
if( files[x] ) printf "%-10s %s\n", files[x], x | cmd
|
|
||||||
}
|
|
||||||
if( common ) {
|
|
||||||
printf "%-10s %s\n", "common:", common > "/dev/stderr"
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if( common ) out = common
|
|
||||||
print out
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function common(matches) {
|
|
||||||
# find the common root of a list of matches, if it exists
|
|
||||||
for( x in matches ) {
|
|
||||||
if( matches[x] && (!short || length(x) < length(short)) ) {
|
|
||||||
short = x
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if( short == "/" ) return
|
|
||||||
# use a copy to escape special characters, as we want to return
|
|
||||||
# the original. yeah, this escaping is awful.
|
|
||||||
clean_short = short
|
|
||||||
gsub(/[\(\)\[\]\|]/, "\\\\&", clean_short)
|
|
||||||
for( x in matches ) if( matches[x] && x !~ clean_short ) return
|
|
||||||
return short
|
|
||||||
}
|
|
||||||
BEGIN { split(q, words, " "); hi_rank = ihi_rank = -9999999999 }
|
|
||||||
{
|
|
||||||
if( typ == "rank" ) {
|
|
||||||
rank = $2
|
|
||||||
} else if( typ == "recent" ) {
|
|
||||||
rank = $3 - t
|
|
||||||
} else rank = frecent($2, $3)
|
|
||||||
matches[$1] = imatches[$1] = rank
|
|
||||||
for( x in words ) {
|
|
||||||
if( $1 !~ words[x] ) delete matches[$1]
|
|
||||||
if( tolower($1) !~ tolower(words[x]) ) delete imatches[$1]
|
|
||||||
}
|
|
||||||
if( matches[$1] && matches[$1] > hi_rank ) {
|
|
||||||
best_match = $1
|
|
||||||
hi_rank = matches[$1]
|
|
||||||
} else if( imatches[$1] && imatches[$1] > ihi_rank ) {
|
|
||||||
ibest_match = $1
|
|
||||||
ihi_rank = imatches[$1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
END {
|
|
||||||
# prefer case sensitive
|
|
||||||
if( best_match ) {
|
|
||||||
output(matches, best_match, common(matches))
|
|
||||||
} else if( ibest_match ) {
|
|
||||||
output(imatches, ibest_match, common(imatches))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
')"
|
|
||||||
[ $? -gt 0 ] && return
|
|
||||||
[ "$cd" ] && cd "$cd"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
alias ${_Z_CMD:-z}='_z 2>&1'
|
|
||||||
|
|
||||||
[ "$_Z_NO_RESOLVE_SYMLINKS" ] || _Z_RESOLVE_SYMLINKS="-P"
|
|
||||||
|
|
||||||
if compctl >/dev/null 2>&1; then
|
|
||||||
# zsh
|
|
||||||
[ "$_Z_NO_PROMPT_COMMAND" ] || {
|
|
||||||
# populate directory list, avoid clobbering any other precmds.
|
|
||||||
if [ "$_Z_NO_RESOLVE_SYMLINKS" ]; then
|
|
||||||
_z_precmd() {
|
|
||||||
_z --add "${PWD:a}"
|
|
||||||
}
|
|
||||||
else
|
|
||||||
_z_precmd() {
|
|
||||||
_z --add "${PWD:A}"
|
|
||||||
}
|
|
||||||
fi
|
|
||||||
[[ -n "${precmd_functions[(r)_z_precmd]}" ]] || {
|
|
||||||
precmd_functions[$(($#precmd_functions+1))]=_z_precmd
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_z_zsh_tab_completion() {
|
|
||||||
# tab completion
|
|
||||||
local compl
|
|
||||||
read -l compl
|
|
||||||
reply=(${(f)"$(_z --complete "$compl")"})
|
|
||||||
}
|
|
||||||
compctl -U -K _z_zsh_tab_completion _z
|
|
||||||
elif complete >/dev/null 2>&1; then
|
|
||||||
# bash
|
|
||||||
# tab completion
|
|
||||||
complete -o filenames -C '_z --complete "$COMP_LINE"' ${_Z_CMD:-z}
|
|
||||||
[ "$_Z_NO_PROMPT_COMMAND" ] || {
|
|
||||||
# populate directory list. avoid clobbering other PROMPT_COMMANDs.
|
|
||||||
grep "_z --add" <<< "$PROMPT_COMMAND" >/dev/null || {
|
|
||||||
PROMPT_COMMAND="$PROMPT_COMMAND"$'\n''_z --add "$(pwd '$_Z_RESOLVE_SYMLINKS' 2>/dev/null)" 2>/dev/null;'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fi
|
|
Loading…
Reference in New Issue
Block a user