blob: 18d4435858c7a22b295ca26455f4abbaf44d16d4 [file] [log] [blame]
Haibo Huang329e6812020-05-29 14:12:20 -07001# Copyright (C) 2018 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14"""Base class for all updaters."""
15
16from pathlib import Path
17
18import fileutils
ThiƩbaud Weksteen4ac289b2020-09-28 15:23:29 +020019# pylint: disable=import-error
Haibo Huang329e6812020-05-29 14:12:20 -070020import metadata_pb2 # type: ignore
21
22
23class Updater:
24 """Base Updater that defines methods common for all updaters."""
25 def __init__(self, proj_path: Path, old_url: metadata_pb2.URL,
26 old_ver: str) -> None:
27 self._proj_path = fileutils.get_absolute_project_path(proj_path)
28 self._old_url = old_url
29 self._old_ver = old_ver
30
31 self._new_url = metadata_pb2.URL()
32 self._new_url.CopyFrom(old_url)
33 self._new_ver = old_ver
34
Joel Galenson58eeae72021-04-07 12:44:31 -070035 self._has_errors = False
36
Haibo Huang329e6812020-05-29 14:12:20 -070037 def is_supported_url(self) -> bool:
38 """Returns whether the url is supported."""
39 raise NotImplementedError()
40
41 def check(self) -> None:
42 """Checks whether a new version is available."""
43 raise NotImplementedError()
44
45 def update(self) -> None:
46 """Updates the package.
47
48 Has to call check() before this function.
49 """
50 raise NotImplementedError()
51
52 @property
53 def project_path(self) -> Path:
54 """Gets absolute path to the project."""
55 return self._proj_path
56
57 @property
58 def current_version(self) -> str:
59 """Gets the current version."""
60 return self._old_ver
61
62 @property
63 def current_url(self) -> metadata_pb2.URL:
64 """Gets the current url."""
65 return self._old_url
66
67 @property
68 def latest_version(self) -> str:
69 """Gets latest version."""
70 return self._new_ver
71
72 @property
73 def latest_url(self) -> metadata_pb2.URL:
74 """Gets URL for latest version."""
75 return self._new_url
Chih-Hung Hsiehdd1915d2020-09-29 14:22:12 -070076
Joel Galenson58eeae72021-04-07 12:44:31 -070077 @property
78 def has_errors(self) -> bool:
79 """Gets whether this update had an error."""
80 return self._has_errors
81
Chih-Hung Hsiehdd1915d2020-09-29 14:22:12 -070082 def use_current_as_latest(self):
83 """Uses current version/url as the latest to refresh project."""
84 self._new_ver = self._old_ver
85 self._new_url = self._old_url