]> git.zndr.dk Git - dotfiles.git/commitdiff
More cleanup for ubuntu
authorJannik ZANDER <jzander@grundfos.com>
Tue, 24 Oct 2017 19:00:33 +0000 (21:00 +0200)
committerJannik ZANDER <jzander@grundfos.com>
Tue, 24 Oct 2017 19:00:33 +0000 (21:00 +0200)
21 files changed:
.Xresources
.bash_profile
.config/bash/aliases
.cshrc
.dir_colors
.gitignore
.inputrc
.profile
.screenrc
.tmux.conf
bin/build-akmod.sh [changed mode: 0644->0755]
bin/build-luajit.sh [changed mode: 0644->0755]
bin/build-vim.sh [changed mode: 0644->0755]
bin/colortest [changed mode: 0644->0755]
bin/genilog.cmd [deleted file]
bin/git-diffall.sh [changed mode: 0644->0755]
bin/git-difftool.sh [changed mode: 0644->0755]
bin/git-editor.sh [changed mode: 0644->0755]
bin/git-mergetool.sh [changed mode: 0644->0755]
bin/git-review [changed mode: 0644->0755]
bin/rte.cmd [deleted file]

index da2bd02dc95bfac66085c86cf1b556ce63047dc8..bcc4a32ea42919ee1b61b68d83e83394ffc02cd3 100644 (file)
-!!SOLARIZED HEX     16/8 TERMCOL  XTERM/HEX   L*A*B      RGB         HSB\r
-!!--------- ------- ---- -------  ----------- ---------- ----------- -----------\r
-!!base03    #002b36  8/4 brblack  234 #1c1c1c 15 -12 -12   0  43  54 193 100  21\r
-!!base02    #073642  0/4 black    235 #262626 20 -12 -12   7  54  66 192  90  26\r
-!!base01    #586e75 10/7 brgreen  240 #585858 45 -07 -07  88 110 117 194  25  46\r
-!!base00    #657b83 11/7 bryellow 241 #626262 50 -07 -07 101 123 131 195  23  51\r
-!!base0     #839496 12/6 brblue   244 #808080 60 -06 -03 131 148 150 186  13  59\r
-!!base1     #93a1a1 14/4 brcyan   245 #8a8a8a 65 -05 -02 147 161 161 180   9  63\r
-!!base2     #eee8d5  7/7 white    254 #e4e4e4 92 -00  10 238 232 213  44  11  93\r
-!!base3     #fdf6e3 15/7 brwhite  230 #ffffd7 97  00  10 253 246 227  44  10  99\r
-!!yellow    #b58900  3/3 yellow   136 #af8700 60  10  65 181 137   0  45 100  71\r
-!!orange    #cb4b16  9/3 brred    166 #d75f00 50  50  55 203  75  22  18  89  80\r
-!!red       #dc322f  1/1 red      160 #d70000 50  65  45 220  50  47   1  79  86\r
-!!magenta   #d33682  5/5 magenta  125 #af005f 50  65 -05 211  54 130 331  74  83\r
-!!violet    #6c71c4 13/5 brmagenta 61 #5f5faf 50  15 -45 108 113 196 237  45  77\r
-!!blue      #268bd2  4/4 blue      33 #0087ff 55 -10 -45  38 139 210 205  82  82\r
-!!cyan      #2aa198  6/6 cyan      37 #00afaf 60 -35 -05  42 161 152 175  74  63\r
-!!green     #859900  2/2 green     64 #5f8700 60 -20  65 133 153   0  68 100  60\r
-\r
-#define SOLARIZED_DARK\r
-#ifdef SOLARIZED_DARK\r
-#define S_base03        #002b36\r
-#define S_base02        #073642\r
-#define S_base01        #586e75\r
-#define S_base00        #657b83\r
-#define S_base0         #839496\r
-#define S_base1         #93a1a1\r
-#define S_base2         #eee8d5\r
-#define S_base3         #fdf6e3\r
-#endif\r
-\r
-#ifdef SOLARIZED_LIGHT\r
-#define S_base3         #002b36\r
-#define S_base2         #073642\r
-#define S_base1         #586e75\r
-#define S_base0         #657b83\r
-#define S_base00        #839496\r
-#define S_base01        #93a1a1\r
-#define S_base02        #eee8d5\r
-#define S_base03        #fdf6e3\r
-#endif\r
-\r
-#define S_yellow        #b58900\r
-#define S_orange        #cb4b16\r
-#define S_red           #dc322f\r
-#define S_magenta       #d33682\r
-#define S_violet        #6c71c4\r
-#define S_blue          #268bd2\r
-#define S_cyan          #2aa198\r
-#define S_green         #859900\r
-\r
-\r
-*background:            S_base03\r
-*foreground:            S_base00\r
-*fading:                40\r
-*fadeColor:             S_base03\r
-*cursorColor:           S_base1\r
-*pointerColorBackground:S_base01\r
-*pointerColorForeground:S_base1\r
-\r
-!! black dark/light\r
-*color0:                S_base02\r
-*color8:                S_base03\r
-\r
-!! red dark/light\r
-*color1:                S_red\r
-*color9:                S_orange\r
-\r
-!! green dark/light\r
-*color2:                S_green\r
-*color10:               S_base01\r
-\r
-!! yellow dark/light\r
-*color3:                S_yellow\r
-*color11:               S_base00\r
-\r
-!! blue dark/light\r
-*color4:                S_blue\r
-*color12:               S_base0\r
-\r
-!! magenta dark/light\r
-*color5:                S_magenta\r
-*color13:               S_violet\r
-\r
-!! cyan dark/light\r
-*color6:                S_cyan\r
-*color14:               S_base1\r
-\r
-!! white dark/light\r
-*color7:                S_base2\r
-*color15:               S_base3\r
-\r
-!! xterm\r
-XTerm*termName: xterm-256color\r
-!XTerm*faceName: Mono\r
-!XTerm*faceSize: 11\r
-XTerm*metaSendsEscape: true\r
-XTerm*vt100.translations: #override \n\\r
-        Ctrl ~Shift <Key>Tab: string(0x1b) string("[34~") \n\r
-XTerm*toolBar:  off\r
-XTerm*scrollBar:  true\r
-XTerm*rightScrollBar: true\r
-\r
-!! better font rendering\r
-Xft.dpi:        96\r
-Xft.antialias:  true\r
-Xft.rgba:       rgb\r
-Xft.hinting:    false\r
-Xft.hintstyle:  hintnone\r
-Xft.lcdfilter:  lcddefault\r
-\r
-*reverseWrap:      true\r
-*scrollKey:        true\r
-*saveLines:        10000\r
-*scrollBar:        true\r
-*scrollTtyOutput:  false\r
-*cutToBeginningOfLine: true\r
-\r
-\r
-dt.obsolete: true\r
+!!SOLARIZED HEX     16/8 TERMCOL  XTERM/HEX   L*A*B      RGB         HSB
+!!--------- ------- ---- -------  ----------- ---------- ----------- -----------
+!!base03    #002b36  8/4 brblack  234 #1c1c1c 15 -12 -12   0  43  54 193 100  21
+!!base02    #073642  0/4 black    235 #262626 20 -12 -12   7  54  66 192  90  26
+!!base01    #586e75 10/7 brgreen  240 #585858 45 -07 -07  88 110 117 194  25  46
+!!base00    #657b83 11/7 bryellow 241 #626262 50 -07 -07 101 123 131 195  23  51
+!!base0     #839496 12/6 brblue   244 #808080 60 -06 -03 131 148 150 186  13  59
+!!base1     #93a1a1 14/4 brcyan   245 #8a8a8a 65 -05 -02 147 161 161 180   9  63
+!!base2     #eee8d5  7/7 white    254 #e4e4e4 92 -00  10 238 232 213  44  11  93
+!!base3     #fdf6e3 15/7 brwhite  230 #ffffd7 97  00  10 253 246 227  44  10  99
+!!yellow    #b58900  3/3 yellow   136 #af8700 60  10  65 181 137   0  45 100  71
+!!orange    #cb4b16  9/3 brred    166 #d75f00 50  50  55 203  75  22  18  89  80
+!!red       #dc322f  1/1 red      160 #d70000 50  65  45 220  50  47   1  79  86
+!!magenta   #d33682  5/5 magenta  125 #af005f 50  65 -05 211  54 130 331  74  83
+!!violet    #6c71c4 13/5 brmagenta 61 #5f5faf 50  15 -45 108 113 196 237  45  77
+!!blue      #268bd2  4/4 blue      33 #0087ff 55 -10 -45  38 139 210 205  82  82
+!!cyan      #2aa198  6/6 cyan      37 #00afaf 60 -35 -05  42 161 152 175  74  63
+!!green     #859900  2/2 green     64 #5f8700 60 -20  65 133 153   0  68 100  60
+
+#define SOLARIZED_DARK
+#ifdef SOLARIZED_DARK
+#define S_base03        #002b36
+#define S_base02        #073642
+#define S_base01        #586e75
+#define S_base00        #657b83
+#define S_base0         #839496
+#define S_base1         #93a1a1
+#define S_base2         #eee8d5
+#define S_base3         #fdf6e3
+#endif
+
+#ifdef SOLARIZED_LIGHT
+#define S_base3         #002b36
+#define S_base2         #073642
+#define S_base1         #586e75
+#define S_base0         #657b83
+#define S_base00        #839496
+#define S_base01        #93a1a1
+#define S_base02        #eee8d5
+#define S_base03        #fdf6e3
+#endif
+
+#define S_yellow        #b58900
+#define S_orange        #cb4b16
+#define S_red           #dc322f
+#define S_magenta       #d33682
+#define S_violet        #6c71c4
+#define S_blue          #268bd2
+#define S_cyan          #2aa198
+#define S_green         #859900
+
+
+*background:            S_base03
+*foreground:            S_base00
+*fading:                40
+*fadeColor:             S_base03
+*cursorColor:           S_base1
+*pointerColorBackground:S_base01
+*pointerColorForeground:S_base1
+
+!! black dark/light
+*color0:                S_base02
+*color8:                S_base03
+
+!! red dark/light
+*color1:                S_red
+*color9:                S_orange
+
+!! green dark/light
+*color2:                S_green
+*color10:               S_base01
+
+!! yellow dark/light
+*color3:                S_yellow
+*color11:               S_base00
+
+!! blue dark/light
+*color4:                S_blue
+*color12:               S_base0
+
+!! magenta dark/light
+*color5:                S_magenta
+*color13:               S_violet
+
+!! cyan dark/light
+*color6:                S_cyan
+*color14:               S_base1
+
+!! white dark/light
+*color7:                S_base2
+*color15:               S_base3
+
+!! xterm
+XTerm*termName: xterm-256color
+!XTerm*faceName: Mono
+!XTerm*faceSize: 11
+XTerm*metaSendsEscape: true
+XTerm*vt100.translations: #override \n\
+        Ctrl ~Shift <Key>Tab: string(0x1b) string("[34~") \n
+XTerm*toolBar:  off
+XTerm*scrollBar:  true
+XTerm*rightScrollBar: true
+
+!! better font rendering
+Xft.dpi:        96
+Xft.antialias:  true
+Xft.rgba:       rgb
+Xft.hinting:    false
+Xft.hintstyle:  hintnone
+Xft.lcdfilter:  lcddefault
+
+*reverseWrap:      true
+*scrollKey:        true
+*saveLines:        10000
+*scrollBar:        true
+*scrollTtyOutput:  false
+*cutToBeginningOfLine: true
+
+
+dt.obsolete: true
index e8e53b6f85b19de222e808aca979999d1f147a97..f8f9564790294582358f56dc7518633f0f1a1c4d 100644 (file)
@@ -1 +1 @@
-[ -f ~/.profile ] && source ~/.profile\r
+[ -f ~/.profile ] && source ~/.profile
index aea7fb80041ac4e9cc0f00c6e61dca3ece837eb4..31f64c80d606d4b3de4c0c3c3eefd49b310c1454 100644 (file)
@@ -23,6 +23,7 @@ alias fgrep='fgrep --color=auto'
 if [ -e /usr/bin/vimx ]; then alias vim='/usr/bin/vimx'; fi
 
 # Shortcuts
+alias dot='git --git-dir=$HOME/.dotfiles --work-tree=$HOME'
 alias g='git'
 alias h='history'
 alias j='jobs'
