• 〖Android〗代理与正常网络分开同步CyangenMod源码


    为了同步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)91         else:
    92             sync_cmd="repo sync %s" %project
    93         print sync_cmd

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

      cd /path/to/src

      python sync_split.py

    Enjoy!

  • 相关阅读:
    UVA 707
    我写了一起 Makefile(一)
    百度mp3接口
    MBProgressHUD -[__NSCFString sizeWithAttributes:]: unrecognized selector问题解决了
    BCM策略路由交换芯片
    HDU 4006 The kth great number AVL解
    PHP进口Excel至MySQL方法
    隐藏Console形式无效(继续1)
    优秀的前端project如何制定一个老师--html学习路径
    地址阵列
  • 原文地址:https://www.cnblogs.com/scue/p/4126879.html
Copyright © 2020-2023  润新知