Skip to content

Commit

Permalink
* complexity reduce
Browse files Browse the repository at this point in the history
  • Loading branch information
Jintin committed Jan 10, 2016
1 parent 074dfc2 commit f5dcbd1
Show file tree
Hide file tree
Showing 10 changed files with 76 additions and 54 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# andle
[![PyPI version](https://badge.fury.io/py/andle.svg)](https://badge.fury.io/py/andle) [![Build Status](https://travis-ci.org/Jintin/andle.svg?branch=master)](https://travis-ci.org/Jintin/andle)

andle is a Android tool help you sync dependencies, sdk or build tool version.
andle is an Android tool to help you sync dependencies, sdk or build tool version.

## Installation
Simple install by [pip](http:https://pip.readthedocs.org/en/stable/installing):
Expand Down
2 changes: 1 addition & 1 deletion andle/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import andle.android
import andle.sdk

VERSION = "1.4.3"
VERSION = "1.5.0"


def update(path, dryrun, remote, gradle):
Expand Down
72 changes: 36 additions & 36 deletions andle/android.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import andle.gradle

COMPILE_TAGS = ["compile", "Compile"]
GRADLE_TAGS = ["classpath"]

is_dryrun = False
check_remote = False
Expand All @@ -21,16 +20,22 @@ def update(path, data, dryrun=False, remote=False, gradle=False):
global check_gradle
check_gradle = gradle

global is_modify
is_modify = False

gradle_version = andle.gradle.load()

for file in filter(path, "build.gradle"):
parse_dependency(file, data)

if check_gradle:
for file in filter(path, "gradle-wrapper.properties"):
parse_gradle(file, gradle_version)


def filter(path, name):
result = []
for root, dir, files in os.walk(path):
for file in fnmatch.filter(files, "build.gradle"):
parse_dependency(root + "/" + file, data)
if check_gradle and gradle_version:
for file in fnmatch.filter(files, "gradle-wrapper.properties"):
parse_gradle(root + "/" + file, gradle_version)
for file in fnmatch.filter(files, name):
result.append(root + "/" + file)
return result


def parse_gradle(path, version):
Expand Down Expand Up @@ -59,34 +64,30 @@ def parse_dependency(path, data):
io = f.readlines()

new_data = ""
find_sdk = False
find_tools = False
global modify
modify = False
deps = data["dependency"]

global line
for line in io:
compare = line.strip()
word = line.split()
if word.__len__() == 0:
continue
# find compileSdkVersion tag
if not find_sdk and line.__contains__("compileSdkVersion"):
find_sdk = True
platforms = word[1]
update_value("compileSdkVersion", platforms, data["platforms"])
# find buildToolsVersion tag
elif not find_tools and line.__contains__("buildToolsVersion"):
find_tools = True
buildToolsVersion = word[1].replace("\"", "")
update_value("buildToolsVersion", buildToolsVersion, data["build-tools"])
# find compile tag
elif any(word[0].endswith(compile) for compile in COMPILE_TAGS):
check_version(word, deps, check_remote)
# find gradle tag
elif check_gradle and any(compare.startswith(gradle) for gradle in GRADLE_TAGS):
check_version(word, deps, check_gradle)
if word.__len__() >= 2:
first = word[0]

# find compileSdkVersion tag
if first == "compileSdkVersion":
platforms = word[1]
update_value("compileSdkVersion", platforms, data["platforms"])
# find buildToolsVersion tag
elif first == "buildToolsVersion":
buildToolsVersion = word[1].replace("\"", "")
update_value("buildToolsVersion", buildToolsVersion, data["build-tools"])
# find compile tag
elif any(first.endswith(compile) for compile in COMPILE_TAGS):
check_version(word, deps, check_remote)
# find gradle tag
elif check_gradle and first.startswith("classpath"):
check_version(word, deps, check_gradle)
new_data += line

# save back
Expand All @@ -100,19 +101,18 @@ def check_version(word, deps, check_online):
tag = dep[:dep.rfind(":")]
version = dep[dep.rfind(":") + 1:]

if version.__contains__("@"):
if "@" in version:
version = version[:version.find("@")]
if deps.__contains__(tag):
if tag in deps:
update_value(tag, version, deps[tag])
elif check_online:
online_version = andle.remote.load(tag)
if online_version != None:
update_value(tag, version, online_version)
deps[tag] = online_version
update_value(tag, version, online_version)
deps[tag] = online_version


def update_value(name, old, new):
if old == new:
if old == new or new == None:
return
print(name + ": " + old + " -> " + new)
global modify
Expand Down
17 changes: 5 additions & 12 deletions andle/sdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import os
import sys
import version
from os.path import expanduser

DATA_PATH = expanduser("~") + "/.andle"
Expand Down Expand Up @@ -65,16 +66,8 @@ def find_dependency(data, tag, path):


def update_value(var, obj, key):
if not key in obj:
obj[key] = var
return
list1 = obj[key].split(".")
list2 = var.split(".")
index = 0

while list1[index] == list2[index]:
if list1.__len__() <= index + 1 or list2.__len__() <= index + 1:
return list1.__len__() < list2.__len__()
index += 1
if list1[index] < list2[index]:
if key in obj:
if version.newer(obj[key], var) > 0:
obj[key] = var
else:
obj[key] = var
14 changes: 14 additions & 0 deletions andle/tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import andle.android
import andle.remote
import andle.gradle
import andle.version


class TestAndle(TestCase):
Expand Down Expand Up @@ -58,3 +59,16 @@ def test_gradle(self):
"""
value = andle.gradle.load("file:https://" + self.CURRENT_PATH + "/gradle/version")
self.assertEqual(value, "2.8", "version not match")

def test_version(self):
"""
version number test
"""
assert andle.version.newer('1', '2') == 1
assert andle.version.newer('2', '1') == -1
assert andle.version.newer('1', '1') == 0
assert andle.version.newer('13.0.1', '13.00.02') == 1
assert andle.version.newer('1.1.1.1', '1.1.1.1') == 0
assert andle.version.newer('1.1.1.2', '1.1.1.1') == -1
assert andle.version.newer('3.1.1.0', '3.1.2.10') == 1
assert andle.version.newer('1.1', '1.10') == 1
1 change: 0 additions & 1 deletion andle/tests/dest/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,5 @@ android {
dependencies {
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.google.android.gms:play-services:8.1.0'
compile 'com.facebook.android:facebook-android-sdk:7.0'
androidTestCompile 'com.android.support.test:runner:0.4.1'
}
1 change: 0 additions & 1 deletion andle/tests/src/new.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,5 @@ android {
dependencies {
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.google.android.gms:play-services:8.1.0'
compile 'com.facebook.android:facebook-android-sdk:7.0'
androidTestCompile 'com.android.support.test:runner:0.4.1'
}
1 change: 0 additions & 1 deletion andle/tests/src/old.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,5 @@ android {
dependencies {
compile 'com.android.support:appcompat-v7:22.0.1'
compile 'com.google.android.gms:play-services:7.8.0'
compile 'com.facebook.android:facebook-android-sdk:7.0'
androidTestCompile 'com.android.support.test:runner:0.4'
}
18 changes: 18 additions & 0 deletions andle/version.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#!/usr/bin/env python

def newer(version1, version2):

parts1 = [x for x in version1.split('.')]
parts2 = [x for x in version2.split('.')]

# fill up the shorter version with zeros ...
lendiff = len(parts1) - len(parts2)
if lendiff > 0:
parts2.extend([0] * lendiff)
elif lendiff < 0:
parts1.extend([0] * (-lendiff))

for i, p in enumerate(parts1):
ret = -cmp(p, parts2[i])
if ret: return ret
return 0
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from setuptools import setup

setup(name='andle',
version='1.4.3',
version='1.5.0',
description='android dependency sync tool',
long_description='andle is a command line tool to help you sync dependencies, sdk or build tool version in gradle base Android projects.',
keywords='android gradle config build version dependency sync',
Expand Down

0 comments on commit f5dcbd1

Please sign in to comment.