为了同步CyanogenMod源代码,你也学会了翻墙,对吗?

通常 .repo/manifest.xml 文件有Google AOSP的Project,也有Github的Project;

访问Github不需要翻墙,而同步Google源代码则避免不了了;

想分开同步,想智能一点吗?

 #!/usr/bin/env python
# encoding: utf-8 import os,sys,subprocess
import xml.dom.minidom
from xml.dom.minidom import Node # 代理环境
proxy_user=''
proxy_pass=''
proxy_host='123.123.123.123' # 请改
proxy_port=12345 # 请改
if len(proxy_user) == 0:
http_proxy="http://%s:%d" %(proxy_host, proxy_port)
https_proxy="http://%s:%d" %(proxy_host, proxy_port)
else:
http_proxy="http://%s:%s@%s:%d" %(proxy_user, proxy_pass, proxy_host, proxy_port)
https_proxy="http://%s:%s@%s:%d" %(proxy_user, proxy_pass, proxy_host, proxy_port)
proxyenv={"http_proxy":http_proxy, "https_proxy":https_proxy} # 解析.repo/manifest.xml文件,取出project节点
doc = xml.dom.minidom.parse('.repo/manifest.xml')
projects = doc.getElementsByTagName('project') github_projects=[]
google_projects=[] errorsync_projects=[] # 执行同步函数
def sync_project(project, env=None):
"""
执行同步命令
project: 期望同步的Project name
"""
cmd="repo sync %s" %project
print '>>>', cmd
# 执行同步
process = subprocess.Popen(cmd, shell=True, env=env,\
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 实时读取STDOUT
out = process.stdout.readline()
while out:
print out,
out = process.stdout.readline()
err = process.stderr.readline()
# 实时读取STDERR
while err:
print err,
err = process.stderr.readline()
# 等待进程结束获得返回值
process.poll()
errcode = process.returncode
# 若有错误追加到错误数组
if errcode != 0:
errorsync_projects.append(project) # 对project进行分类
# AOSP的Project保存在 google_projects 数组
# CyanogenMod的Project保存在 github_project 数组
for node in projects:
remote=node.getAttribute('remote')
project=node.getAttribute('name')
if remote == 'aosp':
google_projects.append(project)
else:
github_projects.append(project) cur_env=os.environ.copy()
cur_env["http_proxy"]=http_proxy
cur_env["https_proxy"]=https_proxy
# 同步来自Google的Project
for project in google_projects:
sync_project(project, cur_env)
sys.exit() # 同步来自Github的Project
for project in github_projects:
sync_project(project) # 输出同步出错的Project
if len(errorsync_projects) != 0:
print '>>> 同步出现了错误的Project: '
for project in errorsync_projects:
print project print '>>> 请执行命令以重新同步Project: '
for project in errorsync_projects:
if project in google_projects:
sync_cmd="env http_proxy=%s https_proxy=%s repo sync %s" %(http_proxy, https_proxy, project) else:
sync_cmd="repo sync %s" %project
print sync_cmd

保存脚本到 sync_split.py,同步的时候执行:

  cd /path/to/src

  python sync_split.py

Enjoy!

〖Android〗代理与正常网络分开同步CyangenMod源码的更多相关文章

  1. Okhttp同步请求源码分析

    进阶android,OKhttp源码分析——同步请求的源码分析 OKhttp是我们经常用到的框架,作为开发者们,我们不单单要学会灵活使用,还要知道他的源码是如何设计的. 今天我们来分析一下OKhttp ...

  2. android Service Activity三种交互方式(付源码)(转)

    android Service Activity三种交互方式(付源码) Android应用服务器OSBeanthread  android Service Binder交互通信实例 最下边有源代码: ...

  3. 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING

    <Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th  2014 Email:skyseraph00@163.com 更多精彩请直接 ...

  4. Android反编译(一)之反编译JAVA源码

    Android反编译(一) 之反编译JAVA源码 [目录] 1.工具 2.反编译步骤 3.实例 4.装X技巧 1.工具 1).dex反编译JAR工具  dex2jar   http://code.go ...

  5. 40 网络相关函数(八)——live555源码阅读(四)网络

    40 网络相关函数(八)——live555源码阅读(四)网络 40 网络相关函数(八)——live555源码阅读(四)网络 简介 15)writeSocket向套接口写数据 TTL的概念 函数send ...

  6. 39 网络相关函数(七)——live555源码阅读(四)网络

    39 网络相关函数(七)——live555源码阅读(四)网络 39 网络相关函数(七)——live555源码阅读(四)网络 简介 14)readSocket从套接口读取数据 recv/recvfrom ...

  7. 38 网络相关函数(六)——live555源码阅读(四)网络

    38 网络相关函数(六)——live555源码阅读(四)网络 38 网络相关函数(六)——live555源码阅读(四)网络 简介 12)makeSocketNonBlocking和makeSocket ...

  8. 37 网络相关函数(五)——live555源码阅读(四)网络

    37 网络相关函数(五)——live555源码阅读(四)网络 37 网络相关函数(五)——live555源码阅读(四)网络 简介 10)MAKE_SOCKADDR_IN构建sockaddr_in结构体 ...

  9. 36 网络相关函数(四)——live555源码阅读(四)网络

    36 网络相关函数(四)——live555源码阅读(四)网络 36 网络相关函数(四)——live555源码阅读(四)网络 简介 7)createSocket创建socket方法 8)closeSoc ...

