diff --git a/swh/storage/in_memory.py b/swh/storage/in_memory.py --- a/swh/storage/in_memory.py +++ b/swh/storage/in_memory.py @@ -618,7 +618,8 @@ if rel['id'] not in self._releases: rel = copy.deepcopy(rel) rel['date'] = normalize_timestamp(rel['date']) - self._person_add(rel['author']) + if rel['author']: + self._person_add(rel['author']) self._objects[rel['id']].append( ('release', rel['id'])) self._releases[rel['id']] = rel diff --git a/swh/storage/sql/40-swh-func.sql b/swh/storage/sql/40-swh-func.sql --- a/swh/storage/sql/40-swh-func.sql +++ b/swh/storage/sql/40-swh-func.sql @@ -660,6 +660,7 @@ begin with t as ( select distinct author_fullname as fullname, author_name as name, author_email as email from tmp_release + where author_fullname is not null ) insert into person (fullname, name, email) select fullname, name, email from t where not exists ( diff --git a/swh/storage/tests/test_storage.py b/swh/storage/tests/test_storage.py --- a/swh/storage/tests/test_storage.py +++ b/swh/storage/tests/test_storage.py @@ -1110,6 +1110,20 @@ actual_result = self.storage.release_add([self.release, self.release2]) self.assertEqual(actual_result, {'release:add': 0}) + def test_release_add_no_author_date(self): + release = self.release.copy() + release['author'] = None + release['date'] = None + + actual_result = self.storage.release_add([release]) + self.assertEqual(actual_result, {'release:add': 1}) + + end_missing = self.storage.release_missing([self.release['id']]) + self.assertEqual([], list(end_missing)) + + self.assertEqual(list(self.journal_writer.objects), + [('release', release)]) + def test_release_get(self): # given self.storage.release_add([self.release, self.release2])