diff --git a/.cshrc b/.cshrc
index d62cb82f8298d9a7ff073ecb2607bf5d2941a9a8..9a21b6d1c75f9545a49f2e1f5c99e7e60600b828 100644 (file)
--- a/.cshrc
+++ b/.cshrc
@@ -1,12 +1,12 @@
-# .cshrc: executed by C shells on startup\r
-\r
-# If this is login or command shell then change to a sane shell\r
-if ($SHELL != /bin/bash) then\r
-  setenv SHELL /bin/bash\r
-  if ($?command) then\r
-    exec /bin/bash -c "$command"\r
-  else\r
-    exec /bin/bash\r
-  endif\r
-endif\r
-\r
+# .cshrc: executed by C shells on startup
+
+# If this is login or command shell then change to a sane shell
+if ($SHELL != /bin/bash) then
+  setenv SHELL /bin/bash
+  if ($?command) then
+    exec /bin/bash -c "$command"
+  else
+    exec /bin/bash
+  endif
+endif
+
index ed067605fcbcd8dc51d93610d492f9d37c6c5c62..f32324a8a09526e1708d89076931c1fbc12d42f6 100644 (file)
-# Exact Solarized Dark color theme for the color GNU ls utility.\r
-# Designed for dircolors (GNU coreutils) 5.97\r
-#\r
-# This simple theme was simultaneously designed for these terminal color schemes:\r
-# - Solarized dark  (best)\r
-# - Solarized light\r
-# - default dark\r
-# - default light\r
-# with a slight optimization for Solarized Dark.\r
-#\r
-# How the colors were selected:\r
-# - Terminal emulators often have an option typically enabled by default that makes\r
-#   bold a different color.  It is important to leave this option enabled so that\r
-#   you can access the entire 16-color Solarized palette, and not just 8 colors.\r
-# - We favor universality over a greater number of colors.  So we limit the number\r
-#   of colors so that this theme will work out of the box in all terminals,\r
-#   Solarized or not, dark or light.\r
-# - We choose to have the following category of files:\r
-#   NORMAL & FILE, DIR, LINK, EXEC and\r
-#   editable text including source, unimportant text, binary docs & multimedia source\r
-#   files, viewable multimedia, archived/compressed, and unimportant non-text\r
-# - For uniqueness, we stay away from the Solarized foreground colors are -- either\r
-#   base00 (brightyellow) or base0 (brighblue).  However, they can be used if\r
-#   you know what the bg/fg colors of your terminal are, in order to optimize the display.\r
-# - 3 different options are provided: universal, solarized dark, and solarized light.\r
-#   The only difference between the universal scheme and one that's optimized for\r
-#   dark/light is the color of "unimportant" files, which should blend more with the\r
-#   background\r
-# - We note that blue is the hardest color to see on dark bg and yellow is the hardest\r
-#   color to see on light bg (with blue being particularly bad).  So we choose yellow\r
-#   for multimedia files which are usually accessed in a GUI folder browser anyway.\r
-#   And blue is kept for custom use of this scheme's user.\r
-# - See table below to see the assignments.\r
-\r
-\r
-# Insatllation instructions:\r
-# This file goes in the /etc directory, and must be world readable.\r
-# You can copy this file to .dir_colors in your $HOME directory to override\r
-# the system defaults.\r
-\r
-# COLOR needs one of these arguments: 'tty' colorizes output to ttys, but not\r
-# pipes. 'all' adds color characters to all output. 'none' shuts colorization\r
-# off.\r
-COLOR tty\r
-\r
-# Below, there should be one TERM entry for each termtype that is colorizable\r
-TERM ansi\r
-TERM color_xterm\r
-TERM color-xterm\r
-TERM con132x25\r
-TERM con132x30\r
-TERM con132x43\r
-TERM con132x60\r
-TERM con80x25\r
-TERM con80x28\r
-TERM con80x30\r
-TERM con80x43\r
-TERM con80x50\r
-TERM con80x60\r
-TERM cons25\r
-TERM console\r
-TERM cygwin\r
-TERM dtterm\r
-TERM Eterm\r
-TERM eterm-color\r
-TERM gnome\r
-TERM gnome-256color\r
-TERM jfbterm\r
-TERM konsole\r
-TERM kterm\r
-TERM linux\r
-TERM linux-c\r
-TERM mach-color\r
-TERM mlterm\r
-TERM nxterm\r
-TERM putty\r
-TERM rxvt\r
-TERM rxvt-256color\r
-TERM rxvt-cygwin\r
-TERM rxvt-cygwin-native\r
-TERM rxvt-unicode\r
-TERM rxvt-unicode256\r
-TERM rxvt-unicode-256color\r
-TERM screen\r
-TERM screen-256color\r
-TERM screen-256color-bce\r
-TERM screen-bce\r
-TERM screen.linux\r
-TERM screen-w\r
-TERM vt100\r
-TERM xterm\r
-TERM xterm-16color\r
-TERM xterm-256color\r
-TERM xterm-88color\r
-TERM xterm-color\r
-TERM xterm-debian\r
-\r
-# EIGHTBIT, followed by '1' for on, '0' for off. (8-bit output)\r
-EIGHTBIT 1\r
-\r
-#############################################################################\r
-# Below are the color init strings for the basic file types. A color init\r
-# string consists of one or more of the following numeric codes:\r
-#\r
-# Attribute codes: \r
-#   00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed\r
-# Text color codes:\r
-#   30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white\r
-# Background color codes:\r
-#   40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white\r
-#\r
-# NOTES:\r
-# - See http://www.oreilly.com/catalog/wdnut/excerpt/color_names.html\r
-# - Color combinations\r
-#   ANSI Color code       Solarized  Notes                Universal             SolDark              SolLight\r
-#   ~~~~~~~~~~~~~~~       ~~~~~~~~~  ~~~~~                ~~~~~~~~~             ~~~~~~~              ~~~~~~~~\r
-#   00    none                                            NORMAL, FILE          <SAME>               <SAME>\r
-#   30    black           base02                                                \r
-#   01;30 bright black    base03     bg of SolDark                                                                         \r
-#   31    red             red                             docs & mm src         <SAME>               <SAME>\r
-#   01;31 bright red      orange                          EXEC                  <SAME>               <SAME>\r
-#   32    green           green                           editable text         <SAME>               <SAME>\r
-#   01;32 bright green    base01                          unimportant text      <SAME>\r
-#   33    yellow          yellow     unclear in light bg  multimedia            <SAME>               <SAME>\r
-#   01;33 bright yellow   base00     fg of SolLight                             unimportant non-text\r
-#   34    blue            blue       unclear in dark bg   user customized       <SAME>               <SAME>\r
-#   01;34 bright blue     base0      fg in SolDark                                                   unimportant text\r
-#   35    magenta         magenta                         LINK                  <SAME>               <SAME>\r
-#   01;35 bright magenta  violet                          archive/compressed    <SAME>               <SAME>\r
-#   36    cyan            cyan                            DIR                   <SAME>               <SAME>\r
-#   01;36 bright cyan     base1                           unimportant non-text                       <SAME>\r
-#   37    white           base2                                                                      \r
-#   01;37 bright white    base3      bg in SolLight                                                                        \r
-#   05;37;41                         unclear in Putty dark\r
-\r
-\r
-### By file type\r
-\r
-# global default\r
-NORMAL 00\r
-# normal file\r
-FILE 00\r
-# directory\r
-DIR 36\r
-# symbolic link\r
-LINK 35\r
-\r
-# pipe, socket, block device, character device (blue bg)\r
-FIFO 30;44\r
-SOCK 35;44\r
-DOOR 35;44 # Solaris 2.5 and later\r
-BLK  33;44\r
-CHR  37;44\r
-\r
-\r
-#############################################################################\r
-### By file attributes\r
-\r
-# Orphaned symlinks (blinking white on red)\r
-# Blink may or may not work (works on iTerm dark or light, and Putty dark)\r
-ORPHAN  05;37;41\r
-# ... and the files that orphaned symlinks point to (blinking white on red)\r
-MISSING 05;37;41\r
-\r
-# files with execute permission\r
-EXEC 01;31  # Unix\r
-.cmd 01;31  # Win\r
-.exe 01;31  # Win\r
-.com 01;31  # Win\r
-.bat 01;31  # Win\r
-.reg 01;31  # Win\r
-.app 01;31  # OSX\r
-\r
-#############################################################################\r
-### By extension\r
-\r
-# List any file extensions like '.gz' or '.tar' that you would like ls\r
-# to colorize below. Put the extension, a space, and the color init string.\r
-# (and any comments you want to add after a '#')\r
-\r
-### Text formats\r
-\r
-# Text that we can edit with a regular editor\r
-.txt 32\r
-.org 32\r
-.md 32\r
-.mkd 32\r
-\r
-# Source text\r
-.h 32\r
-.c 32\r
-.C 32\r
-.cc 32\r
-.cxx 32\r
-.objc 32\r
-.sh 32\r
-.csh 32\r
-.zsh 32\r
-.el 32\r
-.vim 32\r
-.java 32\r
-.pl 32\r
-.pm 32\r
-.py 32\r
-.rb 32\r
-.hs 32\r
-.php 32\r
-.htm 32\r
-.html 32\r
-.shtml 32\r
-.xml 32\r
-.rdf 32\r
-.css 32\r
-.js 32\r
-.man 32\r
-.0 32\r
-.1 32\r
-.2 32\r
-.3 32\r
-.4 32\r
-.5 32\r
-.6 32\r
-.7 32\r
-.8 32\r
-.9 32\r
-.l 32\r
-.n 32\r
-.p 32\r
-.pod 32\r
-.tex 32\r
-\r
-### Multimedia formats\r
-\r
-# Image\r
-.bmp 33\r
-.cgm 33\r
-.dl 33\r
-.dvi 33\r
-.emf 33\r
-.eps 33\r
-.gif 33\r
-.jpeg 33\r
-.jpg 33\r
-.JPG 33\r
-.mng 33\r
-.pbm 33\r
-.pcx 33\r
-.pdf 33\r
-.pgm 33\r
-.png 33\r
-.ppm 33\r
-.pps 33\r
-.ppsx 33\r
-.ps 33\r
-.svg 33\r
-.svgz 33\r
-.tga 33\r
-.tif 33\r
-.tiff 33\r
-.xbm 33\r
-.xcf 33\r
-.xpm 33\r
-.xwd 33\r
-.xwd 33\r
-.yuv 33\r
-\r
-# Audio\r
-.aac 33\r
-.au  33\r
-.flac 33\r
-.mid 33\r
-.midi 33\r
-.mka 33\r
-.mp3 33\r
-.mpa 33\r
-.mpeg 33\r
-.mpg 33\r
-.ogg  33\r
-.ra 33\r
-.wav 33\r
-\r
-# Video\r
-.anx 33\r
-.asf 33\r
-.avi 33\r
-.axv 33\r
-.flc 33\r
-.fli 33\r
-.flv 33\r
-.gl 33\r
-.m2v 33\r
-.m4v 33\r
-.mkv 33\r
-.mov 33\r
-.mp4 33\r
-.mp4v 33\r
-.mpeg 33\r
-.mpg 33\r
-.nuv 33\r
-.ogm 33\r
-.ogv 33\r
-.ogx 33\r
-.qt 33\r
-.rm 33\r
-.rmvb 33\r
-.swf 33\r
-.vob 33\r
-.wmv 33\r
-\r
-### Misc\r
-\r
-# Binary document formats and multimedia source\r
-.doc 31\r
-.docx 31\r
-.rtf 31\r
-.dot 31\r
-.dotx 31\r
-.xls 31\r
-.xlsx 31\r
-.ppt 31\r
-.pptx 31\r
-.fla 31\r
-.psd 31\r
-\r
-# Archives, compressed\r
-.7z   1;35\r
-.apk  1;35\r
-.arj  1;35\r
-.bin  1;35\r
-.bz   1;35\r
-.bz2  1;35\r
-.cab  1;35  # Win\r
-.deb  1;35\r
-.dmg  1;35  # OSX\r
-.gem  1;35\r
-.gz   1;35\r
-.iso  1;35\r
-.jar  1;35\r
-.msi  1;35  # Win\r
-.rar  1;35\r
-.rpm  1;35\r
-.tar  1;35\r
-.tbz  1;35\r
-.tbz2 1;35\r
-.tgz  1;35\r
-.tx   1;35\r
-.war  1;35\r
-.xpi  1;35\r
-.xz   1;35\r
-.z    1;35\r
-.Z    1;35\r
-.zip  1;35\r
-\r
-# For testing\r
-.ANSI-30-black 30\r
-.ANSI-01;30-brblack 01;30\r
-.ANSI-31-red 31\r
-.ANSI-01;31-brred 01;31\r
-.ANSI-32-green 32\r
-.ANSI-01;32-brgreen 01;32\r
-.ANSI-33-yellow 33\r
-.ANSI-01;33-bryellow 01;33\r
-.ANSI-34-blue 34\r
-.ANSI-01;34-brblue 01;34\r
-.ANSI-35-magenta 35\r
-.ANSI-01;35-brmagenta 01;35\r
-.ANSI-36-cyan 36\r
-.ANSI-01;36-brcyan 01;36\r
-.ANSI-37-white 37\r
-.ANSI-01;37-brwhite 01;37\r
-\r
-#############################################################################\r
-# Your customizations\r
-\r
-# Unimportant text files\r
-# For universal scheme, use brightgreen 01;32\r
-# For optimal on light bg (but too prominent on dark bg), use white 01;34\r
-.log 01;32\r
-*~ 01;32\r
-*# 01;32\r
-#.log 01;34\r
-#*~ 01;34\r
-#*# 01;34\r
-\r
-# Unimportant non-text files\r
-# For universal scheme, use brightcyan 01;36\r
-# For optimal on dark bg (but too prominent on light bg), change to 01;33\r
-#.bak 01;36\r
-#.BAK 01;36\r
-#.old 01;36\r
-#.OLD 01;36\r
-#.org_archive 01;36\r
-#.off 01;36\r
-#.OFF 01;36\r
-#.dist 01;36\r
-#.DIST 01;36\r
-#.orig 01;36\r
-#.ORIG 01;36\r
-#.swp 01;36\r
-#.swo 01;36\r
-#*,v 01;36\r
-.bak 01;33\r
-.BAK 01;33\r
-.old 01;33\r
-.OLD 01;33\r
-.org_archive 01;33\r
-.off 01;33\r
-.OFF 01;33\r
-.dist 01;33\r
-.DIST 01;33\r
-.orig 01;33\r
-.ORIG 01;33\r
-.swp 01;33\r
-.swo 01;33\r
-*,v 01;33\r
-\r
-# The brightmagenta (Solarized: purple) color is free for you to use for your\r
-# custom file type\r
-.gpg 34\r
-.gpg 34\r
-.pgp 34\r
-.asc 34\r
-.3des 34\r
-.aes 34\r
-.enc 34\r
+# Exact Solarized Dark color theme for the color GNU ls utility.
+# Designed for dircolors (GNU coreutils) 5.97
+#
+# This simple theme was simultaneously designed for these terminal color schemes:
+# - Solarized dark  (best)
+# - Solarized light
+# - default dark
+# - default light
+# with a slight optimization for Solarized Dark.
+#
+# How the colors were selected:
+# - Terminal emulators often have an option typically enabled by default that makes
+#   bold a different color.  It is important to leave this option enabled so that
+#   you can access the entire 16-color Solarized palette, and not just 8 colors.
+# - We favor universality over a greater number of colors.  So we limit the number
+#   of colors so that this theme will work out of the box in all terminals,
+#   Solarized or not, dark or light.
+# - We choose to have the following category of files:
+#   NORMAL & FILE, DIR, LINK, EXEC and
+#   editable text including source, unimportant text, binary docs & multimedia source
+#   files, viewable multimedia, archived/compressed, and unimportant non-text
+# - For uniqueness, we stay away from the Solarized foreground colors are -- either
+#   base00 (brightyellow) or base0 (brighblue).  However, they can be used if
+#   you know what the bg/fg colors of your terminal are, in order to optimize the display.
+# - 3 different options are provided: universal, solarized dark, and solarized light.
+#   The only difference between the universal scheme and one that's optimized for
+#   dark/light is the color of "unimportant" files, which should blend more with the
+#   background
+# - We note that blue is the hardest color to see on dark bg and yellow is the hardest
+#   color to see on light bg (with blue being particularly bad).  So we choose yellow
+#   for multimedia files which are usually accessed in a GUI folder browser anyway.
+#   And blue is kept for custom use of this scheme's user.
+# - See table below to see the assignments.
+
+
+# Insatllation instructions:
+# This file goes in the /etc directory, and must be world readable.
+# You can copy this file to .dir_colors in your $HOME directory to override
+# the system defaults.
+
+# COLOR needs one of these arguments: 'tty' colorizes output to ttys, but not
+# pipes. 'all' adds color characters to all output. 'none' shuts colorization
+# off.
+COLOR tty
+
+# Below, there should be one TERM entry for each termtype that is colorizable
+TERM ansi
+TERM color_xterm
+TERM color-xterm
+TERM con132x25
+TERM con132x30
+TERM con132x43
+TERM con132x60
+TERM con80x25
+TERM con80x28
+TERM con80x30
+TERM con80x43
+TERM con80x50
+TERM con80x60
+TERM cons25
+TERM console
+TERM cygwin
+TERM dtterm
+TERM Eterm
+TERM eterm-color
+TERM gnome
+TERM gnome-256color
+TERM jfbterm
+TERM konsole
+TERM kterm
+TERM linux
+TERM linux-c
+TERM mach-color
+TERM mlterm
+TERM nxterm
+TERM putty
+TERM rxvt
+TERM rxvt-256color
+TERM rxvt-cygwin
+TERM rxvt-cygwin-native
+TERM rxvt-unicode
+TERM rxvt-unicode256
+TERM rxvt-unicode-256color
+TERM screen
+TERM screen-256color
+TERM screen-256color-bce
+TERM screen-bce
+TERM screen.linux
+TERM screen-w
+TERM vt100
+TERM xterm
+TERM xterm-16color
+TERM xterm-256color
+TERM xterm-88color
+TERM xterm-color
+TERM xterm-debian
+
+# EIGHTBIT, followed by '1' for on, '0' for off. (8-bit output)
+EIGHTBIT 1
+
+#############################################################################
+# Below are the color init strings for the basic file types. A color init
+# string consists of one or more of the following numeric codes:
+#
+# Attribute codes: 
+#   00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
+# Text color codes:
+#   30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
+# Background color codes:
+#   40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
+#
+# NOTES:
+# - See http://www.oreilly.com/catalog/wdnut/excerpt/color_names.html
+# - Color combinations
+#   ANSI Color code       Solarized  Notes                Universal             SolDark              SolLight
+#   ~~~~~~~~~~~~~~~       ~~~~~~~~~  ~~~~~                ~~~~~~~~~             ~~~~~~~              ~~~~~~~~
+#   00    none                                            NORMAL, FILE          <SAME>               <SAME>
+#   30    black           base02                                                
+#   01;30 bright black    base03     bg of SolDark                                                                         
+#   31    red             red                             docs & mm src         <SAME>               <SAME>
+#   01;31 bright red      orange                          EXEC                  <SAME>               <SAME>
+#   32    green           green                           editable text         <SAME>               <SAME>
+#   01;32 bright green    base01                          unimportant text      <SAME>
+#   33    yellow          yellow     unclear in light bg  multimedia            <SAME>               <SAME>
+#   01;33 bright yellow   base00     fg of SolLight                             unimportant non-text
+#   34    blue            blue       unclear in dark bg   user customized       <SAME>               <SAME>
+#   01;34 bright blue     base0      fg in SolDark                                                   unimportant text
+#   35    magenta         magenta                         LINK                  <SAME>               <SAME>
+#   01;35 bright magenta  violet                          archive/compressed    <SAME>               <SAME>
+#   36    cyan            cyan                            DIR                   <SAME>               <SAME>
+#   01;36 bright cyan     base1                           unimportant non-text                       <SAME>
+#   37    white           base2                                                                      
+#   01;37 bright white    base3      bg in SolLight                                                                        
+#   05;37;41                         unclear in Putty dark
+
+
+### By file type
+
+# global default
+NORMAL 00
+# normal file
+FILE 00
+# directory
+DIR 36
+# symbolic link
+LINK 35
+
+# pipe, socket, block device, character device (blue bg)
+FIFO 30;44
+SOCK 35;44
+DOOR 35;44 # Solaris 2.5 and later
+BLK  33;44
+CHR  37;44
+
+
+#############################################################################
+### By file attributes
+
+# Orphaned symlinks (blinking white on red)
+# Blink may or may not work (works on iTerm dark or light, and Putty dark)
+ORPHAN  05;37;41
+# ... and the files that orphaned symlinks point to (blinking white on red)
+MISSING 05;37;41
+
+# files with execute permission
+EXEC 01;31  # Unix
+.cmd 01;31  # Win
+.exe 01;31  # Win
+.com 01;31  # Win
+.bat 01;31  # Win
+.reg 01;31  # Win
+.app 01;31  # OSX
+
+#############################################################################
+### By extension
+
+# List any file extensions like '.gz' or '.tar' that you would like ls
+# to colorize below. Put the extension, a space, and the color init string.
+# (and any comments you want to add after a '#')
+
+### Text formats
+
+# Text that we can edit with a regular editor
+.txt 32
+.org 32
+.md 32
+.mkd 32
+
+# Source text
+.h 32
+.c 32
+.C 32
+.cc 32
+.cxx 32
+.objc 32
+.sh 32
+.csh 32
+.zsh 32
+.el 32
+.vim 32
+.java 32
+.pl 32
+.pm 32
+.py 32
+.rb 32
+.hs 32
+.php 32
+.htm 32
+.html 32
+.shtml 32
+.xml 32
+.rdf 32
+.css 32
+.js 32
+.man 32
+.0 32
+.1 32
+.2 32
+.3 32
+.4 32
+.5 32
+.6 32
+.7 32
+.8 32
+.9 32
+.l 32
+.n 32
+.p 32
+.pod 32
+.tex 32
+
+### Multimedia formats
+
+# Image
+.bmp 33
+.cgm 33
+.dl 33
+.dvi 33
+.emf 33
+.eps 33
+.gif 33
+.jpeg 33
+.jpg 33
+.JPG 33
+.mng 33
+.pbm 33
+.pcx 33
+.pdf 33
+.pgm 33
+.png 33
+.ppm 33
+.pps 33
+.ppsx 33
+.ps 33
+.svg 33
+.svgz 33
+.tga 33
+.tif 33
+.tiff 33
+.xbm 33
+.xcf 33
+.xpm 33
+.xwd 33
+.xwd 33
+.yuv 33
+
+# Audio
+.aac 33
+.au  33
+.flac 33
+.mid 33
+.midi 33
+.mka 33
+.mp3 33
+.mpa 33
+.mpeg 33
+.mpg 33
+.ogg  33
+.ra 33
+.wav 33
+
+# Video
+.anx 33
+.asf 33
+.avi 33
+.axv 33
+.flc 33
+.fli 33
+.flv 33
+.gl 33
+.m2v 33
+.m4v 33
+.mkv 33
+.mov 33
+.mp4 33
+.mp4v 33
+.mpeg 33
+.mpg 33
+.nuv 33
+.ogm 33
+.ogv 33
+.ogx 33
+.qt 33
+.rm 33
+.rmvb 33
+.swf 33
+.vob 33
+.wmv 33
+
+### Misc
+
+# Binary document formats and multimedia source
+.doc 31
+.docx 31
+.rtf 31
+.dot 31
+.dotx 31
+.xls 31
+.xlsx 31
+.ppt 31
+.pptx 31
+.fla 31
+.psd 31
+
+# Archives, compressed
+.7z   1;35
+.apk  1;35
+.arj  1;35
+.bin  1;35
+.bz   1;35
+.bz2  1;35
+.cab  1;35  # Win
+.deb  1;35
+.dmg  1;35  # OSX
+.gem  1;35
+.gz   1;35
+.iso  1;35
+.jar  1;35
+.msi  1;35  # Win
+.rar  1;35
+.rpm  1;35
+.tar  1;35
+.tbz  1;35
+.tbz2 1;35
+.tgz  1;35
+.tx   1;35
+.war  1;35
+.xpi  1;35
+.xz   1;35
+.z    1;35
+.Z    1;35
+.zip  1;35
+
+# For testing
+.ANSI-30-black 30
+.ANSI-01;30-brblack 01;30
+.ANSI-31-red 31
+.ANSI-01;31-brred 01;31
+.ANSI-32-green 32
+.ANSI-01;32-brgreen 01;32
+.ANSI-33-yellow 33
+.ANSI-01;33-bryellow 01;33
+.ANSI-34-blue 34
+.ANSI-01;34-brblue 01;34
+.ANSI-35-magenta 35
+.ANSI-01;35-brmagenta 01;35
+.ANSI-36-cyan 36
+.ANSI-01;36-brcyan 01;36
+.ANSI-37-white 37
+.ANSI-01;37-brwhite 01;37
+
+#############################################################################
+# Your customizations
+
+# Unimportant text files
+# For universal scheme, use brightgreen 01;32
+# For optimal on light bg (but too prominent on dark bg), use white 01;34
+.log 01;32
+*~ 01;32
+*# 01;32
+#.log 01;34
+#*~ 01;34
+#*# 01;34
+
+# Unimportant non-text files
+# For universal scheme, use brightcyan 01;36
+# For optimal on dark bg (but too prominent on light bg), change to 01;33
+#.bak 01;36
+#.BAK 01;36
+#.old 01;36
+#.OLD 01;36
+#.org_archive 01;36
+#.off 01;36
+#.OFF 01;36
+#.dist 01;36
+#.DIST 01;36
+#.orig 01;36
+#.ORIG 01;36
+#.swp 01;36
+#.swo 01;36
+#*,v 01;36
+.bak 01;33
+.BAK 01;33
+.old 01;33
+.OLD 01;33
+.org_archive 01;33
+.off 01;33
+.OFF 01;33
+.dist 01;33
+.DIST 01;33
+.orig 01;33
+.ORIG 01;33
+.swp 01;33
+.swo 01;33
+*,v 01;33
+
+# The brightmagenta (Solarized: purple) color is free for you to use for your
+# custom file type
+.gpg 34
+.gpg 34
+.pgp 34
+.asc 34
+.3des 34
+.aes 34
+.enc 34
index 3ec65ffb651fa58de641014e2b77c2698dc26a52..a7db3a3770285946b94680b464e77e2bed9843d7 100644 (file)
@@ -1 +1 @@
-.dotfiles\r
+.dotfiles
index bba392df179eaaf2c031244cc2ccc5a6c5ce83f5..630cf3c659e6f1e80b0cce9aad9c75ac3e52d763 100644 (file)
--- a/.inputrc
+++ b/.inputrc
@@ -1,62 +1,62 @@
-# Use vi keybindings for everything that uses readline.\r
-\r
-# Adds punctuation as word delimiters\r
-set bind-tty-special-chars off\r
-\r
-# Completion Options\r
-set completion-ignore-case on\r
-set show-all-if-ambiguous on\r
-set show-all-if-unmodified on\r
-set mark-symlinked-directories on\r
-set match-hidden-files off\r
-set page-completions on\r
-set completion-query-items 200\r
-set visible-stats on\r
-set skip-completed-text on\r
-\r
-set editing-mode vi\r
-set keymap vi\r
-$if mode=vi\r
-    # Prompt will be prefixed with a `+` while in insert mode and a `:` when in command mode\r
-    #set show-mode-in-prompt on\r
-    set keymap vi-command\r
-    "gg": beginning-of-history\r
-    "G": end-of-history\r
-    "k": history-search-backward\r
-    "j": history-search-forward\r
-\r
-    set keymap vi-insert\r
-    "jj": vi-movement-mode\r
-    "\C-l": clear-screen\r
-    "\C-w": backward-kill-word\r
-    "\C-k": history-search-backward\r
-    "\C-j": history-search-forward\r
-$endif\r
-\r
-$if Bash\r
-  # do history expansion when space entered\r
-  Space: magic-space\r
-$endif\r
-\r
-$if Python\r
-$endif\r
-\r
-$if Gdb\r
-  "\e[15~": "continue\n"\r
-  "\e[21~": "next\n"\r
-  "\e[23~": "step\n"\r
-  "\eOQ": "nexti\n"\r
-  "\eOR": "stepi\n"\r
-$endif\r
-\r
-"\es": menu-complete\r
-\r
-# Useful stuff for UTF-8\r
-set meta-flag on\r
-set input-meta on\r
-set output-meta on\r
-set convert-meta off\r
-\r
-# Include system wide settings which is ignored\r
-# by default if one has own .inputrc\r
-$include ~/inputrc_local\r
+# Use vi keybindings for everything that uses readline.
+
+# Adds punctuation as word delimiters
+set bind-tty-special-chars off
+
+# Completion Options
+set completion-ignore-case on
+set show-all-if-ambiguous on
+set show-all-if-unmodified on
+set mark-symlinked-directories on
+set match-hidden-files off
+set page-completions on
+set completion-query-items 200
+set visible-stats on
+set skip-completed-text on
+
+set editing-mode vi
+set keymap vi
+$if mode=vi
+    # Prompt will be prefixed with a `+` while in insert mode and a `:` when in command mode
+    #set show-mode-in-prompt on
+    set keymap vi-command
+    "gg": beginning-of-history
+    "G": end-of-history
+    "k": history-search-backward
+    "j": history-search-forward
+
+    set keymap vi-insert
+    "jj": vi-movement-mode
+    "\C-l": clear-screen
+    "\C-w": backward-kill-word
+    "\C-k": history-search-backward
+    "\C-j": history-search-forward
+$endif
+
+$if Bash
+  # do history expansion when space entered
+  Space: magic-space
+$endif
+
+$if Python
+$endif
+
+$if Gdb
+  "\e[15~": "continue\n"
+  "\e[21~": "next\n"
+  "\e[23~": "step\n"
+  "\eOQ": "nexti\n"
+  "\eOR": "stepi\n"
+$endif
+
+"\es": menu-complete
+
+# Useful stuff for UTF-8
+set meta-flag on
+set input-meta on
+set output-meta on
+set convert-meta off
+
+# Include system wide settings which is ignored
+# by default if one has own .inputrc
+$include ~/inputrc_local
index f6bcf3cd4f6a0afcbe853f46dfc373f7c32736f2..ac752e18b9f1b1cbe4fcf26779d461724e7277fd 100644 (file)
--- a/.profile
+++ b/.profile
@@ -1,17 +1,17 @@
-# User dependent .profile file\r
-\r
-# This file is not read by bash(1) if ~/.bash_profile or ~/.bash_login\r
-# exists.\r
-\r
-# the default umask is set in /etc/profile;\r
-umask 022\r
-\r
-# if running bash\r
-if [ -n "${BASH_VERSION}" ]; then\r
-  [ -f "${HOME}/.bashrc" ] && . "${HOME}/.bashrc"\r
-fi\r
-\r
-# set path, environment, prompt etc\r
-for file in ${HOME}/.config/profile/*.sh; do\r
-  [ -f "$file" ] && . "$file";\r
-done;\r
+# User dependent .profile file
+
+# This file is not read by bash(1) if ~/.bash_profile or ~/.bash_login
+# exists.
+
+# the default umask is set in /etc/profile;
+umask 022
+
+# if running bash
+if [ -n "${BASH_VERSION}" ]; then
+  [ -f "${HOME}/.bashrc" ] && . "${HOME}/.bashrc"
+fi
+
+# set path, environment, prompt etc
+for file in ${HOME}/.config/profile/*.sh; do
+  [ -f "$file" ] && . "$file";
+done;
index 5b9d007a5c83754c6d40e657f9052bb41a57d8f0..a4a33ba125b969a0c7173f655b009d85a73299f8 100644 (file)
--- a/.screenrc
+++ b/.screenrc
@@ -1,8 +1,8 @@
-# Disable the startup message\r
-startup_message off\r
-\r
-# Set a large scrollback buffer\r
-defscrollback 32000\r
-\r
-# Always start `screen` with UTF-8 enabled (`screen -U`)\r
-defutf8 on\r
+# Disable the startup message
+startup_message off
+
+# Set a large scrollback buffer
+defscrollback 32000
+
+# Always start `screen` with UTF-8 enabled (`screen -U`)
+defutf8 on
index ecbbbdcf45e65a8890295ae7394102e49a6dfe8e..4c56589237040b9357074308722bf357efbe0956 100644 (file)
-# Setting the prefix from C-b to C-a\r
-set -g prefix C-a\r
-# Free the original Ctrl-b prefix keybinding\r
-unbind C-b\r
-#setting the delay between prefix and command\r
-set -sg escape-time 1\r
-# Ensure that we can send Ctrl-A to other apps\r
-bind C-a send-prefix\r
-# Set the base index for windows to 1 instead of 0\r
-set -g base-index 1\r
-# Set the base index for panes to 1 instead of 0\r
-setw -g pane-base-index 1\r
-\r
-# Set the default terminal mode to 256color mode\r
-set -g default-terminal "screen-256color"\r
-# enable activity alerts\r
-setw -g monitor-activity on\r
-set -g visual-activity on\r
-# set the status line's colors\r
-set -g status-fg white\r
-set -g status-bg black\r
-# set the color of the window list\r
-setw -g window-status-fg cyan\r
-setw -g window-status-bg default\r
-setw -g window-status-attr dim\r
-# set colors for the active window\r
-setw -g window-status-current-fg white\r
-setw -g window-status-current-bg red\r
-setw -g window-status-current-attr bright\r
-# pane colors\r
-set -g pane-border-fg green\r
-set -g pane-border-bg black\r
-set -g pane-active-border-fg white\r
-set -g pane-active-border-bg yellow\r
-# Command / message line\r
-set -g message-fg white\r
-set -g message-bg black\r
-set -g message-attr bright\r
-# Status line left side\r
-set -g status-left-length 40\r
-set -g status-left "#[fg=green]Session: #S #[fg=yellow]#I #[fg=cyan]#P"\r
-set -g status-utf8 on\r
-# Status line right side\r
-# 15% | 28 Nov 18:15\r
-set -g status-right "#(~/battery Discharging) | #[fg=cyan]%d %b %R"\r
-# Update the status bar every sixty seconds\r
-set -g status-interval 60\r
-# Center the window list\r
-set -g status-justify centre\r
-set -g detach-on-destroy off\r
-# Increase history-limit for scrolling (default is 2000)\r
-set-option -g history-limit 15000\r
-# mouse support - set to on if you want to use the mouse\r
-#setw -g mode-mouse on\r
-#set -g mouse-select-pane on\r
-#set -g mouse-resize-pane on\r
-#set -g mouse-select-window on\r
-#set -g mouse-utf8 on\r
-# enable vi keys.\r
-setw -g mode-keys vi\r
-# Reload the file with Prefix r\r
-bind r source-file ~/.tmux.conf \; display "Reloaded!"\r
-# splitting panes\r
-bind c neww -c "#{pane_current_path}"\r
-bind | split-window -h -c "#{pane_current_path}"\r
-bind - split-window -v -c "#{pane_current_path}"\r
-# moving between panes\r
-bind h select-pane -L\r
-bind j select-pane -D\r
-bind k select-pane -U\r
-bind l select-pane -R\r
-# Quick pane selection\r
-bind -r C-h select-window -t :-\r
-bind -r C-l select-window -t :+\r
-# Pane resizing\r
-bind -r H resize-pane -L 5\r
-bind -r J resize-pane -D 5\r
-bind -r K resize-pane -U 5\r
-bind -r L resize-pane -R 5\r
-# Open panes in the same directory using the tmux-panes script\r
-unbind v\r
-unbind n\r
-bind v send-keys " ~/tmux-panes -h" C-m\r
-bind n send-keys " ~/tmux-panes -v" C-m\r
-# Maximize and restore a pane\r
-unbind Up\r
-bind Up new-window -d -n tmp \; swap-pane -s tmp.1 \; select-window -t tmp\r
-unbind Down\r
-bind Down last-window \; swap-pane -s tmp.1 \; kill-window -t tmp\r
-# Log output to a text file on demand\r
-bind P pipe-pane -o "cat >>~/#W.log" \; display "Toggled logging to ~/#W.log"\r
-# better binding for copy mode\r
-bind v copy-mode\r
-# Select/yank like vim\r
-bind -t vi-copy 'v' begin-selection\r
-bind -t vi-copy 'y' copy-selection\r
-# open tree instead of session list\r
-bind s run 'tmuxer choose-session'\r
-bind-key -t vi-choice h tree-collapse\r
-bind-key -t vi-choice l tree-expand\r
-# local/private settings\r
-source-file ~/.tmux_local.conf\r
+# Setting the prefix from C-b to C-a
+set -g prefix C-a
+# Free the original Ctrl-b prefix keybinding
+unbind C-b
+#setting the delay between prefix and command
+set -sg escape-time 1
+# Ensure that we can send Ctrl-A to other apps
+bind C-a send-prefix
+# Set the base index for windows to 1 instead of 0
+set -g base-index 1
+# Set the base index for panes to 1 instead of 0
+setw -g pane-base-index 1
+
+# Set the default terminal mode to 256color mode
+set -g default-terminal "screen-256color"
+# enable activity alerts
+setw -g monitor-activity on
+set -g visual-activity on
+# set the status line's colors
+set -g status-fg white
+set -g status-bg black
+# set the color of the window list
+setw -g window-status-fg cyan
+setw -g window-status-bg default
+setw -g window-status-attr dim
+# set colors for the active window
+setw -g window-status-current-fg white
+setw -g window-status-current-bg red
+setw -g window-status-current-attr bright
+# pane colors
+set -g pane-border-fg green
+set -g pane-border-bg black
+set -g pane-active-border-fg white
+set -g pane-active-border-bg yellow
+# Command / message line
+set -g message-fg white
+set -g message-bg black
+set -g message-attr bright
+# Status line left side
+set -g status-left-length 40
+set -g status-left "#[fg=green]Session: #S #[fg=yellow]#I #[fg=cyan]#P"
+set -g status-utf8 on
+# Status line right side
+# 15% | 28 Nov 18:15
+set -g status-right "#(~/battery Discharging) | #[fg=cyan]%d %b %R"
+# Update the status bar every sixty seconds
+set -g status-interval 60
+# Center the window list
+set -g status-justify centre
+set -g detach-on-destroy off
+# Increase history-limit for scrolling (default is 2000)
+set-option -g history-limit 15000
+# mouse support - set to on if you want to use the mouse
+#setw -g mode-mouse on
+#set -g mouse-select-pane on
+#set -g mouse-resize-pane on
+#set -g mouse-select-window on
+#set -g mouse-utf8 on
+# enable vi keys.
+setw -g mode-keys vi
+# Reload the file with Prefix r
+bind r source-file ~/.tmux.conf \; display "Reloaded!"
+# splitting panes
+bind c neww -c "#{pane_current_path}"
+bind | split-window -h -c "#{pane_current_path}"
+bind - split-window -v -c "#{pane_current_path}"
+# moving between panes
+bind h select-pane -L
+bind j select-pane -D
+bind k select-pane -U
+bind l select-pane -R
+# Quick pane selection
+bind -r C-h select-window -t :-
+bind -r C-l select-window -t :+
+# Pane resizing
+bind -r H resize-pane -L 5
+bind -r J resize-pane -D 5
+bind -r K resize-pane -U 5
+bind -r L resize-pane -R 5
+# Open panes in the same directory using the tmux-panes script
+unbind v
+unbind n
+bind v send-keys " ~/tmux-panes -h" C-m
+bind n send-keys " ~/tmux-panes -v" C-m
+# Maximize and restore a pane
+unbind Up
+bind Up new-window -d -n tmp \; swap-pane -s tmp.1 \; select-window -t tmp
+unbind Down
+bind Down last-window \; swap-pane -s tmp.1 \; kill-window -t tmp
+# Log output to a text file on demand
+bind P pipe-pane -o "cat >>~/#W.log" \; display "Toggled logging to ~/#W.log"
+# better binding for copy mode
+bind v copy-mode
+# Select/yank like vim
+bind -t vi-copy 'v' begin-selection
+bind -t vi-copy 'y' copy-selection
+# open tree instead of session list
+bind s run 'tmuxer choose-session'
+bind-key -t vi-choice h tree-collapse
+bind-key -t vi-choice l tree-expand
+# local/private settings
+source-file ~/.tmux_local.conf
old mode 100644 (file)
new mode 100755 (executable)
index c451db7..ddcec7d
@@ -1,5 +1,5 @@
-#!/bin/sh\r
-\r
-sudo dnf install kernel-$1\r
-sudo dnf install akmod-wl "kernel-devel-uname-r == $(uname -r)"\r
-sudo akmods\r
+#!/bin/sh
+
+sudo dnf install kernel-$1
+sudo dnf install akmod-wl "kernel-devel-uname-r == $(uname -r)"
+sudo akmods
old mode 100644 (file)
new mode 100755 (executable)
index 2989278..5d635d9
@@ -1,3 +1,3 @@
-#!/bin/sh\r
-make PREFIX=$PREFIX MULTILIB=lib\r
-make install PREFIX=$PREFIX/apps/luajit MULTILIB=lib\r
+#!/bin/sh
+make PREFIX=$PREFIX MULTILIB=lib
+make install PREFIX=$PREFIX/apps/luajit MULTILIB=lib
old mode 100644 (file)
new mode 100755 (executable)
index b0938cc..09274d0
@@ -1,18 +1,18 @@
-#!/bin/sh\r
-\r
-./configure \\r
---prefix=$PREFIX \\r
---with-features=huge \\r
---with-compiledby="ejannza" \\r
---enable-multibyte \\r
---enable-gui=gtk2 \\r
---enable-luainterp \\r
---with-lua-prefix=$PREFIX --with-luajit \\r
---enable-gpm \\r
---enable-cscope \\r
---enable-fontset \\r
---enable-fail-if-missing\r
-\r
-\r
-make\r
-make install prefix=$PREFIX/apps/vim\r
+#!/bin/sh
+
+./configure \
+--prefix=$PREFIX \
+--with-features=huge \
+--with-compiledby="ejannza" \
+--enable-multibyte \
+--enable-gui=gtk2 \
+--enable-luainterp \
+--with-lua-prefix=$PREFIX --with-luajit \
+--enable-gpm \
+--enable-cscope \
+--enable-fontset \
+--enable-fail-if-missing
+
+
+make
+make install prefix=$PREFIX/apps/vim
old mode 100644 (file)
new mode 100755 (executable)
diff --git a/bin/genilog.cmd b/bin/genilog.cmd
deleted file mode 100644 (file)
index 740bdf7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-@call "c:\program files (x86)\python35-32\python.exe" C:\Projects\repos\grundfos\jaz\genilog\genilog.py %*\r
old mode 100644 (file)
new mode 100755 (executable)
index 25fdda9..2ae11ea
-#!/bin/sh\r
-# Copyright 2010 - 2012, Tim Henigan <tim.henigan@gmail.com>\r
-#\r
-# Permission is hereby granted, free of charge, to any person obtaining\r
-# a copy of this software and associated documentation files (the\r
-# "Software"), to deal in the Software without restriction, including\r
-# without limitation the rights to use, copy, modify, merge, publish,\r
-# distribute, sublicense, and/or sell copies of the Software, and to\r
-# permit persons to whom the Software is furnished to do so, subject to\r
-# the following conditions:\r
-#\r
-# The above copyright notice and this permission notice shall be included\r
-# in all copies or substantial portions of the Software.\r
-#\r
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r
-# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r
-# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r
-# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r
-# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
-\r
-\r
-# Perform a directory diff between commits in the repository using\r
-# the external diff or merge tool specified in the user's config.\r
-\r
-USAGE='[--cached] [--copy-back] [-x|--extcmd=<command>] <commit>{0,2} [-- <path>*]\r
-\r
-    --cached     Compare to the index rather than the working tree.\r
-\r
-    --copy-back  Copy files back to the working tree when the diff\r
-                 tool exits (in case they were modified by the\r
-                 user).  This option is only valid if the diff\r
-                 compared with the working tree.\r
-\r
-    -x=<command>\r
-    --extcmd=<command>  Specify a custom command for viewing diffs.\r
-                 git-diffall ignores the configured defaults and\r
-                 runs $command $LOCAL $REMOTE when this option is\r
-                 specified. Additionally, $BASE is set in the\r
-                 environment.\r
-'\r
-\r
-SUBDIRECTORY_OK=1\r
-. "$(git --exec-path)/git-sh-setup"\r
-\r
-TOOL_MODE=diff\r
-. "$(git --exec-path)/git-mergetool--lib"\r
-\r
-merge_tool="$(get_merge_tool)"\r
-if test -z "$merge_tool"\r
-then\r
-                    echo "Error: Either the 'diff.tool' or 'merge.tool' option must be set."\r
-                    usage\r
-fi\r
-\r
-start_dir=$(pwd)\r
-\r
-# All the file paths returned by the diff command are relative to the root\r
-# of the working copy. So if the script is called from a subdirectory, it\r
-# must switch to the root of working copy before trying to use those paths.\r
-cdup=$(git rev-parse --show-cdup) &&\r
-cd "$cdup" || {\r
-                    echo >&2 "Cannot chdir to $cdup, the toplevel of the working tree"\r
-                    exit 1\r
-}\r
-\r
-# set up temp dir\r
-tmp=$(perl -e 'use File::Temp qw(tempdir);\r
-                    $t=tempdir("/tmp/git-diffall.XXXXX") or exit(1);\r
-                    print $t') || exit 1\r
-#trap 'rm -rf "$tmp"' EXIT\r
-\r
-left=\r
-right=\r
-paths=\r
-dashdash_seen=\r
-compare_staged=\r
-merge_base=\r
-left_dir=\r
-right_dir=\r
-diff_tool=\r
-copy_back=\r
-\r
-while test $# != 0\r
-do\r
-                    case "$1" in\r
-                    -h|--h|--he|--hel|--help)\r
-                                        usage\r
-                                        ;;\r
-                    --cached)\r
-                                        compare_staged=1\r
-                                        ;;\r
-                    --copy-back)\r
-                                        copy_back=1\r
-                                        ;;\r
-                    -x|--e|--ex|--ext|--extc|--extcm|--extcmd)\r
-                                        if test $# = 1\r
-                                        then\r
-                                                            echo You must specify the tool for use with --extcmd\r
-                                                            usage\r
-                                        else\r
-                                                            diff_tool=$2\r
-                                                            shift\r
-                                        fi\r
-                                        ;;\r
-                    --)\r
-                                        dashdash_seen=1\r
-                                        ;;\r
-                    -*)\r
-                                        echo Invalid option: "$1"\r
-                                        usage\r
-                                        ;;\r
-                    *)\r
-                                        # could be commit, commit range or path limiter\r
-                                        case "$1" in\r
-                                        *...*)\r
-                                                            left=${1%...*}\r
-                                                            right=${1#*...}\r
-                                                            merge_base=1\r
-                                                            ;;\r
-                                        *..*)\r
-                                                            left=${1%..*}\r
-                                                            right=${1#*..}\r
-                                                            ;;\r
-                                        *)\r
-                                                            if test -n "$dashdash_seen"\r
-                                                            then\r
-                                                                                paths="$paths$1 "\r
-                                                            elif test -z "$left"\r
-                                                            then\r
-                                                                                left=$1\r
-                                                            elif test -z "$right"\r
-                                                            then\r
-                                                                                right=$1\r
-                                                            else\r
-                                                                                paths="$paths$1 "\r
-                                                            fi\r
-                                                            ;;\r
-                                        esac\r
-                                        ;;\r
-                    esac\r
-                    shift\r
-done\r
-\r
-# Determine the set of files which changed\r
-if test -n "$left" && test -n "$right"\r
-then\r
-                    left_dir="cmt-$(git rev-parse --short $left)"\r
-                    right_dir="cmt-$(git rev-parse --short $right)"\r
-\r
-                    if test -n "$compare_staged"\r
-                    then\r
-                                        usage\r
-                    elif test -n "$merge_base"\r
-                    then\r
-                                        git diff --name-only "$left"..."$right" -- $paths >"$tmp/filelist"\r
-                    else\r
-                                        git diff --name-only "$left" "$right" -- $paths >"$tmp/filelist"\r
-                    fi\r
-elif test -n "$left"\r
-then\r
-                    left_dir="cmt-$(git rev-parse --short $left)"\r
-\r
-                    if test -n "$compare_staged"\r
-                    then\r
-                                        right_dir="staged"\r
-                                        git diff --name-only --cached "$left" -- $paths >"$tmp/filelist"\r
-                    else\r
-                                        right_dir="working_tree"\r
-                                        git diff --name-only "$left" -- $paths >"$tmp/filelist"\r
-                    fi\r
-else\r
-                    left_dir="HEAD"\r
-\r
-                    if test -n "$compare_staged"\r
-                    then\r
-                                        right_dir="staged"\r
-                                        git diff --name-only --cached -- $paths >"$tmp/filelist"\r
-                    else\r
-                                        right_dir="working_tree"\r
-                                        git diff --name-only -- $paths >"$tmp/filelist"\r
-                    fi\r
-fi\r
-\r
-# Exit immediately if there are no diffs\r
-if test ! -s "$tmp/filelist"\r
-then\r
-                    exit 0\r
-fi\r
-\r
-if test -n "$copy_back" && test "$right_dir" != "working_tree"\r
-then\r
-                    echo "--copy-back is only valid when diff includes the working tree."\r
-                    exit 1\r
-fi\r
-\r
-# Create the named tmp directories that will hold the files to be compared\r
-mkdir -p "$tmp/$left_dir" "$tmp/$right_dir"\r
-\r
-# Populate the tmp/right_dir directory with the files to be compared\r
-while read name\r
-do\r
-                    if test -n "$right"\r
-                    then\r
-                                        ls_list=$(git ls-tree $right "$name")\r
-                                        if test -n "$ls_list"\r
-                                        then\r
-                                                            mkdir -p "$tmp/$right_dir/$(dirname "$name")"\r
-                                                            git show "$right":"$name" >"$tmp/$right_dir/$name" || true\r
-                                        fi\r
-                    elif test -n "$compare_staged"\r
-                    then\r
-                                        ls_list=$(git ls-files -- "$name")\r
-                                        if test -n "$ls_list"\r
-                                        then\r
-                                                            mkdir -p "$tmp/$right_dir/$(dirname "$name")"\r
-                                                            git show :"$name" >"$tmp/$right_dir/$name"\r
-                                        fi\r
-                    else\r
-                                        if test -e "$name"\r
-                                        then\r
-                                                            mkdir -p "$tmp/$right_dir/$(dirname "$name")"\r
-                                                            cp "$name" "$tmp/$right_dir/$name"\r
-                                        fi\r
-                    fi\r
-done < "$tmp/filelist"\r
-\r
-# Populate the tmp/left_dir directory with the files to be compared\r
-while read name\r
-do\r
-                    if test -n "$left"\r
-                    then\r
-                                        ls_list=$(git ls-tree $left "$name")\r
-                                        if test -n "$ls_list"\r
-                                        then\r
-                                                            mkdir -p "$tmp/$left_dir/$(dirname "$name")"\r
-                                                            git show "$left":"$name" >"$tmp/$left_dir/$name" || true\r
-                                        fi\r
-                    else\r
-                                        if test -n "$compare_staged"\r
-                                        then\r
-                                                            ls_list=$(git ls-tree HEAD "$name")\r
-                                                            if test -n "$ls_list"\r
-                                                            then\r
-                                                                                mkdir -p "$tmp/$left_dir/$(dirname "$name")"\r
-                                                                                git show HEAD:"$name" >"$tmp/$left_dir/$name"\r
-                                                            fi\r
-                                        else\r
-                                                            mkdir -p "$tmp/$left_dir/$(dirname "$name")"\r
-                                                            git show :"$name" >"$tmp/$left_dir/$name"\r
-                                        fi\r
-                    fi\r
-done < "$tmp/filelist"\r
-\r
-LOCAL="$tmp/$left_dir"\r
-REMOTE="$tmp/$right_dir"\r
-\r
-if test -n "$diff_tool"\r
-then\r
-                    export BASE\r
-                    eval $diff_tool '"$LOCAL"' '"$REMOTE"'\r
-else\r
-                    run_merge_tool "$merge_tool" false\r
-fi\r
-\r
-# Copy files back to the working dir, if requested\r
-if test -n "$copy_back" && test "$right_dir" = "working_tree"\r
-then\r
-                    cd "$start_dir"\r
-                    git_top_dir=$(git rev-parse --show-toplevel)\r
-                    find "$tmp/$right_dir" -type f |\r
-                    while read file\r
-                    do\r
-                                        cp "$file" "$git_top_dir/${file#$tmp/$right_dir/}"\r
-                    done\r
+#!/bin/sh
+# Copyright 2010 - 2012, Tim Henigan <tim.henigan@gmail.com>
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+# Perform a directory diff between commits in the repository using
+# the external diff or merge tool specified in the user's config.
+
+USAGE='[--cached] [--copy-back] [-x|--extcmd=<command>] <commit>{0,2} [-- <path>*]
+
+    --cached     Compare to the index rather than the working tree.
+
+    --copy-back  Copy files back to the working tree when the diff
+                 tool exits (in case they were modified by the
+                 user).  This option is only valid if the diff
+                 compared with the working tree.
+
+    -x=<command>
+    --extcmd=<command>  Specify a custom command for viewing diffs.
+                 git-diffall ignores the configured defaults and
+                 runs $command $LOCAL $REMOTE when this option is
+                 specified. Additionally, $BASE is set in the
+                 environment.
+'
+
+SUBDIRECTORY_OK=1
+. "$(git --exec-path)/git-sh-setup"
+
+TOOL_MODE=diff
+. "$(git --exec-path)/git-mergetool--lib"
+
+merge_tool="$(get_merge_tool)"
+if test -z "$merge_tool"
+then
+                    echo "Error: Either the 'diff.tool' or 'merge.tool' option must be set."
+                    usage
+fi
+
+start_dir=$(pwd)
+
+# All the file paths returned by the diff command are relative to the root
+# of the working copy. So if the script is called from a subdirectory, it
+# must switch to the root of working copy before trying to use those paths.
+cdup=$(git rev-parse --show-cdup) &&
+cd "$cdup" || {
+                    echo >&2 "Cannot chdir to $cdup, the toplevel of the working tree"
+                    exit 1
+}
+
+# set up temp dir
+tmp=$(perl -e 'use File::Temp qw(tempdir);
+                    $t=tempdir("/tmp/git-diffall.XXXXX") or exit(1);
+                    print $t') || exit 1
+#trap 'rm -rf "$tmp"' EXIT
+
+left=
+right=
+paths=
+dashdash_seen=
+compare_staged=
+merge_base=
+left_dir=
+right_dir=
+diff_tool=
+copy_back=
+
+while test $# != 0
+do
+                    case "$1" in
+                    -h|--h|--he|--hel|--help)
+                                        usage
+                                        ;;
+                    --cached)
+                                        compare_staged=1
+                                        ;;
+                    --copy-back)
+                                        copy_back=1
+                                        ;;
+                    -x|--e|--ex|--ext|--extc|--extcm|--extcmd)
+                                        if test $# = 1
+                                        then
+                                                            echo You must specify the tool for use with --extcmd
+                                                            usage
+                                        else
+                                                            diff_tool=$2
+                                                            shift
+                                        fi
+                                        ;;
+                    --)
+                                        dashdash_seen=1
+                                        ;;
+                    -*)
+                                        echo Invalid option: "$1"
+                                        usage
+                                        ;;
+                    *)
+                                        # could be commit, commit range or path limiter
+                                        case "$1" in
+                                        *...*)
+                                                            left=${1%...*}
+                                                            right=${1#*...}
+                                                            merge_base=1
+                                                            ;;
+                                        *..*)
+                                                            left=${1%..*}
+                                                            right=${1#*..}
+                                                            ;;
+                                        *)
+                                                            if test -n "$dashdash_seen"
+                                                            then
+                                                                                paths="$paths$1 "
+                                                            elif test -z "$left"
+                                                            then
+                                                                                left=$1
+                                                            elif test -z "$right"
+                                                            then
+                                                                                right=$1
+                                                            else
+                                                                                paths="$paths$1 "
+                                                            fi
+                                                            ;;
+                                        esac
+                                        ;;
+                    esac
+                    shift
+done
+
+# Determine the set of files which changed
+if test -n "$left" && test -n "$right"
+then
+                    left_dir="cmt-$(git rev-parse --short $left)"
+                    right_dir="cmt-$(git rev-parse --short $right)"
+
+                    if test -n "$compare_staged"
+                    then
+                                        usage
+                    elif test -n "$merge_base"
+                    then
+                                        git diff --name-only "$left"..."$right" -- $paths >"$tmp/filelist"
+                    else
+                                        git diff --name-only "$left" "$right" -- $paths >"$tmp/filelist"
+                    fi
+elif test -n "$left"
+then
+                    left_dir="cmt-$(git rev-parse --short $left)"
+
+                    if test -n "$compare_staged"
+                    then
+                                        right_dir="staged"
+                                        git diff --name-only --cached "$left" -- $paths >"$tmp/filelist"
+                    else
+                                        right_dir="working_tree"
+                                        git diff --name-only "$left" -- $paths >"$tmp/filelist"
+                    fi
+else
+                    left_dir="HEAD"
+
+                    if test -n "$compare_staged"
+                    then
+                                        right_dir="staged"
+                                        git diff --name-only --cached -- $paths >"$tmp/filelist"
+                    else
+                                        right_dir="working_tree"
+                                        git diff --name-only -- $paths >"$tmp/filelist"
+                    fi
+fi
+
+# Exit immediately if there are no diffs
+if test ! -s "$tmp/filelist"
+then
+                    exit 0
+fi
+
+if test -n "$copy_back" && test "$right_dir" != "working_tree"
+then
+                    echo "--copy-back is only valid when diff includes the working tree."
+                    exit 1
+fi
+
+# Create the named tmp directories that will hold the files to be compared
+mkdir -p "$tmp/$left_dir" "$tmp/$right_dir"
+
+# Populate the tmp/right_dir directory with the files to be compared
+while read name
+do
+                    if test -n "$right"
+                    then
+                                        ls_list=$(git ls-tree $right "$name")
+                                        if test -n "$ls_list"
+                                        then
+                                                            mkdir -p "$tmp/$right_dir/$(dirname "$name")"
+                                                            git show "$right":"$name" >"$tmp/$right_dir/$name" || true
+                                        fi
+                    elif test -n "$compare_staged"
+                    then
+                                        ls_list=$(git ls-files -- "$name")
+                                        if test -n "$ls_list"
+                                        then
+                                                            mkdir -p "$tmp/$right_dir/$(dirname "$name")"
+                                                            git show :"$name" >"$tmp/$right_dir/$name"
+                                        fi
+                    else
+                                        if test -e "$name"
+                                        then
+                                                            mkdir -p "$tmp/$right_dir/$(dirname "$name")"
+                                                            cp "$name" "$tmp/$right_dir/$name"
+                                        fi
+                    fi
+done < "$tmp/filelist"
+
+# Populate the tmp/left_dir directory with the files to be compared
+while read name
+do
+                    if test -n "$left"
+                    then
+                                        ls_list=$(git ls-tree $left "$name")
+                                        if test -n "$ls_list"
+                                        then
+                                                            mkdir -p "$tmp/$left_dir/$(dirname "$name")"
+                                                            git show "$left":"$name" >"$tmp/$left_dir/$name" || true
+                                        fi
+                    else
+                                        if test -n "$compare_staged"
+                                        then
+                                                            ls_list=$(git ls-tree HEAD "$name")
+                                                            if test -n "$ls_list"
+                                                            then
+                                                                                mkdir -p "$tmp/$left_dir/$(dirname "$name")"
+                                                                                git show HEAD:"$name" >"$tmp/$left_dir/$name"
+                                                            fi
+                                        else
+                                                            mkdir -p "$tmp/$left_dir/$(dirname "$name")"
+                                                            git show :"$name" >"$tmp/$left_dir/$name"
+                                        fi
+                    fi
+done < "$tmp/filelist"
+
+LOCAL="$tmp/$left_dir"
+REMOTE="$tmp/$right_dir"
+
+if test -n "$diff_tool"
+then
+                    export BASE
+                    eval $diff_tool '"$LOCAL"' '"$REMOTE"'
+else
+                    run_merge_tool "$merge_tool" false
+fi
+
+# Copy files back to the working dir, if requested
+if test -n "$copy_back" && test "$right_dir" = "working_tree"
+then
+                    cd "$start_dir"
+                    git_top_dir=$(git rev-parse --show-toplevel)
+                    find "$tmp/$right_dir" -type f |
+                    while read file
+                    do
+                                        cp "$file" "$git_top_dir/${file#$tmp/$right_dir/}"
+                    done
 fi
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index 6260e94..19fdcd5
@@ -1,3 +1,3 @@
-TOOL=vimdiff\r
-ARG=$@\r
-$TOOL $ARG\r
+TOOL=vimdiff
+ARG=$@
+$TOOL $ARG
old mode 100644 (file)
new mode 100755 (executable)
index 10932c4..0e904c2
@@ -1,4 +1,4 @@
-#!/bin/bash\r
-TOOL=vim\r
-ARG=$@\r
-$TOOL $ARG\r
+#!/bin/bash
+TOOL=vim
+ARG=$@
+$TOOL $ARG
old mode 100644 (file)
new mode 100755 (executable)
index 5837b55..3c1e79e
@@ -1,4 +1,4 @@
-#! /bin/bash\r
-TOOL=vimdiff\r
-ARG=$@\r
-$TOOL $ARG\r
+#! /bin/bash
+TOOL=vimdiff
+ARG=$@
+$TOOL $ARG
old mode 100644 (file)
new mode 100755 (executable)
index 0a9a580..9c1ba04
-#!/usr/bin/env python\r
-from __future__ import print_function\r
-\r
-COPYRIGHT = """\\r
-Copyright (C) 2011-2012 OpenStack LLC.\r
-\r
-Licensed under the Apache License, Version 2.0 (the "License");\r
-you may not use this file except in compliance with the License.\r
-You may obtain a copy of the License at\r
-\r
-   http://www.apache.org/licenses/LICENSE-2.0\r
-\r
-Unless required by applicable law or agreed to in writing, software\r
-distributed under the License is distributed on an "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r
-implied.\r
-\r
-See the License for the specific language governing permissions and\r
-limitations under the License."""\r
-\r
-import datetime\r
-import json\r
-import os\r
-import re\r
-import shlex\r
-import subprocess\r
-import sys\r
-import time\r
-\r
-if sys.version < '3':\r
-    import ConfigParser\r
-    import urllib\r
-    import urlparse\r
-    urlopen = urllib.urlopen\r
-    urlparse = urlparse.urlparse\r
-    do_input = raw_input\r
-else:\r
-    import configparser as ConfigParser\r
-    import urllib.parse\r
-    import urllib.request\r
-    urlopen = urllib.request.urlopen\r
-    urlparse = urllib.parse.urlparse\r
-    do_input = input\r
-\r
-from distutils import version as du_version\r
-\r
-version = "1.22"\r
-\r
-VERBOSE = False\r
-UPDATE = False\r
-CONFIGDIR = os.path.expanduser("~/.config/git-review")\r
-GLOBAL_CONFIG = "/etc/git-review/git-review.conf"\r
-USER_CONFIG = os.path.join(CONFIGDIR, "git-review.conf")\r
-PYPI_URL = "http://pypi.python.org/pypi/git-review/json"\r
-PYPI_CACHE_TIME = 60 * 60 * 24  # 24 hours\r
-DEFAULTS = dict(hostname='gerrit.lud.stericsson.com', port='29418', project=False,\r
-                defaultbranch='master', defaultremote="gerrit",\r
-                defaultrebase="0")\r
-\r
-_branch_name = None\r
-_has_color = None\r
-_no_color_support = False\r
-\r
-\r
-class colors:\r
-    yellow = '\033[33m'\r
-    green = '\033[92m'\r
-    reset = '\033[0m'\r
-\r
-\r
-class GitReviewException(Exception):\r
-    pass\r
-\r
-\r
-class CommandFailed(GitReviewException):\r
-\r
-    def __init__(self, *args):\r
-        Exception.__init__(self, *args)\r
-        (self.rc, self.output, self.argv, self.envp) = args\r
-        self.quickmsg = dict([\r
-            ("argv", " ".join(self.argv)),\r
-            ("rc", self.rc),\r
-            ("output", self.output)])\r
-\r
-    def __str__(self):\r
-        return self.__doc__ + """\r
-The following command failed with exit code %(rc)d\r
-    "%(argv)s"\r
------------------------\r
-%(output)s\r
------------------------""" % self.quickmsg\r
-\r
-\r
-class ChangeSetException(GitReviewException):\r
-\r
-    def __init__(self, e):\r
-        GitReviewException.__init__(self)\r
-        self.e = str(e)\r
-\r
-    def __str__(self):\r
-        return self.__doc__ % self.e\r
-\r
-\r
-def parse_review_number(review):\r
-    parts = review.split(',')\r
-    if len(parts) < 2:\r
-        parts.append(None)\r
-    return parts\r
-\r
-\r
-def build_review_number(review, patchset):\r
-    if patchset is not None:\r
-        return '%s,%s' % (review, patchset)\r
-    return review\r
-\r
-\r
-def run_command_status(*argv, **env):\r
-    if VERBOSE:\r
-        print(datetime.datetime.now(), "Running:", " ".join(argv))\r
-    if len(argv) == 1:\r
-        argv = shlex.split(str(argv[0]))\r
-    newenv = os.environ\r
-    newenv.update(env)\r
-    p = subprocess.Popen(argv, stdout=subprocess.PIPE,\r
-                         stderr=subprocess.STDOUT, env=newenv)\r
-    (out, nothing) = p.communicate()\r
-    out = out.decode('utf-8')\r
-    return (p.returncode, out.strip())\r
-\r
-\r
-def run_command(*argv, **env):\r
-    (rc, output) = run_command_status(*argv, **env)\r
-    return output\r
-\r
-\r
-def run_command_exc(klazz, *argv, **env):\r
-    """Run command *argv, on failure raise 'klazz\r
-\r
-    klass should be derived from CommandFailed\r
-    """\r
-    (rc, output) = run_command_status(*argv, **env)\r
-    if rc != 0:\r
-        raise klazz(rc, output, argv, env)\r
-    return output\r
-\r
-\r
-def update_latest_version(version_file_path):\r
-    """Cache the latest version of git-review for the upgrade check."""\r
-\r
-    if not os.path.exists(CONFIGDIR):\r
-        os.makedirs(CONFIGDIR)\r
-\r
-    if os.path.exists(version_file_path) and not UPDATE:\r
-        if (time.time() - os.path.getmtime(version_file_path)) < 28800:\r
-            return\r
-\r
-    latest_version = version\r
-    try:\r
-        latest_version = json.load(urlopen(PYPI_URL))['info']['version']\r
-    except Exception:\r
-        pass\r
-\r
-    with open(version_file_path, "w") as version_file:\r
-        version_file.write(latest_version)\r
-\r
-\r
-def latest_is_newer():\r
-    """Check if there is a new version of git-review."""\r
-\r
-    # Skip version check if distro package turns it off\r
-    if os.path.exists(GLOBAL_CONFIG):\r
-        config = dict(check=False)\r
-        configParser = ConfigParser.ConfigParser(config)\r
-        configParser.read(GLOBAL_CONFIG)\r
-        if not configParser.getboolean("updates", "check"):\r
-            return False\r
-\r
-    version_file_path = os.path.join(CONFIGDIR, "latest-version")\r
-    update_latest_version(version_file_path)\r
-\r
-    latest_version = None\r
-    with open(version_file_path, "r") as version_file:\r
-        latest_version = du_version.StrictVersion(version_file.read())\r
-    if latest_version > du_version.StrictVersion(version):\r
-        return True\r
-    return False\r
-\r
-\r
-def git_directories():\r
-    """Determine (absolute git work directory path, .git subdirectory path)."""\r
-    cmd = ("git", "rev-parse", "--show-toplevel", "--git-dir")\r
-    out = run_command_exc(GitDirectoriesException, *cmd)\r
-    try:\r
-        return out.split()\r
-    except ValueError:\r
-        raise GitDirectoriesException(0, out, cmd, {})\r
-\r
-\r
-class GitDirectoriesException(CommandFailed):\r
-    "Cannot determine where .git directory is."\r
-    EXIT_CODE = 70\r
-\r
-\r
-class CustomScriptException(CommandFailed):\r
-    """Custom script execution failed."""\r
-    EXIT_CODE = 71\r
-\r
-\r
-def run_custom_script(action):\r
-    """Get status and output of .git/hooks/$action-review or/and\r
-    ~/.config/hooks/$action-review if existing.\r
-    """\r
-    returns = []\r
-    script_file = "%s-review" % (action)\r
-    (top_dir, git_dir) = git_directories()\r
-    paths = [os.path.join(CONFIGDIR, "hooks", script_file),\r
-             os.path.join(git_dir, "hooks", script_file)]\r
-    for fpath in paths:\r
-        if os.path.isfile(fpath) and os.access(fpath, os.X_OK):\r
-            status, output = run_command_status(fpath)\r
-            returns.append((status, output, fpath))\r
-\r
-    for (status, output, path) in returns:\r
-        if status is not None and status != 0:\r
-            raise CustomScriptException(status, output, [path], {})\r
-        elif output and VERBOSE:\r
-            print("script %s output is:" % (path))\r
-            print(output)\r
-\r
-\r
-def git_config_get_value(section, option, default=None):\r
-    try:\r
-        return run_command_exc(GitConfigException,\r
-                               "git", "config",\r
-                               "--get",\r
-                               "%s.%s" % (section, option)).strip()\r
-    except GitConfigException as exc:\r
-        if exc.rc == 1:\r
-            return default\r
-        raise\r
-\r
-\r
-class GitConfigException(CommandFailed):\r
-    """Git config value retrieval failed."""\r
-    EXIT_CODE = 128\r
-\r
-\r
-class CannotInstallHook(CommandFailed):\r
-    "Problems encountered installing commit-msg hook"\r
-    EXIT_CODE = 2\r
-\r
-\r
-def set_hooks_commit_msg(remote, target_file):\r
-    """Install the commit message hook if needed."""\r
-\r
-    # Create the hooks directory if it's not there already\r
-    hooks_dir = os.path.dirname(target_file)\r
-    if not os.path.isdir(hooks_dir):\r
-        os.mkdir(hooks_dir)\r
-\r
-    (hostname, username, port, project_name) = \\r
-        parse_git_show(remote, "Push")\r
-\r
-    if not os.path.exists(target_file) or UPDATE:\r
-        if VERBOSE:\r
-            print("Fetching commit hook from: scp://%s:%s" % (hostname, port))\r
-        if port is not None:\r
-            port = "-P %s" % port\r
-        else:\r
-            port = ""\r
-        if username is None:\r
-            userhost = hostname\r
-        else:\r
-            userhost = "%s@%s" % (username, hostname)\r
-        run_command_exc(\r
-            CannotInstallHook,\r
-            "scp", port,\r
-            userhost + ":hooks/commit-msg",\r
-            target_file)\r
-\r
-    if not os.access(target_file, os.X_OK):\r
-        os.chmod(target_file, os.path.stat.S_IREAD | os.path.stat.S_IEXEC)\r
-\r
-\r
-def test_remote(username, hostname, port, project):\r
-    """Tests that a possible gerrit remote works."""\r
-\r
-    if port is not None:\r
-        port = "-p %s" % port\r
-    else:\r
-        port = ""\r
-    if username is None:\r
-        userhost = hostname\r
-    else:\r
-        userhost = "%s@%s" % (username, hostname)\r
-\r
-    (status, ssh_output) = run_command_status(\r
-        "ssh", "-x", port, userhost,\r
-        "gerrit", "ls-projects")\r
-\r
-    if status == 0:\r
-        if VERBOSE:\r
-            print("%s@%s:%s worked." % (username, hostname, port))\r
-        return True\r
-    else:\r
-        if VERBOSE:\r
-            print("%s@%s:%s did not work." % (username, hostname, port))\r
-        return False\r
-\r
-\r
-def make_remote_url(username, hostname, port, project):\r
-    """Builds a gerrit remote URL."""\r
-    if username is None:\r
-        return "ssh://%s:%s/%s" % (hostname, port, project)\r
-    else:\r
-        return "ssh://%s@%s:%s/%s" % (username, hostname, port, project)\r
-\r
-\r
-def add_remote(hostname, port, project, remote):\r
-    """Adds a gerrit remote."""\r
-    asked_for_username = False\r
-\r
-    username = os.getenv("USERNAME")\r
-    if not username:\r
-        username = git_config_get_value("gitreview", "username")\r
-    if not username:\r
-        username = os.getenv("USER")\r
-    if port is None:\r
-        port = 29418\r
-\r
-    remote_url = make_remote_url(username, hostname, port, project)\r
-    if VERBOSE:\r
-        print("No remote set, testing %s" % remote_url)\r
-    if not test_remote(username, hostname, port, project):\r
-        print("Could not connect to gerrit.")\r
-        username = do_input("Enter your gerrit username: ")\r
-        remote_url = make_remote_url(username, hostname, port, project)\r
-        print("Trying again with %s" % remote_url)\r
-        if not test_remote(username, hostname, port, project):\r
-            raise Exception("Could not connect to gerrit at %s" % remote_url)\r
-        asked_for_username = True\r
-\r
-    print("Creating a git remote called \"%s\" that maps to:" % remote)\r
-    print("\t%s" % remote_url)\r
-    cmd = "git remote add -f %s %s" % (remote, remote_url)\r
-    (status, remote_output) = run_command_status(cmd)\r
-\r
-    if status != 0:\r
-        raise Exception("Error running %s" % cmd)\r
-\r
-    if asked_for_username:\r
-        print()\r
-        print("This repository is now set up for use with git-review.")\r
-        print("You can set the default username for future repositories with:")\r
-        print('  git config --global --add gitreview.username "%s"' % username)\r
-        print()\r
-\r
-\r
-def parse_git_show(remote, verb):\r
-    fetch_url = ""\r
-    for line in run_command("git remote show -n %s" % remote).split("\n"):\r
-        if line.strip().startswith("%s" % verb):\r
-            fetch_url = line.split()[2]\r
-\r
-    parsed_url = urlparse(fetch_url)\r
-    project_name = parsed_url.path.lstrip("/")\r
-    if project_name.endswith(".git"):\r
-        project_name = project_name[:-4]\r
-\r
-    hostname = parsed_url.netloc\r
-    username = None\r
-    port = parsed_url.port\r
-\r
-    if VERBOSE:\r
-        print("Found origin %s URL:" % verb, fetch_url)\r
-\r
-    # Workaround bug in urlparse on OSX\r
-    if parsed_url.scheme == "ssh" and parsed_url.path[:2] == "//":\r
-        hostname = parsed_url.path[2:].split("/")[0]\r
-\r
-    if "@" in hostname:\r
-        (username, hostname) = hostname.split("@")\r
-    if ":" in hostname:\r
-        (hostname, port) = hostname.split(":")\r
-\r
-    # Is origin an ssh location? Let's pull more info\r
-    if parsed_url.scheme == "ssh" and port is None:\r
-        port = 22\r
-\r
-    return (hostname, username, str(port), project_name)\r
-\r
-\r
-def check_color_support():\r
-    global _has_color\r
-    global _no_color_support\r
-    if _has_color is None:\r
-        test_command = "git log --color=never --oneline HEAD^1..HEAD"\r
-        (status, output) = run_command_status(test_command)\r
-        if status == 0:\r
-            _has_color = True\r
-        else:\r
-            _has_color = False\r
-            \r
-    if _no_color_support:\r
-      _has_color = False\r
-\r
-    return _has_color\r
-\r
-\r
-def get_config(config_file=None):\r
-    """Generate the configuration map by starting with some built-in defaults\r
-    and then loading GLOBAL_CONFIG, USER_CONFIG, and a repository-specific\r
-    .gitreview file, if they exist. In case of conflict, the configuration file\r
-    with the narrowest scope wins.\r
-    """\r
-    config = DEFAULTS.copy()\r
-    for filename in (GLOBAL_CONFIG, USER_CONFIG, config_file):\r
-        if filename is not None and os.path.exists(filename):\r
-            config.update(load_config_file(filename))\r
-    return config\r
-\r
-\r
-def load_config_file(config_file):\r
-    """Load configuration options from a file."""\r
-    configParser = ConfigParser.ConfigParser()\r
-    configParser.read(config_file)\r
-    options = {\r
-        'hostname': 'host',\r
-        'port': 'port',\r
-        'project': 'project',\r
-        'defaultbranch': 'defaultbranch',\r
-        'defaultremote': 'defaultremote',\r
-        'defaultrebase': 'defaultrebase',\r
-    }\r
-    config = {}\r
-    for config_key, option_name in options.items():\r
-        if configParser.has_option('gerrit', option_name):\r
-            config[config_key] = configParser.get('gerrit', option_name)\r
-    return config\r
-\r
-\r
-def update_remote(remote):\r
-    cmd = "git remote update %s" % remote\r
-    (status, output) = run_command_status(cmd)\r
-    if VERBOSE:\r
-        print(output)\r
-    if status != 0:\r
-        print("Problem running '%s'" % cmd)\r
-        if not VERBOSE:\r
-            print(output)\r
-        return False\r
-    return True\r
-\r
-\r
-def check_remote(branch, remote, hostname, port, project):\r
-    """Check that a Gerrit Git remote repo exists, if not, set one."""\r
-\r
-    has_color = check_color_support()\r
-    if has_color:\r
-        color_never = "--color=never"\r
-    else:\r
-        color_never = ""\r
-\r
-    if remote in run_command("git remote").split("\n"):\r
-\r
-        remotes = run_command("git branch -a %s" % color_never).split("\n")\r
-        for current_remote in remotes:\r
-            if (current_remote.strip() == "remotes/%s/%s" % (remote, branch)\r
-                    and not UPDATE):\r
-                return\r
-        # We have the remote, but aren't set up to fetch. Fix it\r
-        if VERBOSE:\r
-            print("Setting up gerrit branch tracking for better rebasing")\r
-        update_remote(remote)\r
-        return\r
-\r
-    if hostname is False or port is False or project is False:\r
-        # This means there was no .gitreview file\r
-        print("No '.gitreview' file found in this repository.")\r
-        print("We don't know where your gerrit is. Please manually create ")\r
-        print("a remote named \"%s\" and try again." % remote)\r
-        sys.exit(1)\r
-\r
-    # Gerrit remote not present, try to add it\r
-    try:\r
-        add_remote(hostname, port, project, remote)\r
-    except Exception:\r
-        print(sys.exc_info()[2])\r
-        print("We don't know where your gerrit is. Please manually create ")\r
-        print("a remote named \"%s\" and try again." % remote)\r
-        raise\r
-\r
-\r
-def rebase_changes(branch, remote, interactive=True):\r
-\r
-    remote_branch = "remotes/%s/%s" % (remote, branch)\r
-\r
-    if not update_remote(remote):\r
-        return False\r
-\r
-    if interactive:\r
-        cmd = "git rebase -i %s" % remote_branch\r
-    else:\r
-        cmd = "git rebase %s" % remote_branch\r
-\r
-    (status, output) = run_command_status(cmd, GIT_EDITOR='true')\r
-    if status != 0:\r
-        print("Errors running %s" % cmd)\r
-        if interactive:\r
-            print(output)\r
-        return False\r
-    return True\r
-\r
-\r
-def undo_rebase():\r
-    cmd = "git reset --hard ORIG_HEAD"\r
-    (status, output) = run_command_status(cmd)\r
-    if status != 0:\r
-        print("Errors running %s" % cmd)\r
-        print(output)\r
-        return False\r
-    return True\r
-\r
-\r
-def get_branch_name(target_branch):\r
-    global _branch_name\r
-    if _branch_name is not None:\r
-        return _branch_name\r
-    _branch_name = None\r
-    has_color = check_color_support()\r
-    if has_color:\r
-        color_never = "--color=never"\r
-    else:\r
-        color_never = ""\r
-    for branch in run_command("git branch %s" % color_never).split("\n"):\r
-        if branch.startswith('*'):\r
-            _branch_name = branch.split()[1].strip()\r
-    if _branch_name == "(no":\r
-        _branch_name = target_branch\r
-    return _branch_name\r
-\r
-\r
-def assert_one_change(remote, branch, yes, have_hook):\r
-    has_color = check_color_support()\r
-    if has_color:\r
-        color = git_config_get_value("color", "ui")\r
-        if color is None:\r
-            color = "auto"\r
-        else:\r
-            color = color.lower()\r
-        if (color == "" or color == "true"):\r
-            color = "auto"\r
-        elif color == "false":\r
-            color = "never"\r
-        elif color == "auto":\r
-            # Python is not a tty, we have to force colors\r
-            color = "always"\r
-        use_color = "--color=%s" % color\r
-    else:\r
-        use_color = ""\r
-    cmd = "git log %s --decorate --oneline HEAD --not remotes/%s/%s --" % (\r
-        use_color, remote, branch)\r
-    (status, output) = run_command_status(cmd)\r
-    if status != 0:\r
-        print("Had trouble running %s" % cmd)\r
-        print(output)\r
-        sys.exit(1)\r
-    output_lines = len(output.split("\n"))\r
-    if output_lines == 1 and not have_hook:\r
-        print("Your change was committed before the commit hook was installed")\r
-        print("Amending the commit to add a gerrit change id")\r
-        run_command("git commit --amend", GIT_EDITOR='true')\r
-    elif output_lines == 0:\r
-        print("No changes between HEAD and %s/%s." % (remote, branch))\r
-        print("Submitting for review would be pointless.")\r
-        sys.exit(1)\r
-    elif output_lines > 1:\r
-        if not yes:\r
-            print("You have more than one commit"\r
-                  " that you are about to submit.")\r
-            print("The outstanding commits are:\n\n%s\n" % output)\r
-            print("Is this really what you meant to do?")\r
-            yes_no = do_input("Type 'yes' to confirm: ")\r
-            if yes_no.lower().strip() != "yes":\r
-                print("Aborting.")\r
-                print("Please rebase/squash your changes and try again")\r
-                sys.exit(1)\r
-\r
-\r
-def use_topic(why, topic):\r
-    """Inform the user about why a particular topic has been selected."""\r
-    if VERBOSE:\r
-        print(why % ('"%s"' % topic,))\r
-    return topic\r
-\r
-\r
-def get_topic(target_branch):\r
-\r
-    branch_name = get_branch_name(target_branch)\r
-\r
-    branch_parts = branch_name.split("/")\r
-    if len(branch_parts) >= 3 and branch_parts[0] == "review":\r
-        return use_topic("Using change number %s "\r
-                         "for the topic of the change submitted",\r
-                         "/".join(branch_parts[2:]))\r
-\r
-    log_output = run_command("git log HEAD^1..HEAD")\r
-    bug_re = r'\b([Bb]ug|[Ll][Pp])\s*[#:]?\s*(\d+)'\r
-\r
-    match = re.search(bug_re, log_output)\r
-    if match is not None:\r
-        return use_topic("Using bug number %s "\r
-                         "for the topic of the change submitted",\r
-                         "bug/%s" % match.group(2))\r
-\r
-    bp_re = r'\b([Bb]lue[Pp]rint|[Bb][Pp])\s*[#:]?\s*([0-9a-zA-Z-_]+)'\r
-    match = re.search(bp_re, log_output)\r
-    if match is not None:\r
-        return use_topic("Using blueprint number %s "\r
-                         "for the topic of the change submitted",\r
-                         "bp/%s" % match.group(2))\r
-\r
-    return use_topic("Using local branch name %s "\r
-                     "for the topic of the change submitted",\r
-                     branch_name)\r
-\r
-\r
-class CannotQueryOpenChangesets(CommandFailed):\r
-    "Cannot fetch review information from gerrit"\r
-    EXIT_CODE = 32\r
-\r
-\r
-class CannotParseOpenChangesets(ChangeSetException):\r
-    "Cannot parse JSON review information from gerrit"\r
-    EXIT_CODE = 33\r
-\r
-\r
-def list_reviews(remote):\r
-\r
-    (hostname, username, port, project_name) = \\r
-        parse_git_show(remote, "Push")\r
-\r
-    if port is not None:\r
-        port = "-p %s" % port\r
-    else:\r
-        port = ""\r
-    if username is None:\r
-        userhost = hostname\r
-    else:\r
-        userhost = "%s@%s" % (username, hostname)\r
-\r
-    review_info = None\r
-    output = run_command_exc(\r
-        CannotQueryOpenChangesets,\r
-        "ssh", "-x", port, userhost,\r
-        "gerrit", "query",\r
-        "--current-patch-set --format=JSON project:%s status:open reviewer:self" % project_name)\r
-\r
-    review_list = []\r
-    review_field_width = {}\r
-    REVIEW_FIELDS = ('number', 'currentPatchSet', 'branch', 'subject')\r
-    FIELDS = range(0, len(REVIEW_FIELDS))\r
-    if check_color_support():\r
-        review_field_color = (colors.yellow, colors.yellow, colors.green, "")\r
-        color_reset = colors.reset\r
-    else:\r
-        review_field_color = ("", "", "", "")\r
-        color_reset = ""\r
-    review_field_width = [0, 0, 0, 0]\r
-    review_field_format = ["%*s", "%*s", "%*s", "%*s"]\r
-    review_field_justify = [+1, +1, +1, -1]  # -1 is justify to right\r
-\r
-    for line in output.split("\n"):\r
-        # Warnings from ssh wind up in this output\r
-        if line[0] != "{":\r
-            print(line)\r
-            continue\r
-        try:\r
-            review_info = json.loads(line)\r
-        except Exception:\r
-            if VERBOSE:\r
-                print(output)\r
-            raise(CannotParseOpenChangesets, sys.exc_info()[1])\r
-\r
-        if 'type' in review_info:\r
-            break\r
-\r
-        tempPS = review_info['currentPatchSet']\r
-        appPS = tempPS['approvals']\r
-        appValue = '-';\r
-        for appLine in appPS:\r
-          appBy = appLine['by']\r
-          appUser = appBy['username']\r
-          if appUser == username:\r
-            appValue = appLine['value']\r
-        review_info['currentPatchSet'] = tempPS['number'] + ' ' + appValue\r
-        \r
-        review_list.append([review_info[f] for f in REVIEW_FIELDS])\r
-        for i in FIELDS:\r
-            review_field_width[i] = max(\r
-                review_field_width[i],\r
-                len(review_info[REVIEW_FIELDS[i]])\r
-            )\r
-\r
-    review_field_format = "  ".join([\r
-        review_field_color[i] +\r
-        review_field_format[i] +\r
-        color_reset\r
-        for i in FIELDS])\r
-\r
-    review_field_width = [\r
-        review_field_width[i] * review_field_justify[i]\r
-        for i in FIELDS]\r
-    for review_value in review_list:\r
-        # At this point we have review_field_format\r
-        # like "%*s %*s %*s" and we need to supply\r
-        # (width1, value1, width2, value2, ...) tuple to print\r
-        # It's easy to zip() widths with actual values,\r
-        # but we need to flatten the resulting\r
-        #  ((width1, value1), (width2, value2), ...) map.\r
-        formatted_fields = []\r
-        for (width, value) in zip(review_field_width, review_value):\r
-            formatted_fields.extend([width, value])\r
-        print(review_field_format % tuple(formatted_fields))\r
-    print("Found %d items for review" % review_info['rowCount'])\r
-\r
-    return 0\r
-\r
-\r
-class CannotQueryPatchSet(CommandFailed):\r
-    "Cannot query patchset information"\r
-    EXIT_CODE = 34\r
-\r
-\r
-class ReviewInformationNotFound(ChangeSetException):\r
-    "Could not fetch review information for change %s"\r
-    EXIT_CODE = 35\r
-\r
-\r
-class ReviewNotFound(ChangeSetException):\r
-    "Gerrit review %s not found"\r
-    EXIT_CODE = 36\r
-\r
-\r
-class PatchSetGitFetchFailed(CommandFailed):\r
-    """Cannot fetch patchset contents\r
-\r
-Does specified change number belong to this project?\r
-"""\r
-    EXIT_CODE = 37\r
-\r
-\r
-class PatchSetNotFound(ChangeSetException):\r
-    "Review patchset %s not found"\r
-    EXIT_CODE = 38\r
-\r
-\r
-class CheckoutNewBranchFailed(CommandFailed):\r
-    "Cannot checkout to new branch"\r
-    EXIT_CODE = 64\r
-\r
-\r
-class CheckoutExistingBranchFailed(CommandFailed):\r
-    "Cannot checkout existing branch"\r
-    EXIT_CODE = 65\r
-\r
-\r
-class ResetHardFailed(CommandFailed):\r
-    "Failed to hard reset downloaded branch"\r
-    EXIT_CODE = 66\r
-\r
-\r
-def fetch_review(review, masterbranch, remote):\r
-\r
-    (hostname, username, port, project_name) = \\r
-        parse_git_show(remote, "Push")\r
-\r
-    if port is not None:\r
-        port = "-p %s" % port\r
-    else:\r
-        port = ""\r
-    if username is None:\r
-        userhost = hostname\r
-    else:\r
-        userhost = "%s@%s" % (username, hostname)\r
-\r
-    review_arg = review\r
-    patchset_opt = '--current-patch-set'\r
-\r
-    review, patchset_number = parse_review_number(review)\r
-    if patchset_number is not None:\r
-        patchset_opt = '--patch-sets'\r
-\r
-    review_info = None\r
-    output = run_command_exc(\r
-        CannotQueryPatchSet,\r
-        "ssh", "-x", port, userhost,\r
-        "gerrit", "query",\r
-        "--format=JSON %s change:%s" % (patchset_opt, review))\r
-\r
-    review_jsons = output.split("\n")\r
-    found_review = False\r
-    for review_json in review_jsons:\r
-        try:\r
-            review_info = json.loads(review_json)\r
-            found_review = True\r
-        except Exception:\r
-            pass\r
-        if found_review:\r
-            break\r
-    if not found_review:\r
-        if VERBOSE:\r
-            print(output)\r
-        raise ReviewInformationNotFound(review)\r
-\r
-    try:\r
-        if patchset_number is None:\r
-            refspec = review_info['currentPatchSet']['ref']\r
-        else:\r
-            refspec = [ps for ps\r
-                       in review_info['patchSets']\r
-                       if ps['number'] == patchset_number][0]['ref']\r
-    except IndexError:\r
-        raise PatchSetNotFound(review_arg)\r
-    except KeyError:\r
-        raise ReviewNotFound(review)\r
-\r
-    try:\r
-        topic = review_info['topic']\r
-        if topic == masterbranch:\r
-            topic = review\r
-    except KeyError:\r
-        topic = review\r
-    try:\r
-        author = re.sub('\W+', '_', review_info['owner']['name']).lower()\r
-    except KeyError:\r
-        author = 'unknown'\r
-\r
-    if patchset_number is None:\r
-        branch_name = "review/%s/%s" % (author, topic)\r
-    else:\r
-        branch_name = "review/%s/%s-patch%s" % (author, topic, patchset_number)\r
-\r
-    print("Downloading %s from gerrit" % refspec)\r
-    run_command_exc(PatchSetGitFetchFailed,\r
-                    "git", "fetch", remote, refspec)\r
-    return branch_name\r
-\r
-\r
-def checkout_review(branch_name):\r
-    """Checkout a newly fetched (FETCH_HEAD) change\r
-       into a branch\r
-    """\r
-\r
-    try:\r
-        run_command_exc(CheckoutNewBranchFailed,\r
-                        "git", "checkout", "-b",\r
-                        branch_name, "FETCH_HEAD")\r
-\r
-    except CheckoutNewBranchFailed as e:\r
-        if re.search("already exists\.?", e.output):\r
-            print("Branch already exists - reusing")\r
-            run_command_exc(CheckoutExistingBranchFailed,\r
-                            "git", "checkout", branch_name)\r
-            run_command_exc(ResetHardFailed,\r
-                            "git", "reset", "--hard", "FETCH_HEAD")\r
-        else:\r
-            raise\r
-\r
-    print("Switched to branch \"%s\"" % branch_name)\r
-\r
-\r
-class PatchSetGitCherrypickFailed(CommandFailed):\r
-    "There was a problem applying changeset contents to the current branch."\r
-    EXIT_CODE = 69\r
-\r
-\r
-def cherrypick_review(option=None):\r
-    cmd = ["git", "cherry-pick"]\r
-    if option:\r
-        cmd.append(option)\r
-    cmd.append("FETCH_HEAD")\r
-    print(run_command_exc(PatchSetGitCherrypickFailed, *cmd))\r
-\r
-\r
-class CheckoutBackExistingBranchFailed(CommandFailed):\r
-    "Cannot switch back to existing branch"\r
-    EXIT_CODE = 67\r
-\r
-\r
-class DeleteBranchFailed(CommandFailed):\r
-    "Failed to delete branch"\r
-    EXIT_CODE = 68\r
-\r
-\r
-class InvalidPatchsetsToCompare(GitReviewException):\r
-    def __init__(self, patchsetA, patchsetB):\r
-        Exception.__init__(\r
-            self,\r
-            "Invalid patchsets for comparison specified (old=%s,new=%s)" % (\r
-                patchsetA,\r
-                patchsetB))\r
-    EXIT_CODE = 39\r
-\r
-\r
-def compare_review(review_spec, branch, remote, rebase=False):\r
-    new_ps = None    # none means latest\r
-\r
-    if '-' in review_spec:\r
-        review_spec, new_ps = review_spec.split('-')\r
-    review, old_ps = parse_review_number(review_spec)\r
-\r
-    if old_ps is None or old_ps == new_ps:\r
-        raise InvalidPatchsetsToCompare(old_ps, new_ps)\r
-\r
-    old_review = build_review_number(review, old_ps)\r
-    new_review = build_review_number(review, new_ps)\r
-\r
-    old_branch = fetch_review(old_review, branch, remote)\r
-    checkout_review(old_branch)\r
-\r
-    if rebase:\r
-        print('Rebasing %s' % old_branch)\r
-        rebase = rebase_changes(branch, remote, False)\r
-        if not rebase:\r
-            print('Skipping rebase because of conflicts')\r
-            run_command_exc(CommandFailed, 'git', 'rebase', '--abort')\r
-\r
-    new_branch = fetch_review(new_review, branch, remote)\r
-    checkout_review(new_branch)\r
-\r
-    if rebase:\r
-        print('Rebasing also %s' % new_branch)\r
-        if not rebase_changes(branch, remote, False):\r
-            print("Rebasing of the new branch failed, "\r
-                  "diff can be messed up (use -R to not rebase at all)!")\r
-            run_command_exc(CommandFailed, 'git', 'rebase', '--abort')\r
-\r
-    subprocess.check_call(['git', 'difftool', old_branch])\r
-\r
-\r
-def finish_branch(target_branch):\r
-    local_branch = get_branch_name(target_branch)\r
-    if VERBOSE:\r
-        print("Switching back to '%s' and deleting '%s'" % (target_branch,\r
-                                                            local_branch))\r
-    run_command_exc(CheckoutBackExistingBranchFailed,\r
-                    "git", "checkout", target_branch)\r
-    print("Switched to branch '%s'" % target_branch)\r
-\r
-    run_command_exc(DeleteBranchFailed,\r
-                    "git", "branch", "-D", local_branch)\r
-    print("Deleted branch '%s'" % local_branch)\r
-\r
-\r
-def convert_bool(one_or_zero):\r
-    "Return a bool on a one or zero string."\r
-    return one_or_zero in ["1", "true", "True"]\r
-\r
-\r
-def print_exit_message(status, needs_update):\r
-\r
-    if needs_update:\r
-        print("""\r
-***********************************************************\r
-A new version of git-review is available on PyPI. Please\r
-update your copy with:\r
-\r
-  pip install -U git-review\r
-\r
-to ensure proper behavior with gerrit. Thanks!\r
-***********************************************************\r
-""")\r
-    sys.exit(status)\r
-\r
-\r
-def main():\r
-    global _no_color_support\r
-    usage = "git review [OPTIONS] ... [BRANCH]"\r
-\r
-    import argparse\r
-\r
-    class DownloadFlag(argparse.Action):\r
-        """Additional option parsing: store value in 'dest', but\r
-           at the same time set one of the flag options to True\r
-        """\r
-        def __call__(self, parser, namespace, values, option_string=None):\r
-            setattr(namespace, self.dest, values)\r
-            setattr(namespace, self.const, True)\r
-\r
-    parser = argparse.ArgumentParser(usage=usage, description=COPYRIGHT)\r
-\r
-    parser.add_argument("-t", "--topic", dest="topic",\r
-                        help="Topic to submit branch to")\r
-    parser.add_argument("-D", "--draft", dest="draft", action="store_true",\r
-                        help="Submit review as a draft")\r
-    parser.add_argument("-c", "--compatible", dest="compatible",\r
-                        action="store_true",\r
-                        help="Push change to refs/for/* for compatibility "\r
-                             "with Gerrit versions < 2.3. Ignored if "\r
-                             "-D/--draft is used.")\r
-    parser.add_argument("-n", "--dry-run", dest="dry", action="store_true",\r
-                        help="Don't actually submit the branch for review")\r
-    parser.add_argument("-i", "--new-changeid", dest="regenerate",\r
-                        action="store_true",\r
-                        help="Regenerate Change-id before submitting")\r
-    parser.add_argument("-r", "--remote", dest="remote",\r
-                        help="git remote to use for gerrit")\r
-    parser.add_argument("-R", "--no-rebase", dest="rebase",\r
-                        action="store_false",\r
-                        help="Don't rebase changes before submitting.")\r
-    parser.add_argument("-F", "--force-rebase", dest="force_rebase",\r
-                        action="store_true",\r
-                        help="Force rebase even when not needed.")\r
-    parser.add_argument("-B", "--no-color", dest="no_color_support",\r
-                        action="store_true",\r
-                        help="No color support.")\r
-                        \r
-\r
-    fetch = parser.add_mutually_exclusive_group()\r
-    fetch.set_defaults(download=False, compare=False, cherrypickcommit=False,\r
-                       cherrypickindicate=False, cherrypickonly=False)\r
-    fetch.add_argument("-d", "--download", dest="changeidentifier",\r
-                       action=DownloadFlag, metavar="CHANGE",\r
-                       const="download",\r
-                       help="Download the contents of an existing gerrit "\r
-                            "review into a branch")\r
-    fetch.add_argument("-x", "--cherrypick", dest="changeidentifier",\r
-                       action=DownloadFlag, metavar="CHANGE",\r
-                       const="cherrypickcommit",\r
-                       help="Apply the contents of an existing gerrit "\r
-                             "review onto the current branch and commit "\r
-                             "(cherry pick; not recommended in most "\r
-                             "situations)")\r
-    fetch.add_argument("-X", "--cherrypickindicate", dest="changeidentifier",\r
-                       action=DownloadFlag, metavar="CHANGE",\r
-                       const="cherrypickindicate",\r
-                       help="Apply the contents of an existing gerrit "\r
-                       "review onto the current branch and commit, "\r
-                       "indicating its origin")\r
-    fetch.add_argument("-N", "--cherrypickonly", dest="changeidentifier",\r
-                       action=DownloadFlag, metavar="CHANGE",\r
-                       const="cherrypickonly",\r
-                       help="Apply the contents of an existing gerrit "\r
-                       "review to the working directory and prepare "\r
-                       "for commit")\r
-    fetch.add_argument("-m", "--compare", dest="changeidentifier",\r
-                       action=DownloadFlag, metavar="CHANGE,PS[-NEW_PS]",\r
-                       const="compare",\r
-                       help="Download specified and latest (or NEW_PS) "\r
-                       "patchsets of an existing gerrit review into "\r
-                       "a branches, rebase on master "\r
-                       "(skipped on conflicts or when -R is specified) "\r
-                       "and show their differences")\r
-\r
-    parser.add_argument("-u", "--update", dest="update", action="store_true",\r
-                        help="Force updates from remote locations")\r
-    parser.add_argument("-s", "--setup", dest="setup", action="store_true",\r
-                        help="Just run the repo setup commands but don't "\r
-                             "submit anything")\r
-    parser.add_argument("-f", "--finish", dest="finish", action="store_true",\r
-                        help="Close down this branch and switch back to "\r
-                             "master on successful submission")\r
-    parser.add_argument("-l", "--list", dest="list", action="store_true",\r
-                        help="List available reviews for the current project")\r
-    parser.add_argument("-y", "--yes", dest="yes", action="store_true",\r
-                        help="Indicate that you do, in fact, understand if "\r
-                             "you are submitting more than one patch")\r
-    parser.add_argument("-v", "--verbose", dest="verbose", action="store_true",\r
-                        help="Output more information about what's going on")\r
-    parser.add_argument("--no-custom-script", dest="custom_script",\r
-                        action="store_false", default=True,\r
-                        help="Do not run custom scripts.")\r
-    parser.add_argument("--license", dest="license", action="store_true",\r
-                        help="Print the license and exit")\r
-    parser.add_argument("--version", action="version",\r
-                        version='%s version %s' %\r
-                        (os.path.split(sys.argv[0])[-1], version))\r
-    parser.add_argument("branch", nargs="?")\r
-\r
-    try:\r
-        (top_dir, git_dir) = git_directories()\r
-    except GitDirectoriesException:\r
-        if sys.argv[1:] in ([], ['-h'], ['--help']):\r
-            parser.print_help()\r
-            sys.exit(1)\r
-        raise\r
-\r
-#    config = get_config(os.path.join(top_dir, ".gitreview"))\r
-    config = DEFAULTS.copy()       \r
-    cur_proj = run_command("git remote -v")\r
-    import re\r
-    m = re.search('(?<=29418\/)(\S+)', cur_proj)\r
-    config['project'] = m.group(0) \r
-\r
-    \r
-    defaultrebase = convert_bool(\r
-        git_config_get_value("gitreview", "rebase",\r
-                             default=str(config['defaultrebase'])))\r
-    parser.set_defaults(dry=False,\r
-                        draft=False,\r
-                        rebase=defaultrebase,\r
-                        verbose=False,\r
-                        update=False,\r
-                        setup=False,\r
-                        list=False,\r
-                        yes=False,\r
-                        branch=config['defaultbranch'],\r
-                        remote=config['defaultremote'])\r
-    options = parser.parse_args()\r
-\r
-    if options.license:\r
-        print(COPYRIGHT)\r
-        sys.exit(0)\r
-\r
-    branch = options.branch\r
-    global VERBOSE\r
-    global UPDATE\r
-    VERBOSE = options.verbose\r
-    UPDATE = options.update\r
-    remote = options.remote\r
-    yes = options.yes\r
-    status = 0\r
-\r
-    needs_update = latest_is_newer()\r
-    check_remote(branch, remote,\r
-                 config['hostname'], config['port'], config['project'])\r
-\r
-    if options.no_color_support:\r
-      _no_color_support = True\r
-\r
-    if options.changeidentifier:\r
-        if options.compare:\r
-            compare_review(options.changeidentifier,\r
-                           branch, remote, options.rebase)\r
-            return\r
-        local_branch = fetch_review(options.changeidentifier, branch, remote)\r
-        if options.download:\r
-            checkout_review(local_branch)\r
-        else:\r
-            if options.cherrypickcommit:\r
-                cherrypick_review()\r
-            elif options.cherrypickonly:\r
-                cherrypick_review("-n")\r
-            if options.cherrypickindicate:\r
-                cherrypick_review("-x")\r
-        return\r
-    elif options.list:\r
-        list_reviews(remote)\r
-        return\r
-\r
-    if options.custom_script:\r
-        run_custom_script("pre")\r
-\r
-    hook_file = os.path.join(git_dir, "hooks", "commit-msg")\r
-    have_hook = os.path.exists(hook_file) and os.access(hook_file, os.X_OK)\r
-\r
-    if not have_hook:\r
-        set_hooks_commit_msg(remote, hook_file)\r
-\r
-    if options.setup:\r
-        if options.finish and not options.dry:\r
-            finish_branch(branch)\r
-        return\r
-\r
-    if options.rebase:\r
-        if not rebase_changes(branch, remote):\r
-            print_exit_message(1, needs_update)\r
-        if not options.force_rebase and not undo_rebase():\r
-            print_exit_message(1, needs_update)\r
-    assert_one_change(remote, branch, yes, have_hook)\r
-\r
-    ref = "publish"\r
-\r
-    if options.draft:\r
-        ref = "drafts"\r
-        if options.custom_script:\r
-            run_custom_script("draft")\r
-    elif options.compatible:\r
-        ref = "for"\r
-\r
-    cmd = "git push %s HEAD:refs/%s/%s" % (remote, ref, branch)\r
-    topic = options.topic or get_topic(branch)\r
-    if topic != branch:\r
-        cmd += "/%s" % topic\r
-    if options.regenerate:\r
-        print("Amending the commit to regenerate the change id\n")\r
-        regenerate_cmd = "git commit --amend"\r
-        if options.dry:\r
-            print("\tGIT_EDITOR=\"sed -i -e '/^Change-Id:/d'\" %s\n" %\r
-                  regenerate_cmd)\r
-        else:\r
-            run_command(regenerate_cmd,\r
-                        GIT_EDITOR="sed -i -e "\r
-                        "'/^Change-Id:/d'")\r
-\r
-    if options.dry:\r
-        print("Please use the following command "\r
-              "to send your commits to review:\n")\r
-        print("\t%s\n" % cmd)\r
-    else:\r
-        (status, output) = run_command_status(cmd)\r
-        print(output)\r
-\r
-    if options.finish and not options.dry and status == 0:\r
-        finish_branch(branch)\r
-        return\r
-\r
-    if options.custom_script:\r
-        run_custom_script("post")\r
-    print_exit_message(status, needs_update)\r
-\r
-\r
-if __name__ == "__main__":\r
-    try:\r
-        main()\r
-    except GitReviewException as e:\r
-        print(e)\r
-        sys.exit(e.EXIT_CODE)\r
+#!/usr/bin/env python
+from __future__ import print_function
+
+COPYRIGHT = """\
+Copyright (C) 2011-2012 OpenStack LLC.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied.
+
+See the License for the specific language governing permissions and
+limitations under the License."""
+
+import datetime
+import json
+import os
+import re
+import shlex
+import subprocess
+import sys
+import time
+
+if sys.version < '3':
+    import ConfigParser
+    import urllib
+    import urlparse
+    urlopen = urllib.urlopen
+    urlparse = urlparse.urlparse
+    do_input = raw_input
+else:
+    import configparser as ConfigParser
+    import urllib.parse
+    import urllib.request
+    urlopen = urllib.request.urlopen
+    urlparse = urllib.parse.urlparse
+    do_input = input
+
+from distutils import version as du_version
+
+version = "1.22"
+
+VERBOSE = False
+UPDATE = False
+CONFIGDIR = os.path.expanduser("~/.config/git-review")
+GLOBAL_CONFIG = "/etc/git-review/git-review.conf"
+USER_CONFIG = os.path.join(CONFIGDIR, "git-review.conf")
+PYPI_URL = "http://pypi.python.org/pypi/git-review/json"
+PYPI_CACHE_TIME = 60 * 60 * 24  # 24 hours
+DEFAULTS = dict(hostname='gerrit.lud.stericsson.com', port='29418', project=False,
+                defaultbranch='master', defaultremote="gerrit",
+                defaultrebase="0")
+
+_branch_name = None
+_has_color = None
+_no_color_support = False
+
+
+class colors:
+    yellow = '\033[33m'
+    green = '\033[92m'
+    reset = '\033[0m'
+
+
+class GitReviewException(Exception):
+    pass
+
+
+class CommandFailed(GitReviewException):
+
+    def __init__(self, *args):
+        Exception.__init__(self, *args)
+        (self.rc, self.output, self.argv, self.envp) = args
+        self.quickmsg = dict([
+            ("argv", " ".join(self.argv)),
+            ("rc", self.rc),
+            ("output", self.output)])
+
+    def __str__(self):
+        return self.__doc__ + """
+The following command failed with exit code %(rc)d
+    "%(argv)s"
+-----------------------
+%(output)s
+-----------------------""" % self.quickmsg
+
+
+class ChangeSetException(GitReviewException):
+
+    def __init__(self, e):
+        GitReviewException.__init__(self)
+        self.e = str(e)
+
+    def __str__(self):
+        return self.__doc__ % self.e
+
+
+def parse_review_number(review):
+    parts = review.split(',')
+    if len(parts) < 2:
+        parts.append(None)
+    return parts
+
+
+def build_review_number(review, patchset):
+    if patchset is not None:
+        return '%s,%s' % (review, patchset)
+    return review
+
+
+def run_command_status(*argv, **env):
+    if VERBOSE:
+        print(datetime.datetime.now(), "Running:", " ".join(argv))
+    if len(argv) == 1:
+        argv = shlex.split(str(argv[0]))
+    newenv = os.environ
+    newenv.update(env)
+    p = subprocess.Popen(argv, stdout=subprocess.PIPE,
+                         stderr=subprocess.STDOUT, env=newenv)
+    (out, nothing) = p.communicate()
+    out = out.decode('utf-8')
+    return (p.returncode, out.strip())
+
+
+def run_command(*argv, **env):
+    (rc, output) = run_command_status(*argv, **env)
+    return output
+
+
+def run_command_exc(klazz, *argv, **env):
+    """Run command *argv, on failure raise 'klazz
+
+    klass should be derived from CommandFailed
+    """
+    (rc, output) = run_command_status(*argv, **env)
+    if rc != 0:
+        raise klazz(rc, output, argv, env)
+    return output
+
+
+def update_latest_version(version_file_path):
+    """Cache the latest version of git-review for the upgrade check."""
+
+    if not os.path.exists(CONFIGDIR):
+        os.makedirs(CONFIGDIR)
+
+    if os.path.exists(version_file_path) and not UPDATE:
+        if (time.time() - os.path.getmtime(version_file_path)) < 28800:
+            return
+
+    latest_version = version
+    try:
+        latest_version = json.load(urlopen(PYPI_URL))['info']['version']
+    except Exception:
+        pass
+
+    with open(version_file_path, "w") as version_file:
+        version_file.write(latest_version)
+
+
+def latest_is_newer():
+    """Check if there is a new version of git-review."""
+
+    # Skip version check if distro package turns it off
+    if os.path.exists(GLOBAL_CONFIG):
+        config = dict(check=False)
+        configParser = ConfigParser.ConfigParser(config)
+        configParser.read(GLOBAL_CONFIG)
+        if not configParser.getboolean("updates", "check"):
+            return False
+
+    version_file_path = os.path.join(CONFIGDIR, "latest-version")
+    update_latest_version(version_file_path)
+
+    latest_version = None
+    with open(version_file_path, "r") as version_file:
+        latest_version = du_version.StrictVersion(version_file.read())
+    if latest_version > du_version.StrictVersion(version):
+        return True
+    return False
+
+
+def git_directories():
+    """Determine (absolute git work directory path, .git subdirectory path)."""
+    cmd = ("git", "rev-parse", "--show-toplevel", "--git-dir")
+    out = run_command_exc(GitDirectoriesException, *cmd)
+    try:
+        return out.split()
+    except ValueError:
+        raise GitDirectoriesException(0, out, cmd, {})
+
+
+class GitDirectoriesException(CommandFailed):
+    "Cannot determine where .git directory is."
+    EXIT_CODE = 70
+
+
+class CustomScriptException(CommandFailed):
+    """Custom script execution failed."""
+    EXIT_CODE = 71
+
+
+def run_custom_script(action):
+    """Get status and output of .git/hooks/$action-review or/and
+    ~/.config/hooks/$action-review if existing.
+    """
+    returns = []
+    script_file = "%s-review" % (action)
+    (top_dir, git_dir) = git_directories()
+    paths = [os.path.join(CONFIGDIR, "hooks", script_file),
+             os.path.join(git_dir, "hooks", script_file)]
+    for fpath in paths:
+        if os.path.isfile(fpath) and os.access(fpath, os.X_OK):
+            status, output = run_command_status(fpath)
+            returns.append((status, output, fpath))
+
+    for (status, output, path) in returns:
+        if status is not None and status != 0:
+            raise CustomScriptException(status, output, [path], {})
+        elif output and VERBOSE:
+            print("script %s output is:" % (path))
+            print(output)
+
+
+def git_config_get_value(section, option, default=None):
+    try:
+        return run_command_exc(GitConfigException,
+                               "git", "config",
+                               "--get",
+                               "%s.%s" % (section, option)).strip()
+    except GitConfigException as exc:
+        if exc.rc == 1:
+            return default
+        raise
+
+
+class GitConfigException(CommandFailed):
+    """Git config value retrieval failed."""
+    EXIT_CODE = 128
+
+
+class CannotInstallHook(CommandFailed):
+    "Problems encountered installing commit-msg hook"
+    EXIT_CODE = 2
+
+
+def set_hooks_commit_msg(remote, target_file):
+    """Install the commit message hook if needed."""
+
+    # Create the hooks directory if it's not there already
+    hooks_dir = os.path.dirname(target_file)
+    if not os.path.isdir(hooks_dir):
+        os.mkdir(hooks_dir)
+
+    (hostname, username, port, project_name) = \
+        parse_git_show(remote, "Push")
+
+    if not os.path.exists(target_file) or UPDATE:
+        if VERBOSE:
+            print("Fetching commit hook from: scp://%s:%s" % (hostname, port))
+        if port is not None:
+            port = "-P %s" % port
+        else:
+            port = ""
+        if username is None:
+            userhost = hostname
+        else:
+            userhost = "%s@%s" % (username, hostname)
+        run_command_exc(
+            CannotInstallHook,
+            "scp", port,
+            userhost + ":hooks/commit-msg",
+            target_file)
+
+    if not os.access(target_file, os.X_OK):
+        os.chmod(target_file, os.path.stat.S_IREAD | os.path.stat.S_IEXEC)
+
+
+def test_remote(username, hostname, port, project):
+    """Tests that a possible gerrit remote works."""
+
+    if port is not None:
+        port = "-p %s" % port
+    else:
+        port = ""
+    if username is None:
+        userhost = hostname
+    else:
+        userhost = "%s@%s" % (username, hostname)
+
+    (status, ssh_output) = run_command_status(
+        "ssh", "-x", port, userhost,
+        "gerrit", "ls-projects")
+
+    if status == 0:
+        if VERBOSE:
+            print("%s@%s:%s worked." % (username, hostname, port))
+        return True
+    else:
+        if VERBOSE:
+            print("%s@%s:%s did not work." % (username, hostname, port))
+        return False
+
+
+def make_remote_url(username, hostname, port, project):
+    """Builds a gerrit remote URL."""
+    if username is None:
+        return "ssh://%s:%s/%s" % (hostname, port, project)
+    else:
+        return "ssh://%s@%s:%s/%s" % (username, hostname, port, project)
+
+
+def add_remote(hostname, port, project, remote):
+    """Adds a gerrit remote."""
+    asked_for_username = False
+
+    username = os.getenv("USERNAME")
+    if not username:
+        username = git_config_get_value("gitreview", "username")
+    if not username:
+        username = os.getenv("USER")
+    if port is None:
+        port = 29418
+
+    remote_url = make_remote_url(username, hostname, port, project)
+    if VERBOSE:
+        print("No remote set, testing %s" % remote_url)
+    if not test_remote(username, hostname, port, project):
+        print("Could not connect to gerrit.")
+        username = do_input("Enter your gerrit username: ")
+        remote_url = make_remote_url(username, hostname, port, project)
+        print("Trying again with %s" % remote_url)
+        if not test_remote(username, hostname, port, project):
+            raise Exception("Could not connect to gerrit at %s" % remote_url)
+        asked_for_username = True
+
+    print("Creating a git remote called \"%s\" that maps to:" % remote)
+    print("\t%s" % remote_url)
+    cmd = "git remote add -f %s %s" % (remote, remote_url)
+    (status, remote_output) = run_command_status(cmd)
+
+    if status != 0:
+        raise Exception("Error running %s" % cmd)
+
+    if asked_for_username:
+        print()
+        print("This repository is now set up for use with git-review.")
+        print("You can set the default username for future repositories with:")
+        print('  git config --global --add gitreview.username "%s"' % username)
+        print()
+
+
+def parse_git_show(remote, verb):
+    fetch_url = ""
+    for line in run_command("git remote show -n %s" % remote).split("\n"):
+        if line.strip().startswith("%s" % verb):
+            fetch_url = line.split()[2]
+
+    parsed_url = urlparse(fetch_url)
+    project_name = parsed_url.path.lstrip("/")
+    if project_name.endswith(".git"):
+        project_name = project_name[:-4]
+
+    hostname = parsed_url.netloc
+    username = None
+    port = parsed_url.port
+
+    if VERBOSE:
+        print("Found origin %s URL:" % verb, fetch_url)
+
+    # Workaround bug in urlparse on OSX
+    if parsed_url.scheme == "ssh" and parsed_url.path[:2] == "//":
+        hostname = parsed_url.path[2:].split("/")[0]
+
+    if "@" in hostname:
+        (username, hostname) = hostname.split("@")
+    if ":" in hostname:
+        (hostname, port) = hostname.split(":")
+
+    # Is origin an ssh location? Let's pull more info
+    if parsed_url.scheme == "ssh" and port is None:
+        port = 22
+
+    return (hostname, username, str(port), project_name)
+
+
+def check_color_support():
+    global _has_color
+    global _no_color_support
+    if _has_color is None:
+        test_command = "git log --color=never --oneline HEAD^1..HEAD"
+        (status, output) = run_command_status(test_command)
+        if status == 0:
+            _has_color = True
+        else:
+            _has_color = False
+            
+    if _no_color_support:
+      _has_color = False
+
+    return _has_color
+
+
+def get_config(config_file=None):
+    """Generate the configuration map by starting with some built-in defaults
+    and then loading GLOBAL_CONFIG, USER_CONFIG, and a repository-specific
+    .gitreview file, if they exist. In case of conflict, the configuration file
+    with the narrowest scope wins.
+    """
+    config = DEFAULTS.copy()
+    for filename in (GLOBAL_CONFIG, USER_CONFIG, config_file):
+        if filename is not None and os.path.exists(filename):
+            config.update(load_config_file(filename))
+    return config
+
+
+def load_config_file(config_file):
+    """Load configuration options from a file."""
+    configParser = ConfigParser.ConfigParser()
+    configParser.read(config_file)
+    options = {
+        'hostname': 'host',
+        'port': 'port',
+        'project': 'project',
+        'defaultbranch': 'defaultbranch',
+        'defaultremote': 'defaultremote',
+        'defaultrebase': 'defaultrebase',
+    }
+    config = {}
+    for config_key, option_name in options.items():
+        if configParser.has_option('gerrit', option_name):
+            config[config_key] = configParser.get('gerrit', option_name)
+    return config
+
+
+def update_remote(remote):
+    cmd = "git remote update %s" % remote
+    (status, output) = run_command_status(cmd)
+    if VERBOSE:
+        print(output)
+    if status != 0:
+        print("Problem running '%s'" % cmd)
+        if not VERBOSE:
+            print(output)
+        return False
+    return True
+
+
+def check_remote(branch, remote, hostname, port, project):
+    """Check that a Gerrit Git remote repo exists, if not, set one."""
+
+    has_color = check_color_support()
+    if has_color:
+        color_never = "--color=never"
+    else:
+        color_never = ""
+
+    if remote in run_command("git remote").split("\n"):
+
+        remotes = run_command("git branch -a %s" % color_never).split("\n")
+        for current_remote in remotes:
+            if (current_remote.strip() == "remotes/%s/%s" % (remote, branch)
+                    and not UPDATE):
+                return
+        # We have the remote, but aren't set up to fetch. Fix it
+        if VERBOSE:
+            print("Setting up gerrit branch tracking for better rebasing")
+        update_remote(remote)
+        return
+
+    if hostname is False or port is False or project is False:
+        # This means there was no .gitreview file
+        print("No '.gitreview' file found in this repository.")
+        print("We don't know where your gerrit is. Please manually create ")
+        print("a remote named \"%s\" and try again." % remote)
+        sys.exit(1)
+
+    # Gerrit remote not present, try to add it
+    try:
+        add_remote(hostname, port, project, remote)
+    except Exception:
+        print(sys.exc_info()[2])
+        print("We don't know where your gerrit is. Please manually create ")
+        print("a remote named \"%s\" and try again." % remote)
+        raise
+
+
+def rebase_changes(branch, remote, interactive=True):
+
+    remote_branch = "remotes/%s/%s" % (remote, branch)
+
+    if not update_remote(remote):
+        return False
+
+    if interactive:
+        cmd = "git rebase -i %s" % remote_branch
+    else:
+        cmd = "git rebase %s" % remote_branch
+
+    (status, output) = run_command_status(cmd, GIT_EDITOR='true')
+    if status != 0:
+        print("Errors running %s" % cmd)
+        if interactive:
+            print(output)
+        return False
+    return True
+
+
+def undo_rebase():
+    cmd = "git reset --hard ORIG_HEAD"
+    (status, output) = run_command_status(cmd)
+    if status != 0:
+        print("Errors running %s" % cmd)
+        print(output)
+        return False
+    return True
+
+
+def get_branch_name(target_branch):
+    global _branch_name
+    if _branch_name is not None:
+        return _branch_name
+    _branch_name = None
+    has_color = check_color_support()
+    if has_color:
+        color_never = "--color=never"
+    else:
+        color_never = ""
+    for branch in run_command("git branch %s" % color_never).split("\n"):
+        if branch.startswith('*'):
+            _branch_name = branch.split()[1].strip()
+    if _branch_name == "(no":
+        _branch_name = target_branch
+    return _branch_name
+
+
+def assert_one_change(remote, branch, yes, have_hook):
+    has_color = check_color_support()
+    if has_color:
+        color = git_config_get_value("color", "ui")
+        if color is None:
+            color = "auto"
+        else:
+            color = color.lower()
+        if (color == "" or color == "true"):
+            color = "auto"
+        elif color == "false":
+            color = "never"
+        elif color == "auto":
+            # Python is not a tty, we have to force colors
+            color = "always"
+        use_color = "--color=%s" % color
+    else:
+        use_color = ""
+    cmd = "git log %s --decorate --oneline HEAD --not remotes/%s/%s --" % (
+        use_color, remote, branch)
+    (status, output) = run_command_status(cmd)
+    if status != 0:
+        print("Had trouble running %s" % cmd)
+        print(output)
+        sys.exit(1)
+    output_lines = len(output.split("\n"))
+    if output_lines == 1 and not have_hook:
+        print("Your change was committed before the commit hook was installed")
+        print("Amending the commit to add a gerrit change id")
+        run_command("git commit --amend", GIT_EDITOR='true')
+    elif output_lines == 0:
+        print("No changes between HEAD and %s/%s." % (remote, branch))
+        print("Submitting for review would be pointless.")
+        sys.exit(1)
+    elif output_lines > 1:
+        if not yes:
+            print("You have more than one commit"
+                  " that you are about to submit.")
+            print("The outstanding commits are:\n\n%s\n" % output)
+            print("Is this really what you meant to do?")
+            yes_no = do_input("Type 'yes' to confirm: ")
+            if yes_no.lower().strip() != "yes":
+                print("Aborting.")
+                print("Please rebase/squash your changes and try again")
+                sys.exit(1)
+
+
+def use_topic(why, topic):
+    """Inform the user about why a particular topic has been selected."""
+    if VERBOSE:
+        print(why % ('"%s"' % topic,))
+    return topic
+
+
+def get_topic(target_branch):
+
+    branch_name = get_branch_name(target_branch)
+
+    branch_parts = branch_name.split("/")
+    if len(branch_parts) >= 3 and branch_parts[0] == "review":
+        return use_topic("Using change number %s "
+                         "for the topic of the change submitted",
+                         "/".join(branch_parts[2:]))
+
+    log_output = run_command("git log HEAD^1..HEAD")
+    bug_re = r'\b([Bb]ug|[Ll][Pp])\s*[#:]?\s*(\d+)'
+
+    match = re.search(bug_re, log_output)
+    if match is not None:
+        return use_topic("Using bug number %s "
+                         "for the topic of the change submitted",
+                         "bug/%s" % match.group(2))
+
+    bp_re = r'\b([Bb]lue[Pp]rint|[Bb][Pp])\s*[#:]?\s*([0-9a-zA-Z-_]+)'
+    match = re.search(bp_re, log_output)
+    if match is not None:
+        return use_topic("Using blueprint number %s "
+                         "for the topic of the change submitted",
+                         "bp/%s" % match.group(2))
+
+    return use_topic("Using local branch name %s "
+                     "for the topic of the change submitted",
+                     branch_name)
+
+
+class CannotQueryOpenChangesets(CommandFailed):
+    "Cannot fetch review information from gerrit"
+    EXIT_CODE = 32
+
+
+class CannotParseOpenChangesets(ChangeSetException):
+    "Cannot parse JSON review information from gerrit"
+    EXIT_CODE = 33
+
+
+def list_reviews(remote):
+
+    (hostname, username, port, project_name) = \
+        parse_git_show(remote, "Push")
+
+    if port is not None:
+        port = "-p %s" % port
+    else:
+        port = ""
+    if username is None:
+        userhost = hostname
+    else:
+        userhost = "%s@%s" % (username, hostname)
+
+    review_info = None
+    output = run_command_exc(
+        CannotQueryOpenChangesets,
+        "ssh", "-x", port, userhost,
+        "gerrit", "query",
+        "--current-patch-set --format=JSON project:%s status:open reviewer:self" % project_name)
+
+    review_list = []
+    review_field_width = {}
+    REVIEW_FIELDS = ('number', 'currentPatchSet', 'branch', 'subject')
+    FIELDS = range(0, len(REVIEW_FIELDS))
+    if check_color_support():
+        review_field_color = (colors.yellow, colors.yellow, colors.green, "")
+        color_reset = colors.reset
+    else:
+        review_field_color = ("", "", "", "")
+        color_reset = ""
+    review_field_width = [0, 0, 0, 0]
+    review_field_format = ["%*s", "%*s", "%*s", "%*s"]
+    review_field_justify = [+1, +1, +1, -1]  # -1 is justify to right
+
+    for line in output.split("\n"):
+        # Warnings from ssh wind up in this output
+        if line[0] != "{":
+            print(line)
+            continue
+        try:
+            review_info = json.loads(line)
+        except Exception:
+            if VERBOSE:
+                print(output)
+            raise(CannotParseOpenChangesets, sys.exc_info()[1])
+
+        if 'type' in review_info:
+            break
+
+        tempPS = review_info['currentPatchSet']
+        appPS = tempPS['approvals']
+        appValue = '-';
+        for appLine in appPS:
+          appBy = appLine['by']
+          appUser = appBy['username']
+          if appUser == username:
+            appValue = appLine['value']
+        review_info['currentPatchSet'] = tempPS['number'] + ' ' + appValue
+        
+        review_list.append([review_info[f] for f in REVIEW_FIELDS])
+        for i in FIELDS:
+            review_field_width[i] = max(
+                review_field_width[i],
+                len(review_info[REVIEW_FIELDS[i]])
+            )
+
+    review_field_format = "  ".join([
+        review_field_color[i] +
+        review_field_format[i] +
+        color_reset
+        for i in FIELDS])
+
+    review_field_width = [
+        review_field_width[i] * review_field_justify[i]
+        for i in FIELDS]
+    for review_value in review_list:
+        # At this point we have review_field_format
+        # like "%*s %*s %*s" and we need to supply
+        # (width1, value1, width2, value2, ...) tuple to print
+        # It's easy to zip() widths with actual values,
+        # but we need to flatten the resulting
+        #  ((width1, value1), (width2, value2), ...) map.
+        formatted_fields = []
+        for (width, value) in zip(review_field_width, review_value):
+            formatted_fields.extend([width, value])
+        print(review_field_format % tuple(formatted_fields))
+    print("Found %d items for review" % review_info['rowCount'])
+
+    return 0
+
+
+class CannotQueryPatchSet(CommandFailed):
+    "Cannot query patchset information"
+    EXIT_CODE = 34
+
+
+class ReviewInformationNotFound(ChangeSetException):
+    "Could not fetch review information for change %s"
+    EXIT_CODE = 35
+
+
+class ReviewNotFound(ChangeSetException):
+    "Gerrit review %s not found"
+    EXIT_CODE = 36
+
+
+class PatchSetGitFetchFailed(CommandFailed):
+    """Cannot fetch patchset contents
+
+Does specified change number belong to this project?
+"""
+    EXIT_CODE = 37
+
+
+class PatchSetNotFound(ChangeSetException):
+    "Review patchset %s not found"
+    EXIT_CODE = 38
+
+
+class CheckoutNewBranchFailed(CommandFailed):
+    "Cannot checkout to new branch"
+    EXIT_CODE = 64
+
+
+class CheckoutExistingBranchFailed(CommandFailed):
+    "Cannot checkout existing branch"
+    EXIT_CODE = 65
+
+
+class ResetHardFailed(CommandFailed):
+    "Failed to hard reset downloaded branch"
+    EXIT_CODE = 66
+
+
+def fetch_review(review, masterbranch, remote):
+
+    (hostname, username, port, project_name) = \
+        parse_git_show(remote, "Push")
+
+    if port is not None:
+        port = "-p %s" % port
+    else:
+        port = ""
+    if username is None:
+        userhost = hostname
+    else:
+        userhost = "%s@%s" % (username, hostname)
+
+    review_arg = review
+    patchset_opt = '--current-patch-set'
+
+    review, patchset_number = parse_review_number(review)
+    if patchset_number is not None:
+        patchset_opt = '--patch-sets'
+
+    review_info = None
+    output = run_command_exc(
+        CannotQueryPatchSet,
+        "ssh", "-x", port, userhost,
+        "gerrit", "query",
+        "--format=JSON %s change:%s" % (patchset_opt, review))
+
+    review_jsons = output.split("\n")
+    found_review = False
+    for review_json in review_jsons:
+        try:
+            review_info = json.loads(review_json)
+            found_review = True
+        except Exception:
+            pass
+        if found_review:
+            break
+    if not found_review:
+        if VERBOSE:
+            print(output)
+        raise ReviewInformationNotFound(review)
+
+    try:
+        if patchset_number is None:
+            refspec = review_info['currentPatchSet']['ref']
+        else:
+            refspec = [ps for ps
+                       in review_info['patchSets']
+                       if ps['number'] == patchset_number][0]['ref']
+    except IndexError:
+        raise PatchSetNotFound(review_arg)
+    except KeyError:
+        raise ReviewNotFound(review)
+
+    try:
+        topic = review_info['topic']
+        if topic == masterbranch:
+            topic = review
+    except KeyError:
+        topic = review
+    try:
+        author = re.sub('\W+', '_', review_info['owner']['name']).lower()
+    except KeyError:
+        author = 'unknown'
+
+    if patchset_number is None:
+        branch_name = "review/%s/%s" % (author, topic)
+    else:
+        branch_name = "review/%s/%s-patch%s" % (author, topic, patchset_number)
+
+    print("Downloading %s from gerrit" % refspec)
+    run_command_exc(PatchSetGitFetchFailed,
+                    "git", "fetch", remote, refspec)
+    return branch_name
+
+
+def checkout_review(branch_name):
+    """Checkout a newly fetched (FETCH_HEAD) change
+       into a branch
+    """
+
+    try:
+        run_command_exc(CheckoutNewBranchFailed,
+                        "git", "checkout", "-b",
+                        branch_name, "FETCH_HEAD")
+
+    except CheckoutNewBranchFailed as e:
+        if re.search("already exists\.?", e.output):
+            print("Branch already exists - reusing")
+            run_command_exc(CheckoutExistingBranchFailed,
+                            "git", "checkout", branch_name)
+            run_command_exc(ResetHardFailed,
+                            "git", "reset", "--hard", "FETCH_HEAD")
+        else:
+            raise
+
+    print("Switched to branch \"%s\"" % branch_name)
+
+
+class PatchSetGitCherrypickFailed(CommandFailed):
+    "There was a problem applying changeset contents to the current branch."
+    EXIT_CODE = 69
+
+
+def cherrypick_review(option=None):
+    cmd = ["git", "cherry-pick"]
+    if option:
+        cmd.append(option)
+    cmd.append("FETCH_HEAD")
+    print(run_command_exc(PatchSetGitCherrypickFailed, *cmd))
+
+
+class CheckoutBackExistingBranchFailed(CommandFailed):
+    "Cannot switch back to existing branch"
+    EXIT_CODE = 67
+
+
+class DeleteBranchFailed(CommandFailed):
+    "Failed to delete branch"
+    EXIT_CODE = 68
+
+
+class InvalidPatchsetsToCompare(GitReviewException):
+    def __init__(self, patchsetA, patchsetB):
+        Exception.__init__(
+            self,
+            "Invalid patchsets for comparison specified (old=%s,new=%s)" % (
+                patchsetA,
+                patchsetB))
+    EXIT_CODE = 39
+
+
+def compare_review(review_spec, branch, remote, rebase=False):
+    new_ps = None    # none means latest
+
+    if '-' in review_spec:
+        review_spec, new_ps = review_spec.split('-')
+    review, old_ps = parse_review_number(review_spec)
+
+    if old_ps is None or old_ps == new_ps:
+        raise InvalidPatchsetsToCompare(old_ps, new_ps)
+
+    old_review = build_review_number(review, old_ps)
+    new_review = build_review_number(review, new_ps)
+
+    old_branch = fetch_review(old_review, branch, remote)
+    checkout_review(old_branch)
+
+    if rebase:
+        print('Rebasing %s' % old_branch)
+        rebase = rebase_changes(branch, remote, False)
+        if not rebase:
+            print('Skipping rebase because of conflicts')
+            run_command_exc(CommandFailed, 'git', 'rebase', '--abort')
+
+    new_branch = fetch_review(new_review, branch, remote)
+    checkout_review(new_branch)
+
+    if rebase:
+        print('Rebasing also %s' % new_branch)
+        if not rebase_changes(branch, remote, False):
+            print("Rebasing of the new branch failed, "
+                  "diff can be messed up (use -R to not rebase at all)!")
+            run_command_exc(CommandFailed, 'git', 'rebase', '--abort')
+
+    subprocess.check_call(['git', 'difftool', old_branch])
+
+
+def finish_branch(target_branch):
+    local_branch = get_branch_name(target_branch)
+    if VERBOSE:
+        print("Switching back to '%s' and deleting '%s'" % (target_branch,
+                                                            local_branch))
+    run_command_exc(CheckoutBackExistingBranchFailed,
+                    "git", "checkout", target_branch)
+    print("Switched to branch '%s'" % target_branch)
+
+    run_command_exc(DeleteBranchFailed,
+                    "git", "branch", "-D", local_branch)
+    print("Deleted branch '%s'" % local_branch)
+
+
+def convert_bool(one_or_zero):
+    "Return a bool on a one or zero string."
+    return one_or_zero in ["1", "true", "True"]
+
+
+def print_exit_message(status, needs_update):
+
+    if needs_update:
+        print("""
+***********************************************************
+A new version of git-review is available on PyPI. Please
+update your copy with:
+
+  pip install -U git-review
+
+to ensure proper behavior with gerrit. Thanks!
+***********************************************************
+""")
+    sys.exit(status)
+
+
+def main():
+    global _no_color_support
+    usage = "git review [OPTIONS] ... [BRANCH]"
+
+    import argparse
+
+    class DownloadFlag(argparse.Action):
+        """Additional option parsing: store value in 'dest', but
+           at the same time set one of the flag options to True
+        """
+        def __call__(self, parser, namespace, values, option_string=None):
+            setattr(namespace, self.dest, values)
+            setattr(namespace, self.const, True)
+
+    parser = argparse.ArgumentParser(usage=usage, description=COPYRIGHT)
+
+    parser.add_argument("-t", "--topic", dest="topic",
+                        help="Topic to submit branch to")
+    parser.add_argument("-D", "--draft", dest="draft", action="store_true",
+                        help="Submit review as a draft")
+    parser.add_argument("-c", "--compatible", dest="compatible",
+                        action="store_true",
+                        help="Push change to refs/for/* for compatibility "
+                             "with Gerrit versions < 2.3. Ignored if "
+                             "-D/--draft is used.")
+    parser.add_argument("-n", "--dry-run", dest="dry", action="store_true",
+                        help="Don't actually submit the branch for review")
+    parser.add_argument("-i", "--new-changeid", dest="regenerate",
+                        action="store_true",
+                        help="Regenerate Change-id before submitting")
+    parser.add_argument("-r", "--remote", dest="remote",
+                        help="git remote to use for gerrit")
+    parser.add_argument("-R", "--no-rebase", dest="rebase",
+                        action="store_false",
+                        help="Don't rebase changes before submitting.")
+    parser.add_argument("-F", "--force-rebase", dest="force_rebase",
+                        action="store_true",
+                        help="Force rebase even when not needed.")
+    parser.add_argument("-B", "--no-color", dest="no_color_support",
+                        action="store_true",
+                        help="No color support.")
+                        
+
+    fetch = parser.add_mutually_exclusive_group()
+    fetch.set_defaults(download=False, compare=False, cherrypickcommit=False,
+                       cherrypickindicate=False, cherrypickonly=False)
+    fetch.add_argument("-d", "--download", dest="changeidentifier",
+                       action=DownloadFlag, metavar="CHANGE",
+                       const="download",
+                       help="Download the contents of an existing gerrit "
+                            "review into a branch")
+    fetch.add_argument("-x", "--cherrypick", dest="changeidentifier",
+                       action=DownloadFlag, metavar="CHANGE",
+                       const="cherrypickcommit",
+                       help="Apply the contents of an existing gerrit "
+                             "review onto the current branch and commit "
+                             "(cherry pick; not recommended in most "
+                             "situations)")
+    fetch.add_argument("-X", "--cherrypickindicate", dest="changeidentifier",
+                       action=DownloadFlag, metavar="CHANGE",
+                       const="cherrypickindicate",
+                       help="Apply the contents of an existing gerrit "
+                       "review onto the current branch and commit, "
+                       "indicating its origin")
+    fetch.add_argument("-N", "--cherrypickonly", dest="changeidentifier",
+                       action=DownloadFlag, metavar="CHANGE",
+                       const="cherrypickonly",
+                       help="Apply the contents of an existing gerrit "
+                       "review to the working directory and prepare "
+                       "for commit")
+    fetch.add_argument("-m", "--compare", dest="changeidentifier",
+                       action=DownloadFlag, metavar="CHANGE,PS[-NEW_PS]",
+                       const="compare",
+                       help="Download specified and latest (or NEW_PS) "
+                       "patchsets of an existing gerrit review into "
+                       "a branches, rebase on master "
+                       "(skipped on conflicts or when -R is specified) "
+                       "and show their differences")
+
+    parser.add_argument("-u", "--update", dest="update", action="store_true",
+                        help="Force updates from remote locations")
+    parser.add_argument("-s", "--setup", dest="setup", action="store_true",
+                        help="Just run the repo setup commands but don't "
+                             "submit anything")
+    parser.add_argument("-f", "--finish", dest="finish", action="store_true",
+                        help="Close down this branch and switch back to "
+                             "master on successful submission")
+    parser.add_argument("-l", "--list", dest="list", action="store_true",
+                        help="List available reviews for the current project")
+    parser.add_argument("-y", "--yes", dest="yes", action="store_true",
+                        help="Indicate that you do, in fact, understand if "
+                             "you are submitting more than one patch")
+    parser.add_argument("-v", "--verbose", dest="verbose", action="store_true",
+                        help="Output more information about what's going on")
+    parser.add_argument("--no-custom-script", dest="custom_script",
+                        action="store_false", default=True,
+                        help="Do not run custom scripts.")
+    parser.add_argument("--license", dest="license", action="store_true",
+                        help="Print the license and exit")
+    parser.add_argument("--version", action="version",
+                        version='%s version %s' %
+                        (os.path.split(sys.argv[0])[-1], version))
+    parser.add_argument("branch", nargs="?")
+
+    try:
+        (top_dir, git_dir) = git_directories()
+    except GitDirectoriesException:
+        if sys.argv[1:] in ([], ['-h'], ['--help']):
+            parser.print_help()
+            sys.exit(1)
+        raise
+
+#    config = get_config(os.path.join(top_dir, ".gitreview"))
+    config = DEFAULTS.copy()       
+    cur_proj = run_command("git remote -v")
+    import re
+    m = re.search('(?<=29418\/)(\S+)', cur_proj)
+    config['project'] = m.group(0) 
+
+    
+    defaultrebase = convert_bool(
+        git_config_get_value("gitreview", "rebase",
+                             default=str(config['defaultrebase'])))
+    parser.set_defaults(dry=False,
+                        draft=False,
+                        rebase=defaultrebase,
+                        verbose=False,
+                        update=False,
+                        setup=False,
+                        list=False,
+                        yes=False,
+                        branch=config['defaultbranch'],
+                        remote=config['defaultremote'])
+    options = parser.parse_args()
+
+    if options.license:
+        print(COPYRIGHT)
+        sys.exit(0)
+
+    branch = options.branch
+    global VERBOSE
+    global UPDATE
+    VERBOSE = options.verbose
+    UPDATE = options.update
+    remote = options.remote
+    yes = options.yes
+    status = 0
+
+    needs_update = latest_is_newer()
+    check_remote(branch, remote,
+                 config['hostname'], config['port'], config['project'])
+
+    if options.no_color_support:
+      _no_color_support = True
+
+    if options.changeidentifier:
+        if options.compare:
+            compare_review(options.changeidentifier,
+                           branch, remote, options.rebase)
+            return
+        local_branch = fetch_review(options.changeidentifier, branch, remote)
+        if options.download:
+            checkout_review(local_branch)
+        else:
+            if options.cherrypickcommit:
+                cherrypick_review()
+            elif options.cherrypickonly:
+                cherrypick_review("-n")
+            if options.cherrypickindicate:
+                cherrypick_review("-x")
+        return
+    elif options.list:
+        list_reviews(remote)
+        return
+
+    if options.custom_script:
+        run_custom_script("pre")
+
+    hook_file = os.path.join(git_dir, "hooks", "commit-msg")
+    have_hook = os.path.exists(hook_file) and os.access(hook_file, os.X_OK)
+
+    if not have_hook:
+        set_hooks_commit_msg(remote, hook_file)
+
+    if options.setup:
+        if options.finish and not options.dry:
+            finish_branch(branch)
+        return
+
+    if options.rebase:
+        if not rebase_changes(branch, remote):
+            print_exit_message(1, needs_update)
+        if not options.force_rebase and not undo_rebase():
+            print_exit_message(1, needs_update)
+    assert_one_change(remote, branch, yes, have_hook)
+
+    ref = "publish"
+
+    if options.draft:
+        ref = "drafts"
+        if options.custom_script:
+            run_custom_script("draft")
+    elif options.compatible:
+        ref = "for"
+
+    cmd = "git push %s HEAD:refs/%s/%s" % (remote, ref, branch)
+    topic = options.topic or get_topic(branch)
+    if topic != branch:
+        cmd += "/%s" % topic
+    if options.regenerate:
+        print("Amending the commit to regenerate the change id\n")
+        regenerate_cmd = "git commit --amend"
+        if options.dry:
+            print("\tGIT_EDITOR=\"sed -i -e '/^Change-Id:/d'\" %s\n" %
+                  regenerate_cmd)
+        else:
+            run_command(regenerate_cmd,
+                        GIT_EDITOR="sed -i -e "
+                        "'/^Change-Id:/d'")
+
+    if options.dry:
+        print("Please use the following command "
+              "to send your commits to review:\n")
+        print("\t%s\n" % cmd)
+    else:
+        (status, output) = run_command_status(cmd)
+        print(output)
+
+    if options.finish and not options.dry and status == 0:
+        finish_branch(branch)
+        return
+
+    if options.custom_script:
+        run_custom_script("post")
+    print_exit_message(status, needs_update)
+
+
+if __name__ == "__main__":
+    try:
+        main()
+    except GitReviewException as e:
+        print(e)
+        sys.exit(e.EXIT_CODE)
diff --git a/bin/rte.cmd b/bin/rte.cmd
deleted file mode 100644 (file)
index e87ab42..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-@echo off\r
-if "%1" == "-C" pushd "%2"\r
-call "c:\program files (x86)\python35-32\python.exe" bbrte_release\rte_release\rtepreproc.py --dryrun --testsonly --o _appbuild\r
-pushd _appbuild\alltestcases\r
-call "c:\programs\cmake\bin\cmake.exe" -G "Visual Studio 12 2013"\r
-popd\r
-popd\r
-pause\r