def get_child_module_pom(self, unique_project, version, flag="pull"): ''' 解析子模块pom.xml文件 ''' if 'push' == flag: return Pom('pom.xml') unique_project = unique_project.split('.') pom_file = default_libpath for c in unique_project: pom_file = os.path.join(pom_file, c) pom_file = os.path.join(pom_file, version, 'pom.xml') #print(pom_file) return Pom(pom_file)
def main(dependencies_path='dependencies'): pom = Pom(path.join(path.dirname(path.abspath(__file__)), 'pom.xml'), repositories=( "http://m2.neo4j.org/", "http://repo1.maven.org/maven2/", "http://repo2.maven.org/maven2/", "http://mirrors.ibiblio.org/pub/mirrors/maven2/", )) # Load dependancies dependencies = [] jars = [] for dependency, include in pom.download_dependencies(dependencies_path): dependencies.append(dependency) if True or include: #XXX: Add the jar (file only) to the inclusions list jars.append(path.split(dependency)[1]) test.dependencies = test_dependencies = [] for jar in jars: test_dependencies.append(path.join(dependencies_path, jar)) # Configure setup packages = [ 'neo4j', 'neo4j.model', 'neo4j._backend', 'neo4j._hooks', 'neo4j.classes', ] args = dict( cmdclass=dict(build_ext=build_extensions, test=test), # The source structure is not defined in the pom, define it here packages=packages, package_dir={ 'neo4j': 'src/main/python/neo4j', 'neo4j.classes': dependencies_path }, # Include the runtime dependencies package_data={'neo4j.classes': jars}, # Get author from the developers in the pom author=pom.developer('Author', 'name'), author_email=pom.developer('Author', 'email'), # Get maintainer from the developers in the pom maintainer=pom.developer('Maintainer', 'name'), maintainer_email=pom.developer('Maintainer', 'email'), # Get the extension modules for this Python implementation ext_modules=extension_modules(packages, dependencies), ) setuptools_arguments(args, zip_safe=False) # Get extra attributes from the pom for attr in 'name,version,description,url'.split(','): args[attr] = pom[attr] # Read descriptions from files readme = open('README.txt') args['long_description'] = readme.read() readme.close() copyright = open('COPYRIGHT.txt') args['license'] = copyright.read() copyright.close() # Run the setup system setup(**args)
def main(dependencies_path='dependencies'): pom = Pom( path.join(path.dirname(path.abspath(__file__)), 'pom.xml'), repositories=( "http://m2.neo4j.org/", "http://repo1.maven.org/maven2/", "http://repo2.maven.org/maven2/", "http://mirrors.ibiblio.org/pub/mirrors/maven2/", )) # Load dependancies dependencies = [] jars = [] for dependency, include in pom.download_dependencies(dependencies_path): dependencies.append(dependency) if True or include: #XXX: Add the jar (file only) to the inclusions list jars.append(path.split(dependency)[1]) test.dependencies = test_dependencies = [] for jar in jars: test_dependencies.append(path.join(dependencies_path, jar)) # Configure setup packages = [ 'neo4j', 'neo4j.model', 'neo4j._backend', 'neo4j._hooks', 'neo4j.classes', ] args = dict( cmdclass=dict(build_ext=build_extensions, test=test), # The source structure is not defined in the pom, define it here packages=packages, package_dir={ 'neo4j': 'src/main/python/neo4j', 'neo4j.classes': dependencies_path }, # Include the runtime dependencies package_data={'neo4j.classes': jars}, # Get author from the developers in the pom author=pom.developer('Author', 'name'), author_email=pom.developer('Author', 'email'), # Get maintainer from the developers in the pom maintainer=pom.developer('Maintainer', 'name'), maintainer_email=pom.developer('Maintainer', 'email'), # Get the extension modules for this Python implementation ext_modules=extension_modules(packages, dependencies), ) setuptools_arguments(args, zip_safe=False) # Get extra attributes from the pom for attr in 'name,version,description,url'.split(','): args[attr] = pom[attr] # Read descriptions from files readme = open('README.txt') args['long_description'] = readme.read() readme.close() copyright = open('COPYRIGHT.txt') args['license'] = copyright.read() copyright.close() # Run the setup system setup(**args)
def verify_version_nums(self): print("") #pom.xml 版本号 pom = Pom('pom.xml') print("pom.xml".ljust(30, ' ') + 'version: %s' % (pom.version[0])) #.c 版本号 pomfile = os.path.join(os.getcwd(), 'src', 'main', 'ver_%s.c' % (pom.artifactId[0])) ret = open_file(pomfile) if ret: content, charset = ret[0], ret[1] majorpattern = re.compile(r'\/\*- major\*\/\s{0,5}\d{1,3},') major = re.search(r'\d{1,3}', majorpattern.search(content).group()) if major: major = major.group() minorpattern = re.compile(r'\/\*- minor\*\/\s{0,5}\d{1,3},') minor = re.search(r'\d{1,3}', minorpattern.search(content).group()) if minor: minor = minor.group() patchpattern = re.compile(r'\/\*- patch\*\/\s{0,5}\d{1,3},') patch = re.search(r'\d{1,3}', patchpattern.search(content).group()) if patch: patch = patch.group() cversion = major + "." + minor + "." + patch temp = "ver_%s.c " % (pom.artifactId[0]) print(temp.ljust(30, ' ') + 'version: %s' % (cversion)) #.cpp 版本号 utestfile = os.path.join(os.getcwd(), 'src', 'test_cppunit', '%s_test.cpp' % (pom.artifactId[0])) ret = open_file(utestfile) if ret: content, charset = ret[0], ret[1] majorpattern = re.compile( r'CPPUNIT_EASSERT\(\s?\d{1,3},\s?ver_%s.major' % (pom.artifactId[0])) major = re.search(r'\d{1,3}', majorpattern.search(content).group()) if major: major = major.group() minorpattern = re.compile( r'CPPUNIT_EASSERT\(\s?\d{1,3},\s?ver_%s.minor' % (pom.artifactId[0])) minor = re.search(r'\d{1,3}', minorpattern.search(content).group()) if minor: minor = minor.group() patchpattern = re.compile( r'CPPUNIT_EASSERT\(\s?\d{1,3},\s?ver_%s.patch' % (pom.artifactId[0])) patch = re.search(r'\d{1,3}', patchpattern.search(content).group()) if patch: patch = patch.group() utestversion = major + "." + minor + "." + patch temp = "%s_test.cpp " % (pom.artifactId[0]) print(temp.ljust(30, ' ') + 'version: %s' % (utestversion)) if pom.version[0] == utestversion and utestversion == cversion: print("校验版本号一致".center(30, "=")) else: print(" 版本号不一致请检查 ".center(30, "="))
def arm_project_elf2bin(self): pom = Pom('pom.xml') debug_dir = os.path.join(os.getcwd(),'bin','Debug') if os.path.exists(debug_dir): os.chdir(debug_dir) for filename in os.listdir(debug_dir): #find .elf if filename.endswith('.elf'): prefix = filename.split('.elf')[0] tobin = "%s.bin"%(pom.artifactId[0]) tohex = "%s.hex"%(pom.artifactId[0]) try: os.system("fromelf --bin --output=%s %s"%(tobin, filename )) os.system("fromelf --i32 --output=%s %s --base=0x08000000"%(tohex, filename )) print("\n create .bin or hex success ") except: print("\n create .bin or hex fail ") else: logging.info(" %s not exist please check ..."%(debug_dir)) os.chdir(self.rootpath)
def update_dependency_dict(dependency_dict, root_pom_id): root_pom_info = root_pom_id.split(';') root_pom_group_artifact = root_pom_info[0] root_pom_group_info = root_pom_group_artifact.split(':') root_pom_group_id = root_pom_group_info[0] root_pom_artifact_id = root_pom_group_info[1] root_pom_version = root_pom_info[1] root_pom = Pom(root_pom_group_id, root_pom_artifact_id, root_pom_version, 1) q = queue.Queue() q.put(root_pom) visited_pom_dict = {root_pom_group_artifact: root_pom_version} pom_count = 1 log.info('Added root pom.depth = {}, url = {}.'.format( root_pom.depth, root_pom.to_url())) while not q.empty(): pom = q.get() pom_url = pom.to_url() log.info('Get dependencies from pom. depth = {}, url = {}.'.format( pom.depth, pom_url)) try: tree = elementTree.ElementTree(file=request.urlopen(pom_url)) except HTTPError: log.warn('Error in open {}'.format(pom_url)) continue project_element = tree.getroot() property_dict = {} parent_element = project_element.find('./maven:parent', MAVEN_NAME_SPACE) if parent_element is not None: # get properties from parent parent_group_id = parent_element.find( './maven:groupId', MAVEN_NAME_SPACE).text.strip(' ${}') parent_artifact_id = parent_element.find( './maven:artifactId', MAVEN_NAME_SPACE).text.strip(' ${}') parent_version = parent_element.find( './maven:version', MAVEN_NAME_SPACE).text.strip(' ${}') parent_pom = Pom(parent_group_id, parent_artifact_id, parent_version, pom.depth + 1) parent_pom_url = parent_pom.to_url() parent_tree = elementTree.ElementTree( file=request.urlopen(parent_pom_url)) parent_project_element = parent_tree.getroot() log.debug( 'Get properties from parent pom. parent_pom_url = {}.'.format( parent_pom_url)) update_property_dict(parent_project_element, property_dict) update_property_dict(project_element, property_dict) # get dependencies dependency_elements = project_element.findall( './maven:dependencyManagement/maven:dependencies/maven:dependency', MAVEN_NAME_SPACE) for dependency_element in dependency_elements: group_id = dependency_element.find( './maven:groupId', MAVEN_NAME_SPACE).text.strip(' ${}') # some group_id contain 'project.groupId', so put project_version first. if group_id in property_dict: group_id = property_dict[group_id] artifact_id = dependency_element.find( './maven:artifactId', MAVEN_NAME_SPACE).text.strip(' ') version = dependency_element.find( './maven:version', MAVEN_NAME_SPACE).text.strip(' ${}') key = group_id + ':' + artifact_id if version in property_dict: version = property_dict[version] if key not in dependency_dict: dependency_dict[key] = version log.debug( 'Dependency version added. key = {}, value = {}'.format( key, version)) elif version != dependency_dict[key]: log.debug( 'Dependency version skipped. key = {}, version = {}, dependency_dict[key] = {}.' .format(key, version, dependency_dict[key])) artifact_type = dependency_element.find('./maven:type', MAVEN_NAME_SPACE) artifact_scope = dependency_element.find('./maven:scope', MAVEN_NAME_SPACE) if all( [artifact_type, artifact_scope]) and artifact_type.text.strip( ) == 'pom' and artifact_scope.text.strip() == 'import': new_pom = Pom(group_id, artifact_id, version, pom.depth + 1) new_pom_group_artifact = '{}:{}'.format(group_id, artifact_id) if new_pom_group_artifact not in visited_pom_dict: q.put(new_pom) visited_pom_dict[new_pom_group_artifact] = version pom_count = pom_count + 1 log.debug('Added new pom. depth = {}, url = {}.'.format( new_pom.depth, new_pom.to_url())) else: log.warn( 'Pom exist in visited_pom_dict. depth = {}, url = {}.'. format(new_pom.depth, new_pom.to_url())) log.info('Root pom summary. pom_count = {}, root_pom_url = {}'.format( pom_count, root_pom.to_url())) return dependency_dict
def update_dependency_dict(dependency_dict, root_pom_id): root_pom_info = root_pom_id.split(':') root_pom_group_id = root_pom_info[0] root_pom_artifact_id = root_pom_info[1] root_pom_version = get_version_from_external_dependencies(root_pom_id) root_pom = Pom(root_pom_group_id, root_pom_artifact_id, root_pom_version, 1) q = queue.Queue() q.put(root_pom) pom_count = 1 log.info('Added root pom: {}, depth = {}.'.format(root_pom.to_url(), root_pom.depth)) while not q.empty(): pom = q.get() pom_url = pom.to_url() log.info('Get dependencies from pom: {}, depth = {}.'.format( pom_url, pom.depth)) tree = elementTree.ElementTree(file=request.urlopen(pom_url)) project_element = tree.getroot() name_space = {'maven': 'http://maven.apache.org/POM/4.0.0'} # get properties properties = project_element.find('maven:properties', name_space) property_dict = {} # some property contain 'project.version', so put 'project.version' into property_dict. version_element = project_element.find('./maven:version', name_space) if version_element is None: version_element = project_element.find( './maven:parent/maven:version', name_space) project_version = version_element.text.strip() property_dict['project.version'] = project_version # some property contain 'project.groupId', so put 'project.groupId' into property_dict. group_id_element = project_element.find('./maven:groupId', name_space) if group_id_element is None: group_id_element = project_element.find( './maven:parent/maven:groupId', name_space) group_id = group_id_element.text.strip() property_dict['project.groupId'] = group_id if properties is not None: for p in properties: key = p.tag.split('}', 1)[1] value = p.text.strip(' ${}') if value in property_dict: value = property_dict[value] property_dict[key] = value # sometimes project_version contains '${foo}', so update project_version. if project_version.startswith('${'): property_dict['project.version'] = property_dict[ project_version.strip(' ${}')] # get dependencies dependency_elements = project_element.findall( './maven:dependencyManagement/maven:dependencies/maven:dependency', name_space) for dependency_element in dependency_elements: group_id = dependency_element.find('./maven:groupId', name_space).text.strip(' ${}') # some group_id contain 'project.groupId', so put project_version first. if group_id in property_dict: group_id = property_dict[group_id] artifact_id = dependency_element.find('./maven:artifactId', name_space).text.strip(' ') version = dependency_element.find('./maven:version', name_space).text.strip(' ${}') key = group_id + ':' + artifact_id if version in property_dict: version = property_dict[version] if key not in dependency_dict: dependency_dict[key] = version log.debug( 'Dependency version added. key = {}, value = {}'.format( key, version)) elif version != dependency_dict[key]: log.debug( 'Dependency version skipped. key = {}, version = {}, dependency_dict[key] = {}.' .format(key, version, dependency_dict[key])) artifact_type = dependency_element.find('./maven:type', name_space) if artifact_type is not None and artifact_type.text.strip( ) == 'pom': new_pom = Pom(group_id, artifact_id, version, pom.depth + 1) q.put(new_pom) pom_count = pom_count + 1 log.debug('Added new pom: {}, depth = {}.'.format( new_pom.to_url(), new_pom.depth)) log.info('Root pom summary: root_pom = {}, pom_count = {}'.format( root_pom.to_url(), pom_count)) return dependency_dict
def cppproject_updateversion(self, dst_version): #logging.info("升级版本号to: %s"%dst_version) timestr = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) if not self.check_version(dst_version): return #修改pom文件 pom = Pom('pom.xml') old_version = pom.version[0] ret = open_file('pom.xml') if ret: content, charset = ret[0], ret[1] with open('pom.xml', mode="w+", encoding=charset) as file: content = re.sub(r'\<version\>.*\<\/version\>', "<version>%s</version>" % (dst_version), content, 1) file.write(content) file.close() else: logging.info(" auto update version pom.xml fail ") #修改.c文件中版本号 pomfile = os.path.join(os.getcwd(), 'src', 'main', 'ver_%s.c' % (pom.artifactId[0])) ret = open_file(pomfile) if ret: content, charset = ret[0], ret[1] with open(pomfile, mode="w+", encoding=charset) as file: temp = dst_version.split('.') major, minor, patch = temp[0], temp[1], temp[2] content = re.sub(r'\/\*- major\*\/\s{0,5}\d{1,3},', r'/*- major*/ %s,' % (major), content, 1) content = re.sub(r'\/\*- minor\*\/\s{0,5}\d{1,3},', r'/*- minor*/ %s,' % (minor), content, 1) content = re.sub(r'\/\*- patch\*\/\s{0,5}\d{1,3},', r'/*- patch*/ %s,' % (patch), content, 1) content += "\n/* author: %s update version: %s time:%s */" % ( getpass.getuser(), dst_version, timestr) file.write(content) file.close() else: logging.info(" auto update version .c fail ") #修改单元测试中版本号 utestfile = os.path.join(os.getcwd(), 'src', 'test_cppunit', '%s_test.cpp' % (pom.artifactId[0])) ret = open_file(utestfile) if ret: content, charset = ret[0], ret[1] with open(utestfile, mode="w+", encoding=charset) as file: temp = dst_version.split('.') major, minor, patch = temp[0], temp[1], temp[2] content = re.sub( r'CPPUNIT_EASSERT\(\s?\d{1,3},\s?ver_%s.major' % (pom.artifactId[0]), r'CPPUNIT_EASSERT( %s, ver_%s.major' % (major, pom.artifactId[0]), content, 1) content = re.sub( r'CPPUNIT_EASSERT\(\s?\d{1,3},\s?ver_%s.minor' % (pom.artifactId[0]), r'CPPUNIT_EASSERT( %s, ver_%s.minor' % (minor, pom.artifactId[0]), content, 1) content = re.sub( r'CPPUNIT_EASSERT\(\s?\d{1,3},\s?ver_%s.patch' % (pom.artifactId[0]), r'CPPUNIT_EASSERT( %s, ver_%s.patch' % (patch, pom.artifactId[0]), content, 1) file.write(content) file.close() else: logging.info(" auto update version .cpp fail ") print("\n auto update version from: %s to %s success " % (old_version, dst_version))
def __init__(self, pom): self.rootpath = os.getcwd() self.pom = Pom(pom)
class MavenAutoTools(object): def __init__(self, pom): self.rootpath = os.getcwd() self.pom = Pom(pom) def get_last_version(self, unique_project): ''' 获得最新版本号 None未install过文件 ''' unique_project = unique_project.split('.') basedir = default_libpath for c in unique_project: basedir = os.path.join(basedir, c) is_dirs_exists(basedir, True) os.chdir(basedir) versions = [] for root, dirs, files in os.walk(basedir): for dir in dirs: versions.append(dir) break os.chdir(self.rootpath) #chage dirs if versions: return max(versions) else: return None def get_child_module_pom(self, unique_project, version, flag="pull"): ''' 解析子模块pom.xml文件 ''' if 'push' == flag: return Pom('pom.xml') unique_project = unique_project.split('.') pom_file = default_libpath for c in unique_project: pom_file = os.path.join(pom_file, c) pom_file = os.path.join(pom_file, version, 'pom.xml') #print(pom_file) return Pom(pom_file) def transform_lib_absolute_address(self, unique_project, version, platform="Windows", flag="pull"): ''' :param unique_project: 类似 com.utest.cppunit :param version : 版本号 0.0.1 :param platform: Windows Linux :param flag : pull push return: {'project': None , 'depository':None } ''' childpom = self.get_child_module_pom(unique_project, version, flag) ret = {'project': None, 'depository': None} if not childpom.lib: #无库文件 return None unique_project = unique_project.split('.') if "Windows" == platform: if "pull" == flag: project = os.path.join(os.getcwd(), 'lib', 'Windows', '%s.lib' % (childpom.lib[0])) else: project = os.path.join(os.getcwd(), 'lib', 'Debug', '%s.lib' % (childpom.lib[0])) depository = os.path.join(default_libpath, unique_project[0], unique_project[1], unique_project[2]) depository = os.path.join(depository, version, childpom.lib[0] + '.lib') elif "Linux" == platform: if "pull" == flag: project = os.path.join(os.getcwd(), 'lib', 'ARMCC', 'lib%s.a' % (childpom.lib[0])) else: project = os.path.join(os.getcwd(), 'lib', "ARMCC", 'lib%s.a' % (childpom.lib[0])) depository = os.path.join(default_libpath, unique_project[0], unique_project[1], unique_project[2]) depository = os.path.join(depository, version, 'lib%s.a' % (childpom.lib[0])) else: pass ret['project'], ret['depository'] = project, depository return ret def transform_pom_absolute_address(self, unique_project, version, flag="pull"): ''' :param unique_project: 类似 com.utest.cppunit :param version : 版本号 0.0.1 :param flag : pull push return: {'project': None , 'depository':None } ''' childpom = self.get_child_module_pom(unique_project, version, flag) temp = unique_project ret = {'project': None, 'depository': None} if not childpom.lib: #无库文件 return None unique_project = unique_project.split('.') if "push" == flag: project = os.path.join(os.getcwd(), 'pom.xml') depository = os.path.join(default_libpath, unique_project[0], unique_project[1], unique_project[2]) depository = os.path.join(depository, version, 'pom.xml') else: project = os.path.join(os.getcwd(), 'pom', 'pom-%s-%s.xml' % (temp, version)) depository = os.path.join(default_libpath, unique_project[0], unique_project[1], unique_project[2]) depository = os.path.join(depository, version, 'pom.xml') ret['project'], ret['depository'] = project, depository return ret def transform_header_absolute_address(self, unique_project, version, flag="pull"): childpom = self.get_child_module_pom(unique_project, version, flag) unique_project = unique_project.split('.') if not childpom.header: return None #无需处理头文件 if 'pull' == flag: depository_prefix = os.path.join(default_libpath, unique_project[0], unique_project[1], unique_project[2]) depository_prefix = os.path.join(depository_prefix, version) #遍历拉取所有头文件 for header in childpom.header: depository = os.path.join(depository_prefix, header) if not childpom.header_prefix: project = os.path.join(os.getcwd(), 'include', header) else: project = os.path.join(os.getcwd(), 'include') for item in childpom.header_prefix: project = os.path.join(project, item) project = os.path.join(project, header) #copy copy_file(depository, project) else: depository_prefix = os.path.join(default_libpath, unique_project[0], unique_project[1], unique_project[2]) depository_prefix = os.path.join(depository_prefix, version) #遍历安装所有头文件 for header in childpom.header: depository = os.path.join(depository_prefix, header) if not childpom.header_prefix: project = os.path.join(os.getcwd(), 'src', 'include', header) else: project = os.path.join(os.getcwd(), 'src', 'include') for item in childpom.header_prefix: project = os.path.join(project, item) project = os.path.join(project, header) #copy copy_file(project, depository) return 0 def install_all_interface_files(self, platform="Windows"): try: moduel_info = self.pom.groupid[0] + '.' + self.pom.groupid[ 1] + '.' + self.pom.artifactId[0] # pom ret = self.transform_pom_absolute_address(moduel_info, self.pom.version[0], flag='push') copy_file(ret['project'], ret['depository']) # header ret = self.transform_header_absolute_address(moduel_info, self.pom.version[0], flag='push') if "Windows" == platform: # .lib ret = self.transform_lib_absolute_address(moduel_info, self.pom.version[0], platform="Windows", flag='push') copy_file(ret['project'], ret['depository']) else: # .a ret = self.transform_lib_absolute_address(moduel_info, self.pom.version[0], platform="Linux", flag='push') copy_file(ret['project'], ret['depository']) print('\n %s install files success ' % (moduel_info)) print(" moduel version: %s" % (self.pom.version[0])) except Exception as e: print('\n %s install files fail ' % (moduel_info)) print(" moduel version: %s" % (self.pom.version[0])) def repo_dependencys_file(self, platform="Windows"): print( "\n======================dependencies=============================" ) for key, value in self.pom.get_dependencies().items(): lastversion = self.get_last_version(key) if value: #获得指定版本 # pom ret = self.transform_pom_absolute_address(key, value, flag='pull') copy_file(ret['depository'], ret['project']) # header ret = self.transform_header_absolute_address(key, value, flag='pull') if "Windows" == platform: ret = self.transform_lib_absolute_address( key, value, platform="Windows", flag='pull') copy_file(ret['depository'], ret['project']) else: ret = self.transform_lib_absolute_address(key, value, platform="Linux", flag='pull') copy_file(ret['depository'], ret['project']) print(key.ljust(30, ' ') + 'version: %s' % (value)) else: # pom ret = self.transform_pom_absolute_address(key, lastversion, flag='pull') copy_file(ret['depository'], ret['project']) # header ret = self.transform_header_absolute_address(key, lastversion, flag='pull') if "Windows" == platform: ret = self.transform_lib_absolute_address( key, lastversion, platform="Windows", flag='pull') copy_file(ret['depository'], ret['project']) else: ret = self.transform_lib_absolute_address(key, lastversion, platform="Linux", flag='pull') copy_file(ret['depository'], ret['project']) print(key.ljust(30, ' ') + 'version: %s' % (lastversion)) print( "======================dependencies=============================\n" )