随机推荐

  1. Universal-Image-Loader解析(一)——ImageLoaderConfiguration的详细配置

    Universal-Image-Loader这个开源框架又来给我们造福了,它是一个图片加载框架,主要强大在于可以用于网络等图片源的加载,并且有多重缓存机制.先给出其项目地址:https://githu ...

  2. .Net AppDomain详解(一)

    AppDomain是CLR的运行单元,它可以加载Assembly.创建对象以及执行程序.AppDomain是CLR实现代码隔离的基本机制. 每一个AppDomain可以单独运行.停止:每个AppDom ...

  3. [转]PHP: 深入pack/unpack

    From : http://my.oschina.net/goal/blog/195749 http://www.w3school.com.cn/php/func_misc_pack.asp PHP作 ...

  4. java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest

    错误信息 查看Console标签页: 这儿提示找不到HttpServletRequest类. 解决办法 规则文件更新的时候需要调用servlet-api.jar相关的类,如果您的系统环境下无法找到这个 ...

  5. iOS开发-UINavigationBar和Status Bar实用技巧

    iOS7之后关于UINavigationBar和Status  Bar都发生了一系列的改变,如果不需要兼容iOS7之后的设备,按照网上有些资料去解决问题会踩到一些坑.在iOS 7中,我们可以修改每个V ...

  6. C# Win32控制台应用程序忽略 Ctrl + C,阻止程序退出

    C# Win32控制台应用程序忽略 Ctrl + C,阻止程序退出,这里使用到了Windows API SetConsoleCtrlHandler函数 注意:在VS中调试执行时,在处理程序例程中设置断 ...

  7. android 框架层 常用类介绍

    名称 功能描述 示意图 activitymanager 管理应用程序的周期并提供常用的回退功能 window manager 窗口管理者 content provider 用于访问另一个的数据,或者共 ...

  8. Android -- ConditionVariable

    线程操作经常用到wait和notify,用起来稍显繁琐,而Android给我们封装好了一个ConditionVariable类,用于线程同步.提供了三个方法block().open().close() ...

  9. GIF添加3D加速

    由于浏览器内核对Gif格式的图片会产生卡的情况,所以我们需要告诉浏览器,开启一下加速,方法很简单,就是利用css3的特性,强制告诉浏览器,这是个元素,需要3D转换,请务必开启加速效果 方法1 给gif ...

  10. “Uncaught TypeError: Cannot call method 'createChild' of undefined" 问题的解决

    Uncaught TypeError: Cannot call method 'createChild' of undefined 我在使用Ext 4.1.1做grid.Panel,然后chrome爆 ...