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

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

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

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

 1 #!/usr/bin/env python 2 # encoding: utf-8 3  4 import os,sys,subprocess 5 import xml.dom.minidom 6 from xml.dom.minidom import Node 7  8 # 代理环境 9 proxy_user=''10 proxy_pass=''11 proxy_host='123.123.123.123' # 请改12 proxy_port=12345 # 请改13 if len(proxy_user) == 0:14     http_proxy="http://%s:%d" %(proxy_host, proxy_port)15     https_proxy="http://%s:%d" %(proxy_host, proxy_port)16 else:17     http_proxy="http://%s:%s@%s:%d" %(proxy_user, proxy_pass, proxy_host, proxy_port)18     https_proxy="http://%s:%s@%s:%d" %(proxy_user, proxy_pass, proxy_host, proxy_port)19 proxyenv={"http_proxy":http_proxy, "https_proxy":https_proxy}20 21 # 解析.repo/manifest.xml文件,取出project节点22 doc = xml.dom.minidom.parse('.repo/manifest.xml')23 projects = doc.getElementsByTagName('project')24 25 github_projects=[]26 google_projects=[]27 28 errorsync_projects=[]29 30 # 执行同步函数31 def sync_project(project, env=None):32     """33     执行同步命令34     project: 期望同步的Project name35     """36     cmd="repo sync %s" %project37     print '>>>', cmd38     # 执行同步39     process = subprocess.Popen(cmd, shell=True, env=env,\40             stdout=subprocess.PIPE, stderr=subprocess.PIPE)41     # 实时读取STDOUT42     out = process.stdout.readline()43     while out:44         print out,45         out = process.stdout.readline()46     err = process.stderr.readline()47     # 实时读取STDERR48     while err:49         print err,50         err = process.stderr.readline()51     # 等待进程结束获得返回值52     process.poll()53     errcode = process.returncode54     # 若有错误追加到错误数组55     if errcode != 0:56         errorsync_projects.append(project)57 58 # 对project进行分类59 # AOSP的Project保存在 google_projects 数组60 # CyanogenMod的Project保存在 github_project 数组61 for node in projects:62     remote=node.getAttribute('remote')63     project=node.getAttribute('name')64     if remote == 'aosp':65         google_projects.append(project)66     else:67         github_projects.append(project)68 69 cur_env=os.environ.copy()70 cur_env["http_proxy"]=http_proxy71 cur_env["https_proxy"]=https_proxy72 # 同步来自Google的Project73 for project in google_projects:74     sync_project(project, cur_env)75     sys.exit()76 77 # 同步来自Github的Project78 for project in github_projects:79     sync_project(project)80 81 # 输出同步出错的Project82 if len(errorsync_projects) != 0:83     print '>>> 同步出现了错误的Project: '84     for project in errorsync_projects:85         print project86 87     print '>>> 请执行命令以重新同步Project: '88     for project in errorsync_projects:89         if project in google_projects:90             sync_cmd="env http_proxy=%s https_proxy=%s repo sync %s" %(http_proxy, https_proxy, project)91         else:92             sync_cmd="repo sync %s" %project93         print sync_cmd

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

  cd /path/to/src

  pythonsync_split.py

Enjoy!

更多相关文章

  1. android异步操作类----AsyncTask
  2. Android在真机调试的设置方法
  3. 初学Android,字符串,数字,尺寸,数组资源(十二)
  4. WakeLock & WifiLock的实现
  5. android 下自定义view, android.view.InflateException
  6. Android学习【3】Android开发问题记录
  7. android AV同步详解
  8. Android定时任务采用AlarmManager来实现,兼容8.0系统
  9. Android中资源文件中的字符串数组string-array

随机推荐

  1. Android实现仿gallery垂直滚动的效果
  2. Fresco属性
  3. android中点击空白处隐藏软键盘
  4. GitHub 优秀的 Android(安卓)开源项目
  5. Android(安卓)emulator中的system.img,use
  6. Android(安卓)Q访问公共外部存储受限
  7. android中常见的错误及解决办法
  8. 自定义ListView中的分割线
  9. 在Android中实现文件读写
  10. Android编译时主要瓶颈分析