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

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

访问Github不需要翻墙,而同步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 name
  35. """
  36. cmd="repo sync %s" %project
  37. print '>>>', cmd
  38. # 执行同步
  39. process = subprocess.Popen(cmd, shell=True, env=env,\
  40. stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  41. # 实时读取STDOUT
  42. out = process.stdout.readline()
  43. while out:
  44. print out,
  45. out = process.stdout.readline()
  46. err = process.stderr.readline()
  47. # 实时读取STDERR
  48. while err:
  49. print err,
  50. err = process.stderr.readline()
  51. # 等待进程结束获得返回值
  52. process.poll()
  53. errcode = process.returncode
  54. # 若有错误追加到错误数组
  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_proxy
  71. cur_env["https_proxy"]=https_proxy
  72. # 同步来自Google的Project
  73. for project in google_projects:
  74. sync_project(project, cur_env)
  75. sys.exit()
  76.  
  77. # 同步来自Github的Project
  78. for project in github_projects:
  79. sync_project(project)
  80.  
  81. # 输出同步出错的Project
  82. if len(errorsync_projects) != 0:
  83. print '>>> 同步出现了错误的Project: '
  84. for project in errorsync_projects:
  85. print project
  86.  
  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) else:
  91. sync_cmd="repo sync %s" %project
  92. 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. EditText 限制输入,自定义样式,监听输入的字符,自动换行

    自动获取焦点 <!-- 添加:<requestFocus /> 会自动获取焦点 --> <EditText android:layout_width="matc ...

  2. 短址服务 api

    1  is.gd 他这个api简单: http://is.gd/api.php?longurl= 后面加网址就可以返回短址 2 Google URL Shortener API api地址: http ...

  3. 最近遇到了 timer1sec 定时调用的函数,出现了 时间久了,就不是每秒一次了,可能会慢的情况。如何解决呢?

    我想可以在timer1sec 调用四个线程,让四个线程来执行 具体代码,而不是在timer1sec一个线程 直接执行.这样,每个线程 不超过4s,那么没秒都会被调用到. 需要使用到的技术是 semap ...

  4. HTTPS那些事(三)攻击实例与防御

    在<HTTPS那些事(二)SSL证书>我描述了使用SSL证书时一些需要注意的安全问题,在这一篇文章里面我再演示一下针对HTTPS攻击的一些实例,通过这些实例能更安全的使用HTTPS.知己知 ...

  5. codeforce 192 div2解题报告

    今天大家一起做的div2,怎么说呢,前三题有点坑,好多特判.... A. Cakeminator 题目的意思是说,让你吃掉cake,并且是一行或者一列下去,但是必须没有草莓的存在.这道题目,就是判断一 ...

  6. 关于MAX30100心率的编程

    MAX30100是能够读取心率.血氧的传感器,通信方式是通过IIC进行通信. 其工作原理是通过红外led灯照射,能够得到心率的ADC值. 图为MAX30100的寄存器. 可以分为五类,状态寄存器.FI ...

  7. Pytorch多GPU并行处理

    可以参数2017coco detection 旷视冠军MegDet: MegDet 与 Synchronized BatchNorm PyTorch-Encoding官方文档对CGBN(cross g ...

  8. HDU—— 5159 Building Blocks

    Problem Description After enjoying the movie,LeLe went home alone. LeLe decided to build blocks. LeL ...

  9. Controller向View传递数据

    1.       使用ViewData传递数据 我们在Controller中定义如下: ViewData[“Message”] = “Hello word!”; 然后在View中读取Controlle ...

  10. 实例游戏内存修改器----CUI版本模拟

    实现说明: 目标进程内存中很可能存在多个你要搜索的值, 所以在进行第一次搜索的时候, 要把搜索到的地址记录下来,然后让用户改变要搜索的值,再在记录的地址中搜索,直到搜索到的地址惟一为止.为此写两个辅助 ...