| |
@@ -3,6 +3,7 @@
|
| |
import collections
|
| |
import copy
|
| |
import json
|
| |
+ import re
|
| |
import subprocess
|
| |
|
| |
import semantic_version as semver
|
| |
@@ -116,11 +117,43 @@
|
| |
self.license = None
|
| |
self.license_file = None
|
| |
self.readme = None
|
| |
- self.description = None
|
| |
+ self._description = None
|
| |
+ self._summary = None
|
| |
self.targets = set()
|
| |
self.dependencies = {}
|
| |
self.dev_dependencies = set()
|
| |
|
| |
+ @property
|
| |
+ def description(self):
|
| |
+ return self._description
|
| |
+
|
| |
+ @property
|
| |
+ def summary(self):
|
| |
+ return self._summary
|
| |
+
|
| |
+ @description.setter
|
| |
+ def description(self, description):
|
| |
+ # https://salsa.debian.org/rust-team/debcargo/blob/master/src/crates.rs
|
| |
+ # get_summary_description()
|
| |
+ if description is None:
|
| |
+ self._description = self._summary = None
|
| |
+ return
|
| |
+ description = description.replace('\n\n', '\r').replace('\n', ' ').replace('\r', '\n').strip()
|
| |
+ description = re.sub(r'^(?:a|an|the)\s+', '', description, flags=re.I)
|
| |
+ description = f'{description[0].upper()}{description[1:]}'
|
| |
+ if description[-1] != '.':
|
| |
+ description = f'{description}.'
|
| |
+
|
| |
+ p1 = description.find('.')
|
| |
+ p2 = description.find('\n')
|
| |
+ if p2 != -1:
|
| |
+ p = min(p1, p2)
|
| |
+ else:
|
| |
+ p = p1
|
| |
+
|
| |
+ self._description = description
|
| |
+ self._summary = description[:p]
|
| |
+
|
| |
@classmethod
|
| |
def from_json(cls, metadata):
|
| |
md = metadata
|
| |