diff --git a/13.10-14.04-openjdk-7-jdk b/13.10-14.04-openjdk-7-jdk deleted file mode 100644 index d8e1205..0000000 --- a/13.10-14.04-openjdk-7-jdk +++ /dev/null @@ -1,110 +0,0 @@ -#!/bin/bash - -# -# Copyright 2013 - 2014, The MoKee OpenSource Project -# -# 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. -# - -export JOBS=`nproc`; - -if [[ ${1} = "--auto" ]]; then - export PARAM=-y - export SKIP=1 -else - export PARAM="" - export SKIP=0 -fi - -echo -echo "安装 JDK!" -echo -sudo apt-get update -sudo apt-get install openjdk-7-jdk -sudo update-alternatives --config java -sudo update-alternatives --config javac -cd ~/ - -echo -echo "安装 必要资源包!" -echo -sudo apt-get install git-core gnupg gcc-multilib g++-multilib \ -flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.8-dev \ -squashfs-tools build-essential zip curl libncurses5-dev \ -zlib1g-dev openjdk-6-jre openjdk-6-jdk pngcrush schedtool \ -libxml2 libxml2-utils xsltproc lzop libc6-dev schedtool \ -lib32z1-dev lib32ncurses5-dev lib32readline-gplv2-dev - -echo -echo "将终端快捷方式加入右键菜单!" -echo -sudo apt-get install nautilus-open-terminal -nautilus -q - -if [ ${SKIP} = 1 ]; then -echo "无人值守安装. 按任意键暂停..." -else -read -p "按回车键继续..." -fi - - -echo -echo "安装 Repo" -echo -if [ ! -d ~/bin ]; then - mkdir -p ~/bin -fi -cp -arf repo ~/bin/repo -chmod a+x ~/bin/repo - -echo -echo "安装 Hosts" -echo -sudo cp -arf hosts /etc/hosts - -echo "安装 ADB 驱动!" -echo -wget http://www.broodplank.net/51-android.rules -sudo mv -f 51-android.rules /etc/udev/rules.d/51-android.rules -sudo chmod 644 /etc/udev/rules.d/51-android.rules - -echo -echo "正在下载 Linux 64位 系统的Android SDK" - wget http://dl.google.com/android/adt/adt-bundle-linux-x86_64-20140702.zip -echo "下载完成!!" -echo "展开文件" - mkdir ~/adt-bundle - mv adt-bundle-linux-x86_64-20140702.zip ~/adt-bundle/adt_x64.zip - cd ~/adt-bundle - unzip adt_x64.zip - mv -f adt-bundle-linux-x86_64-20140702/* . -echo "正在配置" - echo -e '\n# Android tools\nexport PATH=${PATH}:~/adt-bundle/sdk/tools\nexport PATH=${PATH}:~/adt-bundle/sdk/platform-tools\nexport PATH=${PATH}:~/bin' >> ~/.bashrc - echo -e '\nPATH="$HOME/adt-bundle/sdk/tools:$HOME/adt-bundle/sdk/platform-tools:$PATH"' >> ~/.profile -echo "完成!!" - -clear - -echo -echo "清除临时文件..." -echo -rm -Rf ~/adt-bundle/adt-bundle-linux-x86_64-20140702 -rm -f ~/adt-bundle/adt_x64.zip - -echo -echo "完成!" -echo -echo "感谢使用本脚本!" -echo -read -p "按回车键退出..." -exit diff --git a/13.10-14.04-oracle-java7 b/13.10-14.04-oracle-java7 deleted file mode 100644 index ac24680..0000000 --- a/13.10-14.04-oracle-java7 +++ /dev/null @@ -1,109 +0,0 @@ -#!/bin/bash - -# -# Copyright 2013 - 2014, The MoKee OpenSource Project -# -# 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. -# - -export JOBS=`nproc`; - -if [[ ${1} = "--auto" ]]; then - export PARAM=-y - export SKIP=1 -else - export PARAM="" - export SKIP=0 -fi - -echo -echo "安装 JDK!" -echo -sudo add-apt-repository ppa:webupd8team/java -sudo apt-get update -sudo apt-get install oracle-java7-installer -cd ~/ - -echo -echo "安装 必要资源包!" -echo -sudo apt-get install git-core gnupg gcc-multilib g++-multilib \ -flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.8-dev \ -squashfs-tools build-essential zip curl libncurses5-dev \ -zlib1g-dev openjdk-6-jre openjdk-6-jdk pngcrush schedtool \ -libxml2 libxml2-utils xsltproc lzop libc6-dev schedtool \ -lib32z1-dev lib32ncurses5-dev lib32readline-gplv2-dev - -echo -echo "将终端快捷方式加入右键菜单!" -echo -sudo apt-get install nautilus-open-terminal -nautilus -q - -if [ ${SKIP} = 1 ]; then -echo "无人值守安装. 按任意键暂停..." -else -read -p "按回车键继续..." -fi - -echo -echo "安装 Repo" -echo -if [ ! -d ~/bin ]; then - mkdir -p ~/bin -fi -cp -arf repo ~/bin/repo -chmod a+x ~/bin/repo - -echo -echo "安装 Hosts" -echo -sudo cp -arf hosts /etc/hosts - - -echo "安装 ADB 驱动!" -echo -wget http://www.broodplank.net/51-android.rules -sudo mv -f 51-android.rules /etc/udev/rules.d/51-android.rules -sudo chmod 644 /etc/udev/rules.d/51-android.rules - -echo -echo "正在下载 Linux 64位 系统的Android SDK" - wget http://dl.google.com/android/adt/adt-bundle-linux-x86_64-20140702.zip -echo "下载完成!!" -echo "展开文件" - mkdir ~/adt-bundle - mv adt-bundle-linux-x86_64-20140702.zip ~/adt-bundle/adt_x64.zip - cd ~/adt-bundle - unzip adt_x64.zip - mv -f adt-bundle-linux-x86_64-20140702/* . -echo "正在配置" - echo -e '\n# Android tools\nexport PATH=${PATH}:~/adt-bundle/sdk/tools\nexport PATH=${PATH}:~/adt-bundle/sdk/platform-tools\nexport PATH=${PATH}:~/bin' >> ~/.bashrc - echo -e '\nPATH="$HOME/adt-bundle/sdk/tools:$HOME/adt-bundle/sdk/platform-tools:$PATH"' >> ~/.profile -echo "完成!!" - -clear - -echo -echo "清除临时文件..." -echo -rm -Rf ~/adt-bundle/adt-bundle-linux-x86_64-20140702 -rm -f ~/adt-bundle/adt_x64.zip - -echo -echo "完成!" -echo -echo "感谢使用本脚本!" -echo -read -p "按回车键退出..." -exit diff --git a/auto.sh b/auto.sh index d3d03c3..8dc295c 100644 --- a/auto.sh +++ b/auto.sh @@ -1,5 +1,21 @@ #!/bin/bash +# +# Copyright 2013 - 2014, The MoKee OpenSource Project +# +# 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. +# + export JOBS=`nproc`; if [[ ${1} = "--auto" ]]; then @@ -10,180 +26,32 @@ else export SKIP=0 fi -echo " 安卓开发环境自动配置脚本 " -echo "作者:Ruling." - -clear - -echo -echo "进行系统更新" -echo -sudo apt-get update - -clear - -echo -echo "进入下载目录" -echo -if [ ! -d ~/Downloads ]; then - mkdir -p ~/Downloads -fi -cd ~/Downloads - -if [ ${SKIP} = 1 ]; then -echo "无人值守安装. 按任意键暂停..." -else -read -p "按回车键继续..." -fi - -clear - -echo -echo "安装 Python!" -echo -sudo apt-get install build-essential gcc $PARAM -wget http://www.python.org/ftp/python/3.3.2/Python-3.3.2.tgz -tar -xvzf Python-3.3.2.tgz -cd ~/Downloads/Python-3.3.2 -./configure --prefix=/usr/local/python3.3 -make -j${JOBS} -sudo make install -j${JOBS} -sudo ln -s /usr/local/python3.3/bin/python /usr/bin/python3.3 -cd ~/Downloads - -if [ ${SKIP} = 1 ]; then - echo "无人值守安装. 按任意键暂停..." -else - read -p "按回车键继续..." -fi - -clear - -echo -echo "安装 CCache!" -echo -wget http://www.samba.org/ftp/ccache/ccache-3.1.9.tar.gz -tar -xvzf ccache-3.1.9.tar.gz -cd ~/Downloads/ccache-3.1.9 -./configure -make -j${JOBS} -sudo make install -j${JOBS} -echo "export USE_CCACHE=1" >> ~/.bashrc -ccache -M 25G -cd ~/Downloads - -if [ ${SKIP} = 1 ]; then -echo "无人值守安装. 按任意键暂停..." -else -read -p "按回车键继续..." -fi - -clear - -echo -echo "安装 GNU Make!" -echo -wget http://ftp.gnu.org/gnu/make/make-3.82.tar.gz -tar -xvzf make-3.82.tar.gz -cd ~/Downloads/make-3.82 -./configure -sudo make install -j${JOBS} -cd ~/ - -if [ ${SKIP} = 1 ]; then -echo "无人值守安装. 按任意键暂停..." -else -read -p "按回车键继续..." -fi - -clear - -echo -echo "安装 JDK 6!" -echo -wget --no-check-certificate --no-cookies --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" "http://download.oracle.com/otn-pub/java/jdk/6u45-b06/jdk-6u45-linux-x64.bin" -chmod +x jdk-6u45-linux-x64.bin -sudo ./jdk-6u45-linux-x64.bin -sudo mkdir /usr/lib/jvm -sudo mv jdk1.6.0_45 /usr/lib/jvm/ -sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_45/bin/java 1 -sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_45/bin/javac 1 -sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.6.0_45/bin/javaws 1 -sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.6.0_45/bin/jar 1 -sudo update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/jdk1.6.0_45/bin/javadoc 1 -java -version -cd ~/ - -if [ ${SKIP} = 1 ]; then -echo "无人值守安装. 按任意键暂停..." -else -read -p "按回车键继续..." -fi - -clear - -echo -echo "安装其他要求资源包!" -echo +echo "正在配置" sudo apt-get update -sudo apt-get install git gnupg flex bison gperf build-essential \ -zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \ -libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \ -libgl1-mesa-dev g++-multilib mingw32 tofrodos \ -python-markdown libxml2-utils xsltproc zlib1g-dev:i386 \ -android-tools-adb android-tools-fastboot libcloog-isl-dev \ -texinfo gcc-multilib schedtool libxml2-utils libxml2 $PARAM +sudo apt-get install git-core gnupg gcc-multilib g++-multilib \ +flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.8-dev \ +squashfs-tools build-essential zip curl libncurses5-dev \ +zlib1g-dev openjdk-6-jre openjdk-6-jdk pngcrush schedtool \ +libxml2 libxml2-utils xsltproc lzop libc6-dev schedtool \ +lib32z1-dev lib32ncurses5-dev lib32readline-gplv2-dev lib32bz2-1.0 -sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so - -if [ ${SKIP} = 1 ]; then -echo "无人值守安装. 按任意键暂停..." -else -read -p "按回车键继续..." -fi +sudo apt-get install openjdk-7-jdk +sudo update-alternatives --config java +sudo update-alternatives --config javac -clear - -echo -echo "将终端快捷方式加入右键菜单!" -echo -sudo apt-get install nautilus-open-terminal $PARAM -nautilus -q - -echo -echo "安装 GIT!" -echo -sudo apt-get install git $PARAM - -echo echo "安装 Repo" -echo if [ ! -d ~/bin ]; then mkdir -p ~/bin fi -cp -arf repo ~/bin/repo +curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo -echo -echo "安装 Hosts" -echo -sudo cp -arf hosts /etc/hosts - -echo echo "安装 ADB 驱动!" echo wget http://www.broodplank.net/51-android.rules sudo mv -f 51-android.rules /etc/udev/rules.d/51-android.rules sudo chmod 644 /etc/udev/rules.d/51-android.rules -echo -echo "下载和配置 Android SDK!!" -echo "请确保 unzip 已经安装" -echo -sudo apt-get install unzip $PARAM - -if [ `getconf LONG_BIT` = "64" ] -then echo echo "正在下载 Linux 64位 系统的Android SDK" wget http://dl.google.com/android/adt/adt-bundle-linux-x86_64-20140702.zip @@ -198,69 +66,14 @@ echo "正在配置" echo -e '\n# Android tools\nexport PATH=${PATH}:~/adt-bundle/sdk/tools\nexport PATH=${PATH}:~/adt-bundle/sdk/platform-tools\nexport PATH=${PATH}:~/bin' >> ~/.bashrc echo -e '\nPATH="$HOME/adt-bundle/sdk/tools:$HOME/adt-bundle/sdk/platform-tools:$PATH"' >> ~/.profile echo "完成!!" -else - -echo -echo "正在下载 Linux 32位 系统的Android SDK" - wget http://dl.google.com/android/adt/adt-bundle-linux-x86-20140702.zip -echo "下载完成!!" -echo "展开文件" - mkdir ~/adt-bundle - mv adt-bundle-linux-x86-20140702.zip ~/adt-bundle/adt_x86.zip - cd ~/adt-bundle - unzip adt_x86.zip - mv -f adt-bundle-linux-x86_64-20140702/* . -echo "正在配置" - echo -e '\n# Android tools\nexport PATH=${PATH}:~/adt-bundle/sdk/tools\nexport PATH=${PATH}:~/adt-bundle/sdk/platform-tools\nexport PATH=${PATH}:~/bin' >> ~/.bashrc - echo -e '\nPATH="$HOME/adt-bundle/sdk/tools:$HOME/adt-bundle/sdk/platform-tools:$PATH"' >> ~/.profile -echo "完成!!" -fi - -if [ ${SKIP} = 1 ]; then -echo "无人值守安装. 按任意键暂停..." -else -read -p "按回车键继续..." -fi - -clear - -echo -echo "安装 安卓厨房" -echo -cd ~/Downloads -wget https://github.com/dsixda/Android-Kitchen/archive/master.zip -unzip master.zip -mv -f Android-Kitchen-master ~/Android-Kitchen -echo -e '\n#!/bin/bash\ncd ~/Android-Kitchen\n./menu' >> ~/Android-Kitchen/kitchen -chmod 755 ~/Android-Kitchen/kitchen -ln -s ~/Android-Kitchen/kitchen ~/bin/kitchen -ln -s ~/Android-Kitchen/kitchen ~/桌面/安卓厨房 - -if [ ${SKIP} = 1 ]; then -echo "无人值守安装. 按任意键暂停..." -else -read -p "按回车键继续..." -fi clear echo echo "清除临时文件..." echo -rm -f ~/Downloads/Python-3.3.2.tgz -sudo rm -rf ~/Downloads/Python-3.3.2 -rm -f ~/Downloads/make-3.82.tar.gz -rm -Rf ~/Downloads/make-3.82 -rm -f ~/jdk-6u45-linux-x64.bin -rm -f ~/Downloads/ccache-3.1.9.tar.gz -rm -Rf ~/Downloads/ccache-3.1.9 rm -Rf ~/adt-bundle/adt-bundle-linux-x86_64-20140702 -rm -Rf ~/adt-bundle/adt-bundle-linux-x86-20140702 rm -f ~/adt-bundle/adt_x64.zip -rm -f ~/adt-bundle/adt_x86.zip -rm -f ~/Downloads/master.zip - -clear echo echo "完成!" diff --git a/hosts b/hosts deleted file mode 100644 index 3ddbe54..0000000 --- a/hosts +++ /dev/null @@ -1,780 +0,0 @@ -127.0.0.1 localhost -127.0.1.1 nian-virtual-machine - -# The following lines are desirable for IPv6 capable hosts -::1 ip6-localhost ip6-loopback -fe00::0 ip6-localnet -ff00::0 ip6-mcastprefix -ff02::1 ip6-allnodes -ff02::2 ip6-allrouters - - #Google Services START -#GoogleAccounts↓ -64.233.168.84 accounts.google.com -64.233.168.84 accounts.l.google.com -#GoogleAccounts↑ -#www.google.com↓ -64.233.168.106 www.google.com -#www.google.com↑ -#Googleapis↓ -210.242.125.98 mt0.googleapis.com -210.242.125.98 mt1.googleapis.com -210.242.125.98 mt2.googleapis.com -210.242.125.98 mt3.googleapis.com -210.242.125.98 mts0.googleapis.com -210.242.125.98 mts1.googleapis.com -210.242.125.98 mts2.googleapis.com -210.242.125.98 mts3.googleapis.com -210.242.125.98 googleapis.com -64.233.168.95 www.googleapis.com -64.233.168.95 android.googleapis.com -64.233.168.95 play.googleapis.com -64.233.168.95 ajax.googleapis.com -64.233.168.95 chart.googleapis.com -64.233.168.95 fonts.googleapis.com -64.233.168.95 redirector-bigcache.googleapis.com -64.233.168.95 translate.googleapis.com -64.233.168.95 maps.googleapis.com -64.233.168.95 content.googleapis.com -64.233.168.95 googleapis.l.google.com -64.233.168.95 doc-0a9v4-0agdq-s-googleusercontent.commondatastorage.googleapis.com -#Googleapis↑ -#Android↓ -#74.125.235.165 android-china.l.google.com -#74.125.235.165 www-china.l.google.com -#74.125.235.165 www1-china.l.google.com -#74.125.235.165 www2-china.l.google.com -#74.125.235.165 www3-china.l.google.com -#74.125.235.165 www4-china.l.google.com -74.125.207.113 android.clients.google.com -74.125.207.113 android.l.google.com -74.125.207.132 googlehosted.l.google.com -210.242.125.98 base0.googlehosted.com -210.242.125.98 base1.googlehosted.com -210.242.125.98 base2.googlehosted.com -210.242.125.98 base3.googlehosted.com -210.242.125.98 base4.googlehosted.com -210.242.125.98 base5.googlehosted.com -210.242.125.98 clients.l.google.com -210.242.125.98 clients1.google.com -210.242.125.98 clients2.google.com -210.242.125.98 clients3.google.com -74.125.207.139 clients4.google.com -74.125.207.139 clients5.google.com -74.125.207.139 clients6.google.com -74.125.207.139 clients7.google.com -74.125.207.189 0.client-channel.google.com -74.125.207.189 1.client-channel.google.com -74.125.207.189 2.client-channel.google.com -74.125.207.189 3.client-channel.google.com -74.125.207.189 4.client-channel.google.com -74.125.207.189 5.client-channel.google.com -74.125.207.189 6.client-channel.google.com -74.125.207.189 7.client-channel.google.com -74.125.207.189 8.client-channel.google.com -74.125.207.189 9.client-channel.google.com -64.233.168.188 mtalk.google.com -64.233.168.125 talk.google.com -64.233.168.125 talkx.l.google.com -64.233.168.125 talk.l.google.com -64.233.168.211 proxy.googlezip.net -64.233.168.211 ext.google.com -#Android↑ -#Youtube↓ -74.125.207.113 accounts.youtube.com -64.233.168.100 www.youtube.com -64.233.168.100 m.youtube.com -64.233.168.100 insight.youtube.com -#64.233.168.100 apiblog.youtube.com -64.233.168.100 help.youtube.com -74.125.207.113 i.ytimg.com -74.125.207.113 i1.ytimg.com -74.125.207.113 i2.ytimg.com -74.125.207.113 i3.ytimg.com -74.125.207.113 i4.ytimg.com -74.125.207.113 s.ytimg.com -74.125.207.113 ytimg.l.google.com -#Youtube↑ -#UpLoad↓ -74.125.207.113 uploads.clients.google.com -74.125.207.113 uploads.client.google.com -74.125.207.113 upload.clients.google.com -74.125.207.113 upload.client.google.com -74.125.207.117 upload.google.com -74.125.207.117 upload.docs.google.com -74.125.207.117 upload.drive.google.com -74.125.207.117 upload.video.google.com -74.125.207.117 upload.youtube.com -74.125.207.117 uploads.stage.gdata.youtube.com -74.125.207.117 uploads.code.google.com -74.125.207.117 uploads.clients.google.com -#UpLoad↑ -#Appspot↓ -64.233.185.141 www.appspot.com -64.233.185.141 appspot.com -64.233.185.141 betaspike.appspot.com -64.233.185.141 chrome-devtools-frontend.appspot.com -64.233.185.141 chrometophone.appspot.com -64.233.185.141 evolutionofweb.appspot.com -64.233.185.141 feedly-beta.appspot.com -64.233.185.141 googcloudlabs.appspot.com -64.233.185.141 gv-gadget.appspot.com -64.233.185.141 lfe-alpo-gm.appspot.com -64.233.185.141 m-dot-betaspike.appspot.com -64.233.185.141 magnifier.blogspot.com -64.233.185.141 moderator.appspot.com -64.233.185.141 newsfeed-dot-latest-dot-rovio-ad-engine.appspot.com -64.233.185.141 productideas.appspot.com -64.233.185.141 project-slingshot-gp.appspot.com -64.233.185.141 r2303.latest.project-slingshot-hr.appspot.com -64.233.185.141 r3085-dot-latest-dot-project-slingshot-gp.appspot.com -64.233.185.141 r3091-dot-latest-dot-project-slingshot-gp.appspot.com -64.233.185.141 r3101-dot-latest-dot-project-slingshot-gp.appspot.com -64.233.185.141 r3269-dot-latest-dot-project-slingshot-gp.appspot.com -64.233.185.141 r3432-dot-latest-dot-project-slingshot-hr.appspot.com -64.233.185.141 r4681-dot-latest-dot-project-slingshot-hr.appspot.com -64.233.185.141 r7647-dot-latest-dot-project-slingshot-hr.appspot.com -64.233.185.141 wcproxyx.appspot.com -#Appspot↑ -#GoogleDrive↓ -64.233.185.102 drive.google.com -64.233.185.101 docs.google.com -74.125.207.132 googledrive.com -74.125.207.132 storage.googleapis.com -74.125.207.132 commondatastorage.googleapis.com -74.125.207.132 static.panoramio.com.storage.googleapis.com -#203.208.46.134 docs0.google.com -#203.208.46.134 docs1.google.com -#203.208.46.134 docs2.google.com -#203.208.46.134 docs3.google.com -#203.208.46.134 docs4.google.com -#203.208.46.134 docs5.google.com -#203.208.46.134 docs6.google.com -#203.208.46.134 docs7.google.com -#203.208.46.134 docs8.google.com -#203.208.46.134 docs9.google.com -74.125.207.189 0.docs.google.com -74.125.207.189 0.drive.google.com -74.125.207.189 1.docs.google.com -74.125.207.189 1.drive.google.com -74.125.207.189 2.docs.google.com -74.125.207.189 2.drive.google.com -74.125.207.189 3.docs.google.com -74.125.207.189 3.drive.google.com -74.125.207.189 4.docs.google.com -74.125.207.189 4.drive.google.com -74.125.207.189 5.docs.google.com -74.125.207.189 5.drive.google.com -74.125.207.189 6.docs.google.com -74.125.207.189 6.drive.google.com -74.125.207.189 7.docs.google.com -74.125.207.189 7.drive.google.com -74.125.207.189 8.docs.google.com -74.125.207.189 8.drive.google.com -74.125.207.189 9.docs.google.com -74.125.207.189 9.drive.google.com -74.125.207.189 10.docs.google.com -74.125.207.189 10.drive.google.com -74.125.207.189 11.docs.google.com -74.125.207.189 11.drive.google.com -74.125.207.189 12.docs.google.com -74.125.207.189 12.drive.google.com -74.125.207.189 13.docs.google.com -74.125.207.189 13.drive.google.com -74.125.207.189 14.docs.google.com -74.125.207.189 14.drive.google.com -74.125.207.189 15.docs.google.com -74.125.207.189 15.drive.google.com -74.125.207.189 16.docs.google.com -74.125.207.189 16.drive.google.com -#GoogleDrive↑ -#Googleusercontent↓ -74.125.207.132 www.googleusercontent.com -74.125.207.132 googlehosted.l.googleusercontent.com -74.125.207.132 oauth.googleusercontent.com -74.125.207.132 mail-attachment.googleusercontent.com -74.125.207.132 translate.googleusercontent.com -74.125.207.132 themes.googleusercontent.com -74.125.207.132 webcache.googleusercontent.com -74.125.207.132 books.googleusercontent.com -74.125.207.132 music.googleusercontent.com -74.125.207.132 video.googleusercontent.com -74.125.207.132 music-onebox.googleusercontent.com -74.125.207.132 blogger.googleusercontent.com -74.125.207.132 code-opensocial.googleusercontent.com -74.125.207.132 spreadsheets-opensocial.googleusercontent.com -74.125.207.132 www-calENDar-opensocial.googleusercontent.com -74.125.207.132 www-fc-opensocial.googleusercontent.com -74.125.207.132 www-focus-opensocial.googleusercontent.com -74.125.207.132 www-gm-opensocial.googleusercontent.com -74.125.207.132 www-kix-opensocial.googleusercontent.com -74.125.207.132 www-open-opensocial.googleusercontent.com -74.125.207.132 www-opensocial.googleusercontent.com -74.125.207.132 www-opensocial-sandbox.googleusercontent.com -74.125.207.132 www-oz-opensocial.googleusercontent.com -74.125.207.132 1-ps.googleusercontent.com -74.125.207.132 2-ps.googleusercontent.com -74.125.207.132 3-ps.googleusercontent.com -74.125.207.132 4-ps.googleusercontent.com -74.125.207.132 0-open-opensocial.googleusercontent.com -74.125.207.132 0-focus-opensocial.googleusercontent.com -74.125.207.132 1-focus-opensocial.googleusercontent.com -74.125.207.132 1-open-opensocial.googleusercontent.com -74.125.207.132 2-focus-opensocial.googleusercontent.com -74.125.207.132 2-open-opensocial.googleusercontent.com -74.125.207.132 3-focus-opensocial.googleusercontent.com -74.125.207.132 3-open-opensocial.googleusercontent.com -74.125.207.132 a-oz-opensocial.googleusercontent.com -74.125.207.132 4fjvqid3r3oq66t548clrdj52df15coc-a-oz-opensocial.googleusercontent.com -74.125.207.132 53rd6p0catml6vat6qra84rs0del836d-a-oz-opensocial.googleusercontent.com -74.125.207.132 59cbv4l9s05pbaks9v77vc3mengeqors-a-oz-opensocial.googleusercontent.com -74.125.207.132 8kubpeu8314p2efdd7jlv09an9i2ljdo-a-oz-opensocial.googleusercontent.com -74.125.207.132 adstvca8k2ooaknjjmv89j22n9t676ve-a-oz-opensocial.googleusercontent.com -74.125.207.132 bt26mravu2qpe56n8gnmjnpv2inl84bf-a-oz-opensocial.googleusercontent.com -74.125.207.132 debh8vg7vd93bco3prdajidmm7dhql3f-a-oz-opensocial.googleusercontent.com -74.125.207.132 hsco54a20sh11q9jkmb51ad2n3hmkmrg-a-oz-opensocial.googleusercontent.com -74.125.207.132 k6v18tjr24doa89b55o3na41kn4v73eb-a-oz-opensocial.googleusercontent.com -74.125.207.132 i8brh95qor6r54nkl52hidj2ggcs4jgm-a-oz-opensocial.googleusercontent.com -74.125.207.132 ob7f2qc0i50kbjnc81vkhgmb5hsv7a8l-a-oz-opensocial.googleusercontent.com -74.125.207.132 qhie5b8u979rnch1q0hqbrmbkn9estf7-a-oz-opensocial.googleusercontent.com -#74.125.207.132 r70rmsn4s0rhk6cehcbbcbfbs31pu0va-a-oz-opensocial.googleusercontent.com -#74.125.207.132 rbjhe237k979f79d87gmenp3gejfonu9-a-oz-opensocial.googleusercontent.com -74.125.207.132 u807isd5egseeabjccgcns005p2miucq-a-oz-opensocial.googleusercontent.com -74.125.207.132 upt14k1i2veesusrda9nfotcrbp9d7p5-a-oz-opensocial.googleusercontent.com -74.125.207.132 4lam9a1ki27mb9p1h5q3furvvf58ss02-a-gm-opensocial.googleusercontent.com -74.125.207.132 ode25pfjgmvpquh3b1oqo31ti5ibg5fr-a-calENDar.opensocial.googleusercontent.com -74.125.207.132 3hdrrlnlknhi77nrmsjnjr152ueo3soc-a-calENDar-opensocial.googleusercontent.com -74.125.207.132 clients1.googleusercontent.com -74.125.207.132 clients2.googleusercontent.com -74.125.207.132 clients3.googleusercontent.com -74.125.207.132 clients4.googleusercontent.com -74.125.207.132 clients5.googleusercontent.com -74.125.207.132 clients6.googleusercontent.com -74.125.207.132 clients7.googleusercontent.com -#74.125.207.132 doc-00-7o-docs.googleusercontent.com -#74.125.207.132 doc-08-7o-docs.googleusercontent.com -#74.125.207.132 doc-0c-7o-docs.googleusercontent.com -#74.125.207.132 doc-0g-7o-docs.googleusercontent.com -#74.125.207.132 doc-0s-7o-docs.googleusercontent.com -#74.125.207.132 doc-10-7o-docs.googleusercontent.com -#74.125.207.132 doc-14-7o-docs.googleusercontent.com -#74.125.207.132 doc-00-bc-docs.googleusercontent.com -#74.125.207.132 doc-01-bc-docs.googleusercontent.com -#74.125.207.132 doc-02-bc-docs.googleusercontent.com -#74.125.207.132 doc-03-bc-docs.googleusercontent.com -#74.125.207.132 doc-04-bc-docs.googleusercontent.com -#74.125.207.132 doc-05-bc-docs.googleusercontent.com -#74.125.207.132 doc-06-bc-docs.googleusercontent.com -#74.125.207.132 doc-0c-bc-docs.googleusercontent.com -#74.125.207.132 doc-0k-bc-docs.googleusercontent.com -#74.125.207.132 doc-0k-1s-docs.googleusercontent.com -#74.125.207.132 doc-14-bc-docs.googleusercontent.com -#74.125.207.132 t.doc-0-0-sj.sj.googleusercontent.com -74.125.207.132 feedback.googleusercontent.com -74.125.207.132 images1-focus-opensocial.googleusercontent.com -74.125.207.132 images2-focus-opensocial.googleusercontent.com -74.125.207.132 images3-focus-opensocial.googleusercontent.com -74.125.207.132 images4-focus-opensocial.googleusercontent.com -74.125.207.132 images5-focus-opensocial.googleusercontent.com -74.125.207.132 images6-focus-opensocial.googleusercontent.com -74.125.207.132 images7-focus-opensocial.googleusercontent.com -74.125.207.132 images8-focus-opensocial.googleusercontent.com -74.125.207.132 images9-focus-opensocial.googleusercontent.com -74.125.207.132 images1-esmobile-opensocial.googleusercontent.com -74.125.207.132 images2-esmobile-opensocial.googleusercontent.com -74.125.207.132 images3-esmobile-opensocial.googleusercontent.com -74.125.207.132 images4-esmobile-opensocial.googleusercontent.com -74.125.207.132 images5-esmobile-opensocial.googleusercontent.com -74.125.207.132 images6-esmobile-opensocial.googleusercontent.com -74.125.207.132 images7-esmobile-opensocial.googleusercontent.com -74.125.207.132 images8-esmobile-opensocial.googleusercontent.com -74.125.207.132 images9-esmobile-opensocial.googleusercontent.com -74.125.207.132 images-docs-opensocial.googleusercontent.com -74.125.207.132 images-oz-opensocial.googleusercontent.com -74.125.207.132 images-lso-opensocial.googleusercontent.com -74.125.207.132 images-blogger-opensocial.googleusercontent.com -74.125.207.132 lh0.googleusercontent.com -74.125.207.132 lh1.googleusercontent.com -74.125.207.132 lh2.googleusercontent.com -74.125.207.132 lh3.googleusercontent.com -74.125.207.132 lh4.googleusercontent.com -74.125.207.132 lh5.googleusercontent.com -74.125.207.132 lh6.googleusercontent.com -74.125.207.132 lh0.ggpht.com -74.125.207.132 lh1.ggpht.com -74.125.207.132 lh2.ggpht.com -74.125.207.132 lh3.ggpht.com -74.125.207.132 lh4.ggpht.com -74.125.207.132 lh5.ggpht.com -74.125.207.132 lh6.ggpht.com -74.125.207.132 nt0.ggpht.com -74.125.207.132 nt1.ggpht.com -74.125.207.132 nt2.ggpht.com -74.125.207.132 nt3.ggpht.com -74.125.207.132 nt4.ggpht.com -74.125.207.132 nt5.ggpht.com -74.125.207.132 nt6.ggpht.com -74.125.207.132 yt0.ggpht.com -74.125.207.132 yt1.ggpht.com -74.125.207.132 yt2.ggpht.com -74.125.207.132 yt3.ggpht.com -74.125.207.132 yt4.ggpht.com -74.125.207.132 yt5.ggpht.com -74.125.207.132 yt6.ggpht.com -74.125.207.132 gm0.ggpht.com -74.125.207.132 gm1.ggpht.com -74.125.207.132 gm2.ggpht.com -74.125.207.132 gm3.ggpht.com -74.125.207.132 gm4.ggpht.com -74.125.207.132 gm5.ggpht.com -74.125.207.132 gm6.ggpht.com -64.233.185.132 geo0.ggpht.com -64.233.185.132 geo1.ggpht.com -64.233.185.132 geo2.ggpht.com -64.233.185.132 geo3.ggpht.com -64.233.185.132 geo4.ggpht.com -64.233.185.132 geo5.ggpht.com -64.233.185.132 geo6.ggpht.com -74.125.207.132 ci1.googleusercontent.com -74.125.207.132 ci2.googleusercontent.com -74.125.207.132 ci3.googleusercontent.com -74.125.207.132 ci4.googleusercontent.com -74.125.207.132 ci5.googleusercontent.com -74.125.207.132 ci6.googleusercontent.com -74.125.207.132 s1.googleusercontent.com -74.125.207.132 s2.googleusercontent.com -74.125.207.132 s3.googleusercontent.com -74.125.207.132 s4.googleusercontent.com -74.125.207.132 s5.googleusercontent.com -74.125.207.132 s6.googleusercontent.com -64.233.185.133 sp0.googleusercontent.com -64.233.185.133 sp1.googleusercontent.com -64.233.185.133 sp2.googleusercontent.com -64.233.185.133 sp3.googleusercontent.com -64.233.185.133 sp4.googleusercontent.com -64.233.185.133 sp5.googleusercontent.com -64.233.185.133 sp6.googleusercontent.com -64.233.185.133 sp7.googleusercontent.com -64.233.185.133 sp8.googleusercontent.com -64.233.185.133 sp9.googleusercontent.com -#Googleusercontent↑ -#Gstatic↓ -64.233.185.94 www.gstatic.com -64.233.185.94 ssl.gstatic.com -64.233.185.120 csi.gstatic.com -64.233.185.94 csi.l.google.com -64.233.185.120 maps.gstatic.com -64.233.185.120 fonts.gstatic.com -64.233.185.120 encrypted-tbn0.gstatic.com -64.233.185.120 encrypted-tbn1.gstatic.com -64.233.185.120 encrypted-tbn2.gstatic.com -64.233.185.120 encrypted-tbn3.gstatic.com -64.233.185.120 encrypted-tbn4.gstatic.com -64.233.185.120 encrypted-tbn5.gstatic.com -64.233.185.120 encrypted-tbn6.gstatic.com -64.233.185.120 g0.gstatic.com -64.233.185.120 g1.gstatic.com -64.233.185.120 g2.gstatic.com -64.233.185.120 g3.gstatic.com -64.233.185.120 g4.gstatic.com -64.233.185.120 g5.gstatic.com -64.233.185.120 g6.gstatic.com -64.233.185.120 g7.gstatic.com -210.242.125.98 mt0.gstatic.com -210.242.125.98 mt1.gstatic.com -210.242.125.98 mt2.gstatic.com -210.242.125.98 mt3.gstatic.com -210.242.125.98 mt4.gstatic.com -210.242.125.98 mt5.gstatic.com -210.242.125.98 mt6.gstatic.com -210.242.125.98 mt7.gstatic.com -210.242.125.98 t0.gstatic.com -210.242.125.98 t1.gstatic.com -210.242.125.98 t2.gstatic.com -210.242.125.98 t3.gstatic.com -210.242.125.98 t4.gstatic.com -210.242.125.98 t5.gstatic.com -210.242.125.98 t6.gstatic.com -210.242.125.98 t7.gstatic.com -#Gstatic↑ -#Google other↓ -64.233.185.113 apis.google.com -64.233.185.113 talkgadget.google.com -74.125.207.189 chromoting-host.talkgadget.google.com -74.125.207.189 chromoting-oauth.talkgadget.google.com -74.125.207.189 chromoting-client.talkgadget.google.com -74.125.207.189 wildcard-talkgadget.l.google.com -64.233.168.17 mail.google.com -64.233.185.101 plus.google.com -64.233.185.101 plus.url.google.com -64.233.185.101 plusone.google.com -210.242.125.98 play.google.com -210.242.125.98 keep.google.com -210.242.125.98 relay.google.com -210.242.125.98 safebrowsing.cache.l.google.com -210.242.125.98 safebrowsing.clients.google.com -210.242.125.98 safebrowsing.google.com -210.242.125.98 safebrowsing-cache.google.com -210.242.125.98 developer.android.com -210.242.125.98 market.android.com -210.242.125.98 source.android.com -#74.125.230.121 www.chromium.org -#74.125.230.121 chromium.org -#74.125.230.121 codereview.chromium.org -#74.125.230.121 dev.chromium.org -#210.242.125.98 mobile.l.google.com -#210.242.125.98 mobile-gtalk.l.google.com -74.125.230.127 stun.l.google.com -74.125.230.127 alt1.stun.l.google.com -74.125.230.127 alt2.stun.l.google.com -74.125.230.127 alt3.stun.l.google.com -74.125.230.127 alt4.stun.l.google.com -74.125.230.127 alt5.stun.l.google.com -210.242.125.98 wallet.google.com -210.242.125.98 answers.google.com -210.242.125.98 admin.google.com -210.242.125.98 chart.apis.google.com -210.242.125.98 appengine.google.com -210.242.125.98 apps.google.com -210.242.125.98 appspot.l.google.com -210.242.125.98 bks0.books.google.com -210.242.125.98 bks1.books.google.com -210.242.125.98 bks2.books.google.com -210.242.125.98 bks3.books.google.com -210.242.125.98 bks4.books.google.com -210.242.125.98 bks5.books.google.com -210.242.125.98 bks6.books.google.com -210.242.125.98 bks7.books.google.com -210.242.125.98 bks8.books.google.com -210.242.125.98 bks9.books.google.com -210.242.125.98 bks10.books.google.com -210.242.125.98 blogsearch.google.com -210.242.125.98 books.google.com -210.242.125.98 browserchannel-docs.l.google.com -210.242.125.98 browserchannel-spreadsheets.l.google.com -210.242.125.98 browsersync.google.com -210.242.125.98 browsersync.l.google.com -210.242.125.98 buzz.google.com -210.242.125.98 cache.l.google.com -210.242.125.98 cache.pack.google.com -210.242.125.98 calENDar.google.com -210.242.125.98 cbk0.google.com -210.242.125.98 cbk1.google.com -210.242.125.98 cbk2.google.com -210.242.125.98 cbk3.google.com -210.242.125.98 cbks0.google.com -210.242.125.98 cbks1.google.com -210.242.125.98 cbks2.google.com -210.242.125.98 cbks3.google.com -210.242.125.98 chatenabled.mail.google.com -210.242.125.98 checkout.google.com -210.242.125.98 checkout.l.google.com -210.242.125.98 chrome.google.com -210.242.125.98 code.google.com -210.242.125.98 code.l.google.com -210.242.125.98 desktop.google.com -210.242.125.98 desktop.l.google.com -210.242.125.98 desktop2.google.com -210.242.125.98 developers.google.com -210.242.125.98 ditu.google.com -210.242.125.98 dl.google.com -210.242.125.98 dl.l.google.com -210.242.125.98 dl-ssl.google.com -210.242.125.98 domains.google.com -210.242.125.98 earth.google.com -210.242.125.98 encrypted.google.com -210.242.125.98 encrypted-tbn.l.google.com -210.242.125.98 encrypted-tbn0.google.com -210.242.125.98 encrypted-tbn1.google.com -210.242.125.98 encrypted-tbn2.google.com -210.242.125.98 encrypted-tbn3.google.com -210.242.125.98 feedburner.google.com -210.242.125.98 feedproxy.google.com -210.242.125.98 filetransferenabled.mail.google.com -210.242.125.98 finance.google.com -210.242.125.98 fusion.google.com -210.242.125.98 geoauth.google.com -210.242.125.98 gg.google.com -210.242.125.98 ghs.google.com -210.242.125.98 ghs.l.google.com -210.242.125.98 ghs46.google.com -210.242.125.98 ghs46.l.google.com -210.242.125.98 google.com -210.242.125.98 googlecode.l.google.com -210.242.125.98 google-public-dns-a.google.com -210.242.125.98 google-public-dns-b.google.com -210.242.125.98 goto.google.com -210.242.125.98 groups.google.com -210.242.125.98 groups.l.google.com -210.242.125.98 groups-beta.google.com -210.242.125.98 gxc.google.com -210.242.125.98 id.google.com -210.242.125.98 id.l.google.com -210.242.125.98 images.google.com -210.242.125.98 images.l.google.com -210.242.125.98 investor.google.com -210.242.125.98 jmt0.google.com -210.242.125.98 kh.google.com -210.242.125.98 kh.l.google.com -210.242.125.98 khm.google.com -210.242.125.98 khm.l.google.com -210.242.125.98 khm0.google.com -210.242.125.98 khm1.google.com -210.242.125.98 khm2.google.com -210.242.125.98 khm3.google.com -210.242.125.98 khmdb.google.com -210.242.125.98 khms.google.com -210.242.125.98 khms.l.google.com -210.242.125.98 khms0.google.com -210.242.125.98 khms1.google.com -210.242.125.98 khms2.google.com -210.242.125.98 khms3.google.com -210.242.125.98 labs.google.com -210.242.125.98 large-uploads.l.google.com -210.242.125.98 lh2.google.com -210.242.125.98 lh2.l.google.com -210.242.125.98 lh3.google.com -210.242.125.98 lh4.google.com -210.242.125.98 lh5.google.com -210.242.125.98 lh6.google.com -210.242.125.98 linkhelp.clients.google.com -210.242.125.98 local.google.com -210.242.125.98 m.google.com -210.242.125.98 map.google.com -210.242.125.98 maps.google.com -210.242.125.98 maps.l.google.com -210.242.125.98 maps-api-ssl.google.com -210.242.125.98 mapsengine.google.com -210.242.125.98 mars.google.com -210.242.125.98 mobilemaps.clients.google.com -210.242.125.98 mt.google.com -210.242.125.98 mt.l.google.com -210.242.125.98 mt0.google.com -210.242.125.98 mt1.google.com -210.242.125.98 mt2.google.com -210.242.125.98 mt3.google.com -210.242.125.98 mts.google.com -210.242.125.98 mts.l.google.com -210.242.125.98 mts0.google.com -210.242.125.98 mts1.google.com -210.242.125.98 mts2.google.com -210.242.125.98 mts3.google.com -210.242.125.98 music.google.com -210.242.125.98 music-streaming.l.google.com -210.242.125.98 mw1.google.com -210.242.125.98 mw2.google.com -210.242.125.98 news.google.com -210.242.125.98 news.l.google.com -210.242.125.98 pack.google.com -210.242.125.98 photos.google.com -210.242.125.98 photos-ugc.l.google.com -210.242.125.98 picasa.google.com -210.242.125.98 picasaweb.google.com -210.242.125.98 picasaweb.l.google.com -210.242.125.98 places.google.com -210.242.125.98 productforums.google.com -210.242.125.98 profiles.google.com -210.242.125.98 reader.google.com -210.242.125.98 sandbox.google.com -210.242.125.98 sb.google.com -210.242.125.98 sb.l.google.com -210.242.125.98 sb-ssl.google.com -210.242.125.98 sb-ssl.l.google.com -210.242.125.98 scholar.google.com -210.242.125.98 scholar.l.google.com -210.242.125.98 script.google.com -210.242.125.98 security.google.com -210.242.125.98 services.google.com -210.242.125.98 sites.google.com -210.242.125.98 sketchup.google.com -210.242.125.98 sketchup.l.google.com -210.242.125.98 spreadsheet.google.com -210.242.125.98 spreadsheets.google.com -210.242.125.98 spreadsheets.l.google.com -210.242.125.98 spreadsheets0.google.com -210.242.125.98 spreadsheets1.google.com -210.242.125.98 spreadsheets2.google.com -210.242.125.98 spreadsheets3.google.com -210.242.125.98 spreadsheets4.google.com -210.242.125.98 spreadsheets5.google.com -210.242.125.98 spreadsheets6.google.com -210.242.125.98 spreadsheets7.google.com -210.242.125.98 spreadsheets8.google.com -210.242.125.98 spreadsheets9.google.com -210.242.125.98 spreadsheets-china.l.google.com -210.242.125.98 suggestqueries.google.com -210.242.125.98 suggestqueries.l.google.com -210.242.125.98 support.google.com -210.242.125.98 tbn0.google.com -210.242.125.98 tbn1.google.com -210.242.125.98 tbn2.google.com -210.242.125.98 tbn3.google.com -210.242.125.98 toolbar.google.com -210.242.125.98 toolbarqueries.clients.google.com -210.242.125.98 toolbarqueries.google.com -210.242.125.98 toolbarqueries.l.google.com -210.242.125.98 tools.google.com -210.242.125.98 tools.l.google.com -210.242.125.98 translate.google.com -210.242.125.98 trENDs.google.com -210.242.125.98 video.google.com -210.242.125.98 video-stats.l.google.com -210.242.125.98 voice.google.com -210.242.125.98 wifi.google.com -210.242.125.98 wifi.l.google.com -210.242.125.98 wire.l.google.com -210.242.125.98 writely.google.com -210.242.125.98 writely.l.google.com -210.242.125.98 writely-china.l.google.com -210.242.125.98 writely-com.l.google.com -210.242.125.98 www.l.google.com -210.242.125.98 www2.l.google.com -210.242.125.98 www3.l.google.com -210.242.125.98 www4.l.google.com -210.242.125.98 ytstatic.l.google.com -210.242.125.98 autoproxy-gfwlist.googlecode.com -210.242.125.98 chromium.googlecode.com -210.242.125.98 closure-library.googlecode.com -210.242.125.98 earth-api-samples.googlecode.com -210.242.125.98 gmaps-samples-flash.googlecode.com -210.242.125.98 goagent.googlecode.com -210.242.125.98 google-code-feed-gadget.googlecode.com -210.242.125.98 imoutohost.googlecode.com -210.242.125.98 smarthosts.googlecode.com -210.242.125.98 huhamhire-hosts.googlecode.com -210.242.125.98 haoutil.googlecode.com -210.242.125.98 blogsearch.google.cn -210.242.125.98 g.cn -210.242.125.98 www.g.cn -210.242.125.98 ditu.google.cn -210.242.125.98 maps.google.cn -210.242.125.98 gg.google.cn -210.242.125.98 id.google.cn -210.242.125.98 maps.gstatic.cn -210.242.125.98 m.google.cn -210.242.125.98 mt.google.cn -210.242.125.98 mt0.google.cn -210.242.125.98 mt1.google.cn -210.242.125.98 mt2.google.cn -210.242.125.98 mt3.google.cn -210.242.125.98 news.google.cn -210.242.125.98 scholar.google.cn -210.242.125.98 translate.google.cn -210.242.125.98 www.google.cn -210.242.125.98 www.gstatic.cn -210.242.125.98 accounts.google.com.hk -210.242.125.98 blogsearch.google.com.hk -210.242.125.98 books.google.com.hk -210.242.125.98 clients1.google.com.hk -210.242.125.98 desktop.google.com.hk -210.242.125.98 encrypted.google.com.hk -210.242.125.98 groups.google.com.hk -210.242.125.98 gxc.google.com.hk -210.242.125.98 id.google.com.hk -210.242.125.98 images.google.com.hk -#210.242.125.98 m.google.com.hk -210.242.125.98 maps.google.com.hk -210.242.125.98 news.google.com.hk -210.242.125.98 picasaweb.google.com.hk -210.242.125.98 plus.url.google.com.hk -210.242.125.98 scholar.google.com.hk -210.242.125.98 toolbar.google.com.hk -210.242.125.98 toolbarqueries.google.com.hk -210.242.125.98 translate.google.com.hk -210.242.125.98 wENDa.google.com.hk -210.242.125.98 www.google.com.hk -210.242.125.98 accounts.google.com.tw -210.242.125.98 blogsearch.google.com.tw -210.242.125.98 books.google.com.tw -210.242.125.98 clients1.google.com.tw -210.242.125.98 desktop.google.com.tw -210.242.125.98 encrypted.google.com.tw -210.242.125.98 groups.google.com.tw -210.242.125.98 gxc.google.com.tw -210.242.125.98 id.google.com.tw -210.242.125.98 images.google.com.tw -#210.242.125.98 m.google.com.tw -210.242.125.98 maps.google.com.tw -210.242.125.98 news.google.com.tw -210.242.125.98 picasaweb.google.com.tw -210.242.125.98 plus.url.google.com.tw -210.242.125.98 scholar.google.com.tw -210.242.125.98 toolbar.google.com.tw -210.242.125.98 toolbarqueries.google.com.tw -210.242.125.98 translate.google.com.tw -210.242.125.98 www.google.com.tw -210.242.125.98 accounts.google.com.sg -210.242.125.98 blogsearch.google.com.sg -210.242.125.98 books.google.com.sg -210.242.125.98 clients1.google.com.sg -210.242.125.98 desktop.google.com.sg -210.242.125.98 encrypted.google.com.sg -210.242.125.98 groups.google.com.sg -210.242.125.98 gxc.google.com.sg -210.242.125.98 id.google.com.sg -210.242.125.98 images.google.com.sg -#210.242.125.98 m.google.com.sg -210.242.125.98 maps.google.com.sg -210.242.125.98 news.google.com.sg -210.242.125.98 picasaweb.google.com.sg -210.242.125.98 plus.url.google.com.sg -210.242.125.98 scholar.google.com.sg -210.242.125.98 toolbar.google.com.sg -210.242.125.98 toolbarqueries.google.com.sg -210.242.125.98 translate.google.com.sg -210.242.125.98 www.google.com.sg -210.242.125.98 accounts.google.co.jp -210.242.125.98 blogsearch.google.co.jp -210.242.125.98 books.google.co.jp -210.242.125.98 clients1.google.co.jp -210.242.125.98 desktop.google.co.jp -210.242.125.98 encrypted.google.co.jp -210.242.125.98 groups.google.co.jp -210.242.125.98 gxc.google.com.co.jp -210.242.125.98 id.google.com.co.jp -210.242.125.98 images.google.co.jp -#210.242.125.98 m.google.com.co.jp -210.242.125.98 maps.google.co.jp -210.242.125.98 news.google.co.jp -210.242.125.98 picasaweb.google.co.jp -210.242.125.98 plus.url.google.co.jp -210.242.125.98 scholar.google.co.jp -210.242.125.98 toolbar.google.co.jp -210.242.125.98 toolbarqueries.google.co.jp -210.242.125.98 translate.google.co.jp -210.242.125.98 www.google.co.jp -210.242.125.98 android.googlesource.com -210.242.125.98 auth.keyhole.com -210.242.125.98 chrome.angrybirds.com -210.242.125.98 developer.chrome.com -210.242.125.98 domains.googlesyndication.com -210.242.125.98 earthengine.googlelabs.com -#210.242.125.98 feeds.feedburner.com -210.242.125.98 g.co -210.242.125.98 gmail.com -210.242.125.98 goo.gl -210.242.125.98 listen.googlelabs.com -210.242.125.98 m.gmail.com -210.242.125.98 m.googlemail.com -210.242.125.98 ngrams.googlelabs.com -210.242.125.98 ssl.google-analytics.com -210.242.125.98 www.gmail.com -210.242.125.98 www.googleadservices.com -210.242.125.98 www.google-analytics.com -#210.242.125.98 www-google-analytics.l.google.com -210.242.125.98 www.googlelabs.com -210.242.125.98 www.googlesource.com -210.242.125.98 chatenabled.mail.google.com -210.242.125.98 panoramio.com -210.242.125.98 www.panoramio.com -210.242.125.98 static.panoramio.com -74.125.207.191 www.blogger.com -74.125.207.132 googleblog.blogspot.com -74.125.207.132 googlechinablog.blogspot.com -74.125.207.132 1.bp.blogspot.com -74.125.207.132 2.bp.blogspot.com -74.125.207.132 3.bp.blogspot.com -74.125.207.132 4.bp.blogspot.com - -#Google Services END - diff --git a/repo b/repo deleted file mode 100755 index b8c414b..0000000 --- a/repo +++ /dev/null @@ -1,771 +0,0 @@ -#!/usr/bin/env python - -## repo default configuration -## -REPO_URL = 'https://gerrit.googlesource.com/git-repo' -REPO_REV = 'stable' - -# Copyright (C) 2008 Google Inc. -# -# 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. - -# increment this whenever we make important changes to this script -VERSION = (1, 21) - -# increment this if the MAINTAINER_KEYS block is modified -KEYRING_VERSION = (1, 2) -MAINTAINER_KEYS = """ - - Repo Maintainer ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.2.2 (GNU/Linux) - -mQGiBEj3ugERBACrLJh/ZPyVSKeClMuznFIrsQ+hpNnmJGw1a9GXKYKk8qHPhAZf -WKtrBqAVMNRLhL85oSlekRz98u41H5si5zcuv+IXJDF5MJYcB8f22wAy15lUqPWi -VCkk1l8qqLiuW0fo+ZkPY5qOgrvc0HW1SmdH649uNwqCbcKb6CxaTxzhOwCgj3AP -xI1WfzLqdJjsm1Nq98L0cLcD/iNsILCuw44PRds3J75YP0pze7YF/6WFMB6QSFGu -aUX1FsTTztKNXGms8i5b2l1B8JaLRWq/jOnZzyl1zrUJhkc0JgyZW5oNLGyWGhKD -Fxp5YpHuIuMImopWEMFIRQNrvlg+YVK8t3FpdI1RY0LYqha8pPzANhEYgSfoVzOb -fbfbA/4ioOrxy8ifSoga7ITyZMA+XbW8bx33WXutO9N7SPKS/AK2JpasSEVLZcON -ae5hvAEGVXKxVPDjJBmIc2cOe7kOKSi3OxLzBqrjS2rnjiP4o0ekhZIe4+ocwVOg -e0PLlH5avCqihGRhpoqDRsmpzSHzJIxtoeb+GgGEX8KkUsVAhbQpUmVwbyBNYWlu -dGFpbmVyIDxyZXBvQGFuZHJvaWQua2VybmVsLm9yZz6IYAQTEQIAIAUCSPe6AQIb -AwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEBZTDV6SD1xl1GEAn0x/OKQpy7qI -6G73NJviU0IUMtftAKCFMUhGb/0bZvQ8Rm3QCUpWHyEIu7kEDQRI97ogEBAA2wI6 -5fs9y/rMwD6dkD/vK9v4C9mOn1IL5JCPYMJBVSci+9ED4ChzYvfq7wOcj9qIvaE0 -GwCt2ar7Q56me5J+byhSb32Rqsw/r3Vo5cZMH80N4cjesGuSXOGyEWTe4HYoxnHv -gF4EKI2LK7xfTUcxMtlyn52sUpkfKsCpUhFvdmbAiJE+jCkQZr1Z8u2KphV79Ou+ -P1N5IXY/XWOlq48Qf4MWCYlJFrB07xjUjLKMPDNDnm58L5byDrP/eHysKexpbakL -xCmYyfT6DV1SWLblpd2hie0sL3YejdtuBMYMS2rI7Yxb8kGuqkz+9l1qhwJtei94 -5MaretDy/d/JH/pRYkRf7L+ke7dpzrP+aJmcz9P1e6gq4NJsWejaALVASBiioqNf -QmtqSVzF1wkR5avZkFHuYvj6V/t1RrOZTXxkSk18KFMJRBZrdHFCWbc5qrVxUB6e -N5pja0NFIUCigLBV1c6I2DwiuboMNh18VtJJh+nwWeez/RueN4ig59gRTtkcc0PR -35tX2DR8+xCCFVW/NcJ4PSePYzCuuLvp1vEDHnj41R52Fz51hgddT4rBsp0nL+5I -socSOIIezw8T9vVzMY4ArCKFAVu2IVyBcahTfBS8q5EM63mONU6UVJEozfGljiMw -xuQ7JwKcw0AUEKTKG7aBgBaTAgT8TOevpvlw91cAAwUP/jRkyVi/0WAb0qlEaq/S -ouWxX1faR+vU3b+Y2/DGjtXQMzG0qpetaTHC/AxxHpgt/dCkWI6ljYDnxgPLwG0a -Oasm94BjZc6vZwf1opFZUKsjOAAxRxNZyjUJKe4UZVuMTk6zo27Nt3LMnc0FO47v -FcOjRyquvgNOS818irVHUf12waDx8gszKxQTTtFxU5/ePB2jZmhP6oXSe4K/LG5T -+WBRPDrHiGPhCzJRzm9BP0lTnGCAj3o9W90STZa65RK7IaYpC8TB35JTBEbrrNCp -w6lzd74LnNEp5eMlKDnXzUAgAH0yzCQeMl7t33QCdYx2hRs2wtTQSjGfAiNmj/WW -Vl5Jn+2jCDnRLenKHwVRFsBX2e0BiRWt/i9Y8fjorLCXVj4z+7yW6DawdLkJorEo -p3v5ILwfC7hVx4jHSnOgZ65L9s8EQdVr1ckN9243yta7rNgwfcqb60ILMFF1BRk/ -0V7wCL+68UwwiQDvyMOQuqkysKLSDCLb7BFcyA7j6KG+5hpsREstFX2wK1yKeraz -5xGrFy8tfAaeBMIQ17gvFSp/suc9DYO0ICK2BISzq+F+ZiAKsjMYOBNdH/h0zobQ -HTHs37+/QLMomGEGKZMWi0dShU2J5mNRQu3Hhxl3hHDVbt5CeJBb26aQcQrFz69W -zE3GNvmJosh6leayjtI9P2A6iEkEGBECAAkFAkj3uiACGwwACgkQFlMNXpIPXGWp -TACbBS+Up3RpfYVfd63c1cDdlru13pQAn3NQy/SN858MkxN+zym86UBgOad2 -=CMiZ ------END PGP PUBLIC KEY BLOCK----- - - Conley Owens ------BEGIN PGP PUBLIC KEY BLOCK----- -Version: GnuPG v1.4.11 (GNU/Linux) - -mQENBFHRvc8BCADFg45Xx/y6QDC+T7Y/gGc7vx0ww7qfOwIKlAZ9xG3qKunMxo+S -hPCnzEl3cq+6I1Ww/ndop/HB3N3toPXRCoN8Vs4/Hc7by+SnaLFnacrm+tV5/OgT -V37Lzt8lhay1Kl+YfpFwHYYpIEBLFV9knyfRXS/428W2qhdzYfvB15/AasRmwmor -py4NIzSs8UD/SPr1ihqNCdZM76+MQyN5HMYXW/ALZXUFG0pwluHFA7hrfPG74i8C -zMiP7qvMWIl/r/jtzHioH1dRKgbod+LZsrDJ8mBaqsZaDmNJMhss9g76XvfMyLra -9DI9/iFuBpGzeqBv0hwOGQspLRrEoyTeR6n1ABEBAAG0H0NvbmxleSBPd2VucyA8 -Y2NvM0BhbmRyb2lkLmNvbT6JATgEEwECACIFAlHRvc8CGwMGCwkIBwMCBhUIAgkK -CwQWAgMBAh4BAheAAAoJEGe35EhpKzgsP6AIAJKJmNtn4l7hkYHKHFSo3egb6RjQ -zEIP3MFTcu8HFX1kF1ZFbrp7xqurLaE53kEkKuAAvjJDAgI8mcZHP1JyplubqjQA -xvv84gK+OGP3Xk+QK1ZjUQSbjOpjEiSZpRhWcHci3dgOUH4blJfByHw25hlgHowd -a/2PrNKZVcJ92YienaxxGjcXEUcd0uYEG2+rwllQigFcnMFDhr9B71MfalRHjFKE -fmdoypqLrri61YBc59P88Rw2/WUpTQjgNubSqa3A2+CKdaRyaRw+2fdF4TdR0h8W -zbg+lbaPtJHsV+3mJC7fq26MiJDRJa5ZztpMn8su20gbLgi2ShBOaHAYDDi5AQ0E -UdG9zwEIAMoOBq+QLNozAhxOOl5GL3StTStGRgPRXINfmViTsihrqGCWBBUfXlUE -OytC0mYcrDUQev/8ToVoyqw+iGSwDkcSXkrEUCKFtHV/GECWtk1keyHgR10YKI1R -mquSXoubWGqPeG1PAI74XWaRx8UrL8uCXUtmD8Q5J7mDjKR5NpxaXrwlA0bKsf2E -Gp9tu1kKauuToZhWHMRMqYSOGikQJwWSFYKT1KdNcOXLQF6+bfoJ6sjVYdwfmNQL -Ixn8QVhoTDedcqClSWB17VDEFDFa7MmqXZz2qtM3X1R/MUMHqPtegQzBGNhRdnI2 -V45+1Nnx/uuCxDbeI4RbHzujnxDiq70AEQEAAYkBHwQYAQIACQUCUdG9zwIbDAAK -CRBnt+RIaSs4LNVeB/0Y2pZ8I7gAAcEM0Xw8drr4omg2fUoK1J33ozlA/RxeA/lJ -I3KnyCDTpXuIeBKPGkdL8uMATC9Z8DnBBajRlftNDVZS3Hz4G09G9QpMojvJkFJV -By+01Flw/X+eeN8NpqSuLV4W+AjEO8at/VvgKr1AFvBRdZ7GkpI1o6DgPe7ZqX+1 -dzQZt3e13W0rVBb/bUgx9iSLoeWP3aq/k+/GRGOR+S6F6BBSl0SQ2EF2+dIywb1x -JuinEP+AwLAUZ1Bsx9ISC0Agpk2VeHXPL3FGhroEmoMvBzO0kTFGyoeT7PR/BfKv -+H/g3HsL2LOB9uoIm8/5p2TTU5ttYCXMHhQZ81AY -=AUp4 ------END PGP PUBLIC KEY BLOCK----- -""" - -GIT = 'git' # our git command -MIN_GIT_VERSION = (1, 7, 2) # minimum supported git version -repodir = '.repo' # name of repo's private directory -S_repo = 'repo' # special repo repository -S_manifests = 'manifests' # special manifest repository -REPO_MAIN = S_repo + '/main.py' # main script -MIN_PYTHON_VERSION = (2, 6) # minimum supported python version - - -import errno -import optparse -import os -import re -import shutil -import stat -import subprocess -import sys - -if sys.version_info[0] == 3: - import urllib.request - import urllib.error -else: - import imp - import urllib2 - urllib = imp.new_module('urllib') - urllib.request = urllib2 - urllib.error = urllib2 - - -def _print(*objects, **kwargs): - sep = kwargs.get('sep', ' ') - end = kwargs.get('end', '\n') - out = kwargs.get('file', sys.stdout) - out.write(sep.join(objects) + end) - - -# Python version check -ver = sys.version_info -if ver[0] == 3: - _print('warning: Python 3 support is currently experimental. YMMV.\n' - 'Please use Python 2.6 - 2.7 instead.', - file=sys.stderr) -if (ver[0], ver[1]) < MIN_PYTHON_VERSION: - _print('error: Python version %s unsupported.\n' - 'Please use Python 2.6 - 2.7 instead.' - % sys.version.split(' ')[0], file=sys.stderr) - sys.exit(1) - -home_dot_repo = os.path.expanduser('~/.repoconfig') -gpg_dir = os.path.join(home_dot_repo, 'gnupg') - -extra_args = [] -init_optparse = optparse.OptionParser(usage="repo init -u url [options]") - -# Logging -group = init_optparse.add_option_group('Logging options') -group.add_option('-q', '--quiet', - dest="quiet", action="store_true", default=False, - help="be quiet") - -# Manifest -group = init_optparse.add_option_group('Manifest options') -group.add_option('-u', '--manifest-url', - dest='manifest_url', - help='manifest repository location', metavar='URL') -group.add_option('-b', '--manifest-branch', - dest='manifest_branch', - help='manifest branch or revision', metavar='REVISION') -group.add_option('-m', '--manifest-name', - dest='manifest_name', - help='initial manifest file', metavar='NAME.xml') -group.add_option('--mirror', - dest='mirror', action='store_true', - help='create a replica of the remote repositories ' - 'rather than a client working directory') -group.add_option('--reference', - dest='reference', - help='location of mirror directory', metavar='DIR') -group.add_option('--depth', type='int', default=None, - dest='depth', - help='create a shallow clone with given depth; see git clone') -group.add_option('--archive', - dest='archive', action='store_true', - help='checkout an archive instead of a git repository for ' - 'each project. See git archive.') -group.add_option('-g', '--groups', - dest='groups', default='default', - help='restrict manifest projects to ones with specified ' - 'group(s) [default|all|G1,G2,G3|G4,-G5,-G6]', - metavar='GROUP') -group.add_option('-p', '--platform', - dest='platform', default="auto", - help='restrict manifest projects to ones with a specified ' - 'platform group [auto|all|none|linux|darwin|...]', - metavar='PLATFORM') - - -# Tool -group = init_optparse.add_option_group('repo Version options') -group.add_option('--repo-url', - dest='repo_url', - help='repo repository location', metavar='URL') -group.add_option('--repo-branch', - dest='repo_branch', - help='repo branch or revision', metavar='REVISION') -group.add_option('--no-repo-verify', - dest='no_repo_verify', action='store_true', - help='do not verify repo source code') - -# Other -group = init_optparse.add_option_group('Other options') -group.add_option('--config-name', - dest='config_name', action="store_true", default=False, - help='Always prompt for name/e-mail') - -class CloneFailure(Exception): - """Indicate the remote clone of repo itself failed. - """ - - -def _Init(args): - """Installs repo by cloning it over the network. - """ - opt, args = init_optparse.parse_args(args) - if args: - init_optparse.print_usage() - sys.exit(1) - - url = opt.repo_url - if not url: - url = REPO_URL - extra_args.append('--repo-url=%s' % url) - - branch = opt.repo_branch - if not branch: - branch = REPO_REV - extra_args.append('--repo-branch=%s' % branch) - - if branch.startswith('refs/heads/'): - branch = branch[len('refs/heads/'):] - if branch.startswith('refs/'): - _print("fatal: invalid branch name '%s'" % branch, file=sys.stderr) - raise CloneFailure() - - try: - os.mkdir(repodir) - except OSError as e: - if e.errno != errno.EEXIST: - _print('fatal: cannot make %s directory: %s' - % (repodir, e.strerror), file=sys.stderr) - # Don't raise CloneFailure; that would delete the - # name. Instead exit immediately. - # - sys.exit(1) - - _CheckGitVersion() - try: - if NeedSetupGnuPG(): - can_verify = SetupGnuPG(opt.quiet) - else: - can_verify = True - - dst = os.path.abspath(os.path.join(repodir, S_repo)) - _Clone(url, dst, opt.quiet) - - if can_verify and not opt.no_repo_verify: - rev = _Verify(dst, branch, opt.quiet) - else: - rev = 'refs/remotes/origin/%s^0' % branch - - _Checkout(dst, branch, rev, opt.quiet) - except CloneFailure: - if opt.quiet: - _print('fatal: repo init failed; run without --quiet to see why', - file=sys.stderr) - raise - - -def ParseGitVersion(ver_str): - if not ver_str.startswith('git version '): - return None - - num_ver_str = ver_str[len('git version '):].strip().split('-')[0] - to_tuple = [] - for num_str in num_ver_str.split('.')[:3]: - if num_str.isdigit(): - to_tuple.append(int(num_str)) - else: - to_tuple.append(0) - return tuple(to_tuple) - - -def _CheckGitVersion(): - cmd = [GIT, '--version'] - try: - proc = subprocess.Popen(cmd, stdout=subprocess.PIPE) - except OSError as e: - _print(file=sys.stderr) - _print("fatal: '%s' is not available" % GIT, file=sys.stderr) - _print('fatal: %s' % e, file=sys.stderr) - _print(file=sys.stderr) - _print('Please make sure %s is installed and in your path.' % GIT, - file=sys.stderr) - raise CloneFailure() - - ver_str = proc.stdout.read().strip() - proc.stdout.close() - proc.wait() - - ver_act = ParseGitVersion(ver_str) - if ver_act is None: - _print('error: "%s" unsupported' % ver_str, file=sys.stderr) - raise CloneFailure() - - if ver_act < MIN_GIT_VERSION: - need = '.'.join(map(str, MIN_GIT_VERSION)) - _print('fatal: git %s or later required' % need, file=sys.stderr) - raise CloneFailure() - - -def NeedSetupGnuPG(): - if not os.path.isdir(home_dot_repo): - return True - - kv = os.path.join(home_dot_repo, 'keyring-version') - if not os.path.exists(kv): - return True - - kv = open(kv).read() - if not kv: - return True - - kv = tuple(map(int, kv.split('.'))) - if kv < KEYRING_VERSION: - return True - return False - - -def SetupGnuPG(quiet): - try: - os.mkdir(home_dot_repo) - except OSError as e: - if e.errno != errno.EEXIST: - _print('fatal: cannot make %s directory: %s' - % (home_dot_repo, e.strerror), file=sys.stderr) - sys.exit(1) - - try: - os.mkdir(gpg_dir, stat.S_IRWXU) - except OSError as e: - if e.errno != errno.EEXIST: - _print('fatal: cannot make %s directory: %s' % (gpg_dir, e.strerror), - file=sys.stderr) - sys.exit(1) - - env = os.environ.copy() - env['GNUPGHOME'] = gpg_dir.encode() - - cmd = ['gpg', '--import'] - try: - proc = subprocess.Popen(cmd, - env = env, - stdin = subprocess.PIPE) - except OSError as e: - if not quiet: - _print('warning: gpg (GnuPG) is not available.', file=sys.stderr) - _print('warning: Installing it is strongly encouraged.', file=sys.stderr) - _print(file=sys.stderr) - return False - - proc.stdin.write(MAINTAINER_KEYS) - proc.stdin.close() - - if proc.wait() != 0: - _print('fatal: registering repo maintainer keys failed', file=sys.stderr) - sys.exit(1) - _print() - - fd = open(os.path.join(home_dot_repo, 'keyring-version'), 'w') - fd.write('.'.join(map(str, KEYRING_VERSION)) + '\n') - fd.close() - return True - - -def _SetConfig(local, name, value): - """Set a git configuration option to the specified value. - """ - cmd = [GIT, 'config', name, value] - if subprocess.Popen(cmd, cwd = local).wait() != 0: - raise CloneFailure() - - -def _InitHttp(): - handlers = [] - - mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() - try: - import netrc - n = netrc.netrc() - for host in n.hosts: - p = n.hosts[host] - mgr.add_password(p[1], 'http://%s/' % host, p[0], p[2]) - mgr.add_password(p[1], 'https://%s/' % host, p[0], p[2]) - except: - pass - handlers.append(urllib.request.HTTPBasicAuthHandler(mgr)) - handlers.append(urllib.request.HTTPDigestAuthHandler(mgr)) - - if 'http_proxy' in os.environ: - url = os.environ['http_proxy'] - handlers.append(urllib.request.ProxyHandler({'http': url, 'https': url})) - if 'REPO_CURL_VERBOSE' in os.environ: - handlers.append(urllib.request.HTTPHandler(debuglevel=1)) - handlers.append(urllib.request.HTTPSHandler(debuglevel=1)) - urllib.request.install_opener(urllib.request.build_opener(*handlers)) - -def _Fetch(url, local, src, quiet): - if not quiet: - _print('Get %s' % url, file=sys.stderr) - - cmd = [GIT, 'fetch'] - if quiet: - cmd.append('--quiet') - err = subprocess.PIPE - else: - err = None - cmd.append(src) - cmd.append('+refs/heads/*:refs/remotes/origin/*') - cmd.append('refs/tags/*:refs/tags/*') - - proc = subprocess.Popen(cmd, cwd = local, stderr = err) - if err: - proc.stderr.read() - proc.stderr.close() - if proc.wait() != 0: - raise CloneFailure() - -def _DownloadBundle(url, local, quiet): - if not url.endswith('/'): - url += '/' - url += 'clone.bundle' - - proc = subprocess.Popen( - [GIT, 'config', '--get-regexp', 'url.*.insteadof'], - cwd = local, - stdout = subprocess.PIPE) - for line in proc.stdout: - m = re.compile(r'^url\.(.*)\.insteadof (.*)$').match(line) - if m: - new_url = m.group(1) - old_url = m.group(2) - if url.startswith(old_url): - url = new_url + url[len(old_url):] - break - proc.stdout.close() - proc.wait() - - if not url.startswith('http:') and not url.startswith('https:'): - return False - - dest = open(os.path.join(local, '.git', 'clone.bundle'), 'w+b') - try: - try: - r = urllib.request.urlopen(url) - except urllib.error.HTTPError as e: - if e.code in [403, 404]: - return False - _print('fatal: Cannot get %s' % url, file=sys.stderr) - _print('fatal: HTTP error %s' % e.code, file=sys.stderr) - raise CloneFailure() - except urllib.error.URLError as e: - _print('fatal: Cannot get %s' % url, file=sys.stderr) - _print('fatal: error %s' % e.reason, file=sys.stderr) - raise CloneFailure() - try: - if not quiet: - _print('Get %s' % url, file=sys.stderr) - while True: - buf = r.read(8192) - if buf == '': - return True - dest.write(buf) - finally: - r.close() - finally: - dest.close() - -def _ImportBundle(local): - path = os.path.join(local, '.git', 'clone.bundle') - try: - _Fetch(local, local, path, True) - finally: - os.remove(path) - -def _Clone(url, local, quiet): - """Clones a git repository to a new subdirectory of repodir - """ - try: - os.mkdir(local) - except OSError as e: - _print('fatal: cannot make %s directory: %s' % (local, e.strerror), - file=sys.stderr) - raise CloneFailure() - - cmd = [GIT, 'init', '--quiet'] - try: - proc = subprocess.Popen(cmd, cwd = local) - except OSError as e: - _print(file=sys.stderr) - _print("fatal: '%s' is not available" % GIT, file=sys.stderr) - _print('fatal: %s' % e, file=sys.stderr) - _print(file=sys.stderr) - _print('Please make sure %s is installed and in your path.' % GIT, - file=sys.stderr) - raise CloneFailure() - if proc.wait() != 0: - _print('fatal: could not create %s' % local, file=sys.stderr) - raise CloneFailure() - - _InitHttp() - _SetConfig(local, 'remote.origin.url', url) - _SetConfig(local, 'remote.origin.fetch', - '+refs/heads/*:refs/remotes/origin/*') - if _DownloadBundle(url, local, quiet): - _ImportBundle(local) - else: - _Fetch(url, local, 'origin', quiet) - - -def _Verify(cwd, branch, quiet): - """Verify the branch has been signed by a tag. - """ - cmd = [GIT, 'describe', 'origin/%s' % branch] - proc = subprocess.Popen(cmd, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - cwd = cwd) - cur = proc.stdout.read().strip() - proc.stdout.close() - - proc.stderr.read() - proc.stderr.close() - - if proc.wait() != 0 or not cur: - _print(file=sys.stderr) - _print("fatal: branch '%s' has not been signed" % branch, file=sys.stderr) - raise CloneFailure() - - m = re.compile(r'^(.*)-[0-9]{1,}-g[0-9a-f]{1,}$').match(cur) - if m: - cur = m.group(1) - if not quiet: - _print(file=sys.stderr) - _print("info: Ignoring branch '%s'; using tagged release '%s'" - % (branch, cur), file=sys.stderr) - _print(file=sys.stderr) - - env = os.environ.copy() - env['GNUPGHOME'] = gpg_dir.encode() - - cmd = [GIT, 'tag', '-v', cur] - proc = subprocess.Popen(cmd, - stdout = subprocess.PIPE, - stderr = subprocess.PIPE, - cwd = cwd, - env = env) - out = proc.stdout.read() - proc.stdout.close() - - err = proc.stderr.read() - proc.stderr.close() - - if proc.wait() != 0: - _print(file=sys.stderr) - _print(out, file=sys.stderr) - _print(err, file=sys.stderr) - _print(file=sys.stderr) - raise CloneFailure() - return '%s^0' % cur - - -def _Checkout(cwd, branch, rev, quiet): - """Checkout an upstream branch into the repository and track it. - """ - cmd = [GIT, 'update-ref', 'refs/heads/default', rev] - if subprocess.Popen(cmd, cwd = cwd).wait() != 0: - raise CloneFailure() - - _SetConfig(cwd, 'branch.default.remote', 'origin') - _SetConfig(cwd, 'branch.default.merge', 'refs/heads/%s' % branch) - - cmd = [GIT, 'symbolic-ref', 'HEAD', 'refs/heads/default'] - if subprocess.Popen(cmd, cwd = cwd).wait() != 0: - raise CloneFailure() - - cmd = [GIT, 'read-tree', '--reset', '-u'] - if not quiet: - cmd.append('-v') - cmd.append('HEAD') - if subprocess.Popen(cmd, cwd = cwd).wait() != 0: - raise CloneFailure() - - -def _FindRepo(): - """Look for a repo installation, starting at the current directory. - """ - curdir = os.getcwd() - repo = None - - olddir = None - while curdir != '/' \ - and curdir != olddir \ - and not repo: - repo = os.path.join(curdir, repodir, REPO_MAIN) - if not os.path.isfile(repo): - repo = None - olddir = curdir - curdir = os.path.dirname(curdir) - return (repo, os.path.join(curdir, repodir)) - - -class _Options: - help = False - - -def _ParseArguments(args): - cmd = None - opt = _Options() - arg = [] - - for i in range(len(args)): - a = args[i] - if a == '-h' or a == '--help': - opt.help = True - - elif not a.startswith('-'): - cmd = a - arg = args[i + 1:] - break - return cmd, opt, arg - - -def _Usage(): - _print( -"""usage: repo COMMAND [ARGS] - -repo is not yet installed. Use "repo init" to install it here. - -The most commonly used repo commands are: - - init Install repo in the current working directory - help Display detailed help on a command - -For access to the full online help, install repo ("repo init"). -""", file=sys.stderr) - sys.exit(1) - - -def _Help(args): - if args: - if args[0] == 'init': - init_optparse.print_help() - sys.exit(0) - else: - _print("error: '%s' is not a bootstrap command.\n" - ' For access to online help, install repo ("repo init").' - % args[0], file=sys.stderr) - else: - _Usage() - sys.exit(1) - - -def _NotInstalled(): - _print('error: repo is not installed. Use "repo init" to install it here.', - file=sys.stderr) - sys.exit(1) - - -def _NoCommands(cmd): - _print("""error: command '%s' requires repo to be installed first. - Use "repo init" to install it here.""" % cmd, file=sys.stderr) - sys.exit(1) - - -def _RunSelf(wrapper_path): - my_dir = os.path.dirname(wrapper_path) - my_main = os.path.join(my_dir, 'main.py') - my_git = os.path.join(my_dir, '.git') - - if os.path.isfile(my_main) and os.path.isdir(my_git): - for name in ['git_config.py', - 'project.py', - 'subcmds']: - if not os.path.exists(os.path.join(my_dir, name)): - return None, None - return my_main, my_git - return None, None - - -def _SetDefaultsTo(gitdir): - global REPO_URL - global REPO_REV - - REPO_URL = gitdir - proc = subprocess.Popen([GIT, - '--git-dir=%s' % gitdir, - 'symbolic-ref', - 'HEAD'], - stdout = subprocess.PIPE, - stderr = subprocess.PIPE) - REPO_REV = proc.stdout.read().strip() - proc.stdout.close() - - proc.stderr.read() - proc.stderr.close() - - if proc.wait() != 0: - _print('fatal: %s has no current branch' % gitdir, file=sys.stderr) - sys.exit(1) - - -def main(orig_args): - repo_main, rel_repo_dir = _FindRepo() - cmd, opt, args = _ParseArguments(orig_args) - - wrapper_path = os.path.abspath(__file__) - my_main, my_git = _RunSelf(wrapper_path) - - if not repo_main: - if opt.help: - _Usage() - if cmd == 'help': - _Help(args) - if not cmd: - _NotInstalled() - if cmd == 'init': - if my_git: - _SetDefaultsTo(my_git) - try: - _Init(args) - except CloneFailure: - shutil.rmtree(repodir, ignore_errors=True) - sys.exit(1) - repo_main, rel_repo_dir = _FindRepo() - else: - _NoCommands(cmd) - - if my_main: - repo_main = my_main - - ver_str = '.'.join(map(str, VERSION)) - me = [sys.executable, repo_main, - '--repo-dir=%s' % rel_repo_dir, - '--wrapper-version=%s' % ver_str, - '--wrapper-path=%s' % wrapper_path, - '--'] - me.extend(orig_args) - me.extend(extra_args) - try: - os.execv(sys.executable, me) - except OSError as e: - _print("fatal: unable to start %s" % repo_main, file=sys.stderr) - _print("fatal: %s" % e, file=sys.stderr) - sys.exit(148) - - -if __name__ == '__main__': - main(sys.argv[1:]) diff --git a/ruling.sh b/ruling.sh deleted file mode 100644 index d32f929..0000000 --- a/ruling.sh +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/bash - -export JOBS=`nproc`; - -if [[ ${1} = "--auto" ]]; then - export PARAM=-y - export SKIP=1 -else - export PARAM="" - export SKIP=0 -fi - -echo -echo "安装 JDK 6!" -echo -sudo apt-get update -sudo apt-get install openjdk-7-jdk -sudo update-alternatives --config java -sudo update-alternatives --config javac -cd ~/ - -echo -echo "安装 必要资源包!" -echo -sudo apt-get install git gnupg flex bison gperf build-essential \ -zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \ -libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \ -libgl1-mesa-dev g++-multilib mingw32 tofrodos pngcrusher \ -python-markdown libxml2-utils xsltproc zlib1g-dev:i386 - -echo -echo "将终端快捷方式加入右键菜单!" -echo -sudo apt-get install nautilus-open-terminal -nautilus -q - -if [ ${SKIP} = 1 ]; then -echo "无人值守安装. 按任意键暂停..." -else -read -p "按回车键继续..." -fi - -echo "安装 Repo" -echo -if [ ! -d ~/bin ]; then - mkdir -p ~/bin -fi -curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo -chmod a+x ~/bin/repo - -echo "安装 ADB 驱动!" -echo -wget http://www.broodplank.net/51-android.rules -sudo mv -f 51-android.rules /etc/udev/rules.d/51-android.rules -sudo chmod 644 /etc/udev/rules.d/51-android.rules - mkdir ~/adt-bundle - mv adt-bundle-linux-x86_64-20140702.zip ~/adt-bundle/adt_x64.zip - cd ~/adt-bundle - unzip adt_x64.zip - mv -f adt-bundle-linux-x86_64-20140702/* . -echo "正在配置" - echo -e '\n# Android tools\nexport PATH=${PATH}:~/adt-bundle/sdk/tools\nexport PATH=${PATH}:~/adt-bundle/sdk/platform-tools\nexport PATH=${PATH}:~/bin' >> ~/.bashrc - echo -e '\nPATH="$HOME/adt-bundle/sdk/tools:$HOME/adt-bundle/sdk/platform-tools:$PATH"' >> ~/.profile -echo "完成!!" - -clear - -echo -echo "清除临时文件..." -echo -rm -Rf ~/adt-bundle/adt-bundle-linux-x86_64-20140702 -rm -f ~/adt-bundle/adt_x64.zip - -echo -echo "完成!" -echo -echo "感谢使用本脚本!" -echo -read -p "按回车键退出..." -exit