diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index 0fde3536..8620f899 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -485,13 +485,13 @@ def checkupdates_app(app): pass elif mode.startswith('Version '): pattern = mode[8:] + suffix = '' if pattern.startswith('+'): try: - suffix, pattern = pattern.split(' ', 1) + suffix, pattern = pattern[1:].split(' ', 1) except ValueError: raise MetaDataException("Invalid AUM: " + mode) - else: - suffix = '' + gotcur = False latest = None for build in app.builds: @@ -507,9 +507,9 @@ def checkupdates_app(app): newbuild = copy.deepcopy(latest) newbuild.disable = False newbuild.versionCode = app.CurrentVersionCode - newbuild.versionName = app.CurrentVersion + suffix + newbuild.versionName = app.CurrentVersion + suffix.replace('%c', newbuild.versionCode) logging.info("...auto-generating build for " + newbuild.versionName) - commit = pattern.replace('%v', newbuild.versionName) + commit = pattern.replace('%v', app.CurrentVersion) commit = commit.replace('%c', newbuild.versionCode) newbuild.commit = commit app.builds.append(newbuild) diff --git a/tests/checkupdates.TestCase b/tests/checkupdates.TestCase index 503f6b76..ab68cd8d 100755 --- a/tests/checkupdates.TestCase +++ b/tests/checkupdates.TestCase @@ -32,6 +32,58 @@ class CommonTest(unittest.TestCase): os.makedirs(self.tmpdir) os.chdir(self.basedir) + def test_autoupdatemode_no_suffix(self): + fdroidserver.checkupdates.options = mock.Mock() + fdroidserver.checkupdates.options.auto = 'bleh' + fdroidserver.checkupdates.config = {} + + app = fdroidserver.metadata.App() + app.id = 'loop.starts.shooting' + app.metadatapath = 'metadata/' + app.id + '.yml' + app.CurrentVersion = '1.1.8-fdroid' + app.CurrentVersionCode = 10108 + app.UpdateCheckMode = 'HTTP' + app.AutoUpdateMode = 'Version %v' + + build = fdroidserver.metadata.Build() + build.versionCode = app.CurrentVersionCode + build.versionName = app.CurrentVersion + app.builds.append(build) + + with mock.patch('fdroidserver.checkupdates.check_http', lambda app: ('1.1.9', 10109)): + with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): + with mock.patch('subprocess.call', lambda cmd: 0): + fdroidserver.checkupdates.checkupdates_app(app) + build = app.builds[-1] + self.assertEqual(build.versionName, '1.1.9') + self.assertEqual(build.commit, '1.1.9') + + def test_autoupdatemode_suffix(self): + fdroidserver.checkupdates.options = mock.Mock() + fdroidserver.checkupdates.options.auto = 'bleh' + fdroidserver.checkupdates.config = {} + + app = fdroidserver.metadata.App() + app.id = 'loop.starts.shooting' + app.metadatapath = 'metadata/' + app.id + '.yml' + app.CurrentVersion = '1.1.8-fdroid' + app.CurrentVersionCode = 10108 + app.UpdateCheckMode = 'HTTP' + app.AutoUpdateMode = 'Version +.%c-fdroid v%v_%c' + + build = fdroidserver.metadata.Build() + build.versionCode = app.CurrentVersionCode + build.versionName = app.CurrentVersion + app.builds.append(build) + + with mock.patch('fdroidserver.checkupdates.check_http', lambda app: ('1.1.9', 10109)): + with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): + with mock.patch('subprocess.call', lambda cmd: 0): + fdroidserver.checkupdates.checkupdates_app(app) + build = app.builds[-1] + self.assertEqual(build.versionName, '1.1.9.10109-fdroid') + self.assertEqual(build.commit, 'v1.1.9_10109') + def test_checkupdates_app_http(self): fdroidserver.checkupdates.options = mock.Mock() fdroidserver.checkupdates.options.auto = 'bleh'