为了同步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!

最新文章

  1. Jenkins配置MSBuild编译.net4.6的项目
  2. NC WebService接口开发流程
  3. WebDriver一些常见问题的解决方法【转】
  4. Maven向本地仓库导入官方仓库没有的jar包
  5. js基础之动画(二)
  6. activity属性_ _activity 属性说明
  7. IOS学习4
  8. wndows 7 Wifi热点
  9. DJANGO增加超级用户
  10. SQL Server 查看空间使用情况的 5 种方法
  11. ui-router
  12. python爬取网易云音乐歌曲评论信息
  13. Container 、Injection
  14. pytest 简介与安装
  15. 一款html拼图游戏详解
  16. Java并发编程(八):线程调度——线程池
  17. SpringBoot + Thymeleaf + Validate验证
  18. eclipse报错GC overhead limit exceed,卡顿
  19. 利用Jenkins打包ISO和QCOW2镜像文件
  20. Oracle 参数文件

热门文章

  1. Spring data jpa Specification查询关于日期的范围搜索
  2. Memcache的安装与配置
  3. LaTeX技巧206:使用gather输入多行公式的技巧
  4. [leetcode]Multiply Strings @ Python
  5. 构建-14 Gradle使用技巧
  6. 网络监测 断网 网速 ping 完整案例 MD
  7. \r\n 如何转换成utf-8格式的,在jsp页面中正常显示换行
  8. 从头认识java-18.2 主要的线程机制(4)-优先级
  9. Axure-如何设置圆形组件
  10. nodejs pipe实现大文件拷贝