Page MenuHomeSoftware Heritage

D101.id355.diff
No OneTemporary

D101.id355.diff

diff --git a/sql/swh-func.sql b/sql/swh-func.sql
--- a/sql/swh-func.sql
+++ b/sql/swh-func.sql
@@ -99,8 +99,7 @@
language sql
as $$
create temporary table tmp_occurrence_history(
- like occurrence_history including defaults,
- date timestamptz not null
+ like occurrence_history including defaults
) on commit drop;
alter table tmp_occurrence_history
drop column visits,
@@ -832,43 +831,39 @@
end;
$$;
-
+-- add a new origin_visit for origin origin_id at date.
+--
+-- Returns the new visit id.
+create or replace function swh_origin_visit_add(origin_id bigint, date timestamptz)
+ returns bigint
+ language sql
+as $$
+ with last_known_visit as (
+ select coalesce(max(visit), 0) as visit
+ from origin_visit
+ where origin = origin_id
+ )
+ insert into origin_visit (origin, date, visit, status)
+ values (origin_id, date, (select visit from last_known_visit) + 1, 'ongoing')
+ returning visit;
+$$;
-- add tmp_occurrence_history entries to occurrence_history
--
-- operates in bulk: 0. swh_mktemp(occurrence_history), 1. COPY to tmp_occurrence_history,
-- 2. call this function
-create or replace function swh_occurrence_history_add()
+create or replace function swh_occurrence_history_add(ori_id bigint, ori_visit bigint)
returns void
language plpgsql
as $$
declare
origin_id origin.id%type;
begin
- -- Create new visits
- with current_visits as (
- select distinct origin, date from tmp_occurrence_history
- ),
- new_visits as (
- select origin, date, (select coalesce(max(visit), 0)
- from origin_visit ov
- where ov.origin = cv.origin) as max_visit
- from current_visits cv
- where not exists (select 1 from origin_visit ov
- where ov.origin = cv.origin and
- ov.date = cv.date)
- )
- insert into origin_visit (origin, date, visit)
- select origin, date, max_visit + row_number() over
- (partition by origin
- order by origin, date)
- from new_visits;
-
-- Create or update occurrence_history
with occurrence_history_id_visit as (
select tmp_occurrence_history.*, object_id, visits, visit from tmp_occurrence_history
left join occurrence_history using(origin, branch, target, target_type)
- left join origin_visit using(origin, date)
+ left join origin_visit ov on (ov.origin = ori_id and ov.visit = ori_visit)
),
occurrences_to_update as (
select object_id, visit from occurrence_history_id_visit where object_id is not null
@@ -987,7 +982,7 @@
language sql
stable
as $$
- select origin, visit, date
+ select origin, visit, date, status
from origin_visit
where origin=origin
order by date desc
diff --git a/sql/swh-schema.sql b/sql/swh-schema.sql
--- a/sql/swh-schema.sql
+++ b/sql/swh-schema.sql
@@ -14,7 +14,7 @@
);
insert into dbversion(version, release, description)
- values(74, now(), 'Work In Progress');
+ values(76, now(), 'Work In Progress');
-- a SHA1 checksum (not necessarily originating from Git)
create domain sha1 as bytea check (length(value) = 20);
@@ -452,15 +452,29 @@
create index on revision_history(parent_id);
+create type origin_visit_status as enum (
+ 'ongoing',
+ 'full',
+ 'partial'
+);
+
+comment on type origin_visit_status IS 'Possible visit status';
+
-- The timestamps at which Software Heritage has made a visit of the given origin.
create table origin_visit
(
origin bigint not null references origin(id),
visit bigint not null,
date timestamptz not null,
+ status origin_visit_status not null,
primary key (origin, visit)
);
+comment on column origin_visit.origin is 'Visited origin';
+comment on column origin_visit.visit is 'Visit number the visit occurred for that origin';
+comment on column origin_visit.date is 'Visit date for that origin';
+comment on column origin_visit.status is 'Visit status for that origin';
+
create index on origin_visit(date);
-- Asynchronous notification of new origin visits
diff --git a/sql/upgrades/075.sql b/sql/upgrades/075.sql
new file mode 100644
--- /dev/null
+++ b/sql/upgrades/075.sql
@@ -0,0 +1,47 @@
+-- SWH DB schema upgrade
+-- from_version: 74
+-- to_version: 75
+-- description: Add completion information to origin_visit
+
+INSERT INTO dbversion(version, release, description)
+ VALUES(75, now(), 'Work In Progress');
+
+CREATE TYPE origin_visit_status AS ENUM (
+ 'ongoing',
+ 'full',
+ 'partial'
+);
+
+COMMENT ON TYPE origin_visit_status IS 'Possible visit status';
+
+ALTER TABLE origin_visit
+ ADD COLUMN status origin_visit_status;
+
+-- Already visited origins are considered full
+UPDATE origin_visit SET status = 'full';
+
+-- provide a status for visits is mandatory
+ALTER TABLE origin_visit
+ ALTER COLUMN status SET NOT NULL;
+
+comment on column origin_visit.origin is 'Visited origin';
+comment on column origin_visit.visit is 'The numbered visit occurrence for that origin';
+comment on column origin_visit.date is 'Visit date for that origin';
+comment on column origin_visit.status is 'Visit status for that origin';
+
+-- add a new origin_visit for origin origin_id at date.
+--
+-- Returns the new visit id.
+create or replace function swh_origin_visit_add(origin_id bigint, date timestamptz)
+ returns bigint
+ language sql
+as $$
+ with last_known_visit as (
+ select coalesce(max(visit), 0) as visit
+ from origin_visit
+ where origin = origin_id
+ )
+ insert into origin_visit (origin, date, visit, status)
+ values (origin_id, date, (select visit from last_known_visit) + 1, 'ongoing')
+ returning visit;
+$$;
diff --git a/sql/upgrades/076.sql b/sql/upgrades/076.sql
new file mode 100644
--- /dev/null
+++ b/sql/upgrades/076.sql
@@ -0,0 +1,61 @@
+-- SWH DB schema upgrade
+-- from_version: 75
+-- to_version: 76
+-- description: Add completion information to origin_visit
+
+INSERT INTO dbversion(version, release, description)
+ VALUES(76, now(), 'Work In Progress');
+
+
+create or replace function swh_mktemp_occurrence_history()
+ returns void
+ language sql
+as $$
+ create temporary table tmp_occurrence_history(
+ like occurrence_history including defaults
+ ) on commit drop;
+ alter table tmp_occurrence_history
+ drop column visits,
+ drop column object_id;
+$$;
+
+
+create or replace function swh_occurrence_history_add(ori_id bigint, ori_visit bigint)
+ returns void
+ language plpgsql
+as $$
+declare
+ origin_id origin.id%type;
+begin
+ -- Create or update occurrence_history
+ with occurrence_history_id_visit as (
+ select tmp_occurrence_history.*, object_id, visits, visit from tmp_occurrence_history
+ left join occurrence_history using(origin, branch, target, target_type)
+ left join origin_visit ov on (ov.origin = ori_id and ov.visit = ori_visit)
+ ),
+ occurrences_to_update as (
+ select object_id, visit from occurrence_history_id_visit where object_id is not null
+ ),
+ update_occurrences as (
+ update occurrence_history
+ set visits = array(select unnest(occurrence_history.visits) as e
+ union
+ select occurrences_to_update.visit as e
+ order by e)
+ from occurrences_to_update
+ where occurrence_history.object_id = occurrences_to_update.object_id
+ )
+ insert into occurrence_history (origin, branch, target, target_type, visits)
+ select origin, branch, target, target_type, ARRAY[visit]
+ from occurrence_history_id_visit
+ where object_id is null;
+
+ -- update occurrence
+ for origin_id in
+ select distinct origin from tmp_occurrence_history
+ loop
+ perform swh_occurrence_update_for_origin(origin_id);
+ end loop;
+ return;
+end
+$$;
diff --git a/swh/storage/api/client.py b/swh/storage/api/client.py
--- a/swh/storage/api/client.py
+++ b/swh/storage/api/client.py
@@ -142,8 +142,9 @@
def occurrence_get(self, origin_id):
return self.post('occurrence', {'origin_id': origin_id})
- def occurrence_add(self, occurrences):
- return self.post('occurrence/add', {'occurrences': occurrences})
+ def occurrence_add(self, occurrences, origin_visit):
+ return self.post('occurrence/add', {'occurrences': occurrences,
+ 'origin_visit': origin_visit})
def origin_get(self, origin):
return self.post('origin/get', {'origin': origin})
@@ -151,6 +152,14 @@
def origin_add_one(self, origin):
return self.post('origin/add', {'origin': origin})
+ def origin_visit_add(self, origin, ts):
+ return self.post('origin/visit/add', {'origin': origin, 'ts': ts})
+
+ def origin_visit_update(self, origin, visit_id, status):
+ return self.post('origin/visit/update', {'origin': origin,
+ 'visit_id': visit_id,
+ 'status': status})
+
def origin_visit_get(self, origin):
return self.post('origin/visit/get', {'origin': origin})
diff --git a/swh/storage/api/server.py b/swh/storage/api/server.py
--- a/swh/storage/api/server.py
+++ b/swh/storage/api/server.py
@@ -186,6 +186,17 @@
return encode_data(g.storage.origin_visit_get(**decode_request(request)))
+@app.route('/origin/visit/add', methods=['POST'])
+def origin_visit_add():
+ return encode_data(g.storage.origin_visit_add(**decode_request(request)))
+
+
+@app.route('/origin/visit/update', methods=['POST'])
+def origin_visit_update():
+ return encode_data(g.storage.origin_visit_update(
+ **decode_request(request)))
+
+
@app.route('/person', methods=['POST'])
def person_get():
return encode_data(g.storage.person_get(**decode_request(request)))
diff --git a/swh/storage/db.py b/swh/storage/db.py
--- a/swh/storage/db.py
+++ b/swh/storage/db.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2015 The Software Heritage developers
+# Copyright (C) 2015-2016 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
@@ -206,8 +206,11 @@
@stored_procedure('swh_release_add')
def release_add_from_temp(self, cur=None): pass
- @stored_procedure('swh_occurrence_history_add')
- def occurrence_history_add_from_temp(self, cur=None): pass
+ def occurrence_history_add_from_temp(self, origin_id, visit, cur=None):
+ cur = self._cursor(cur)
+
+ cur.execute("""SELECT swh_occurrence_history_add(%s, %s)""",
+ (origin_id, visit))
@stored_procedure('swh_entity_history_add')
def entity_history_add_from_temp(self, cur=None): pass
@@ -344,12 +347,37 @@
revision_get_cols = revision_add_cols + [
'author_id', 'committer_id', 'parents']
+ def origin_visit_add(self, origin, ts, cur=None):
+ """Add a new origin_visit for origin origin at timestamp ts with
+ status 'ongoing'.
+
+ Args:
+ origin: origin concerned by the visit
+ ts: the date of the visit
+
+ Returns:
+ The new visit index step for that origin
+
+ """
+ cur = self._cursor(cur)
+ self._cursor(cur).execute('SELECT swh_origin_visit_add(%s, %s)',
+ (origin, ts))
+ return cur.fetchone()[0]
+
+ def origin_visit_update(self, origin, visit_id, status, cur):
+ """Update origin_visit's status."""
+ cur = self._cursor(cur)
+ update = """UPDATE origin_visit
+ SET status=%s
+ WHERE origin=%s AND visit=%s"""
+ cur.execute(update, (status, origin, visit_id))
+
origin_visit_get_cols = [
- 'origin', 'visit', 'date'
+ 'origin', 'visit', 'date', 'status'
]
def origin_visit_get(self, origin_id, cur=None):
- """Retrieve occurrence's history information by origin_id.
+ """Retrieve all visits for origin with id origin_id.
Args:
origin_id: The occurrence's origin
@@ -361,7 +389,9 @@
cur = self._cursor(cur)
cur.execute(
- 'SELECT origin, visit, date FROM origin_visit where origin=%s',
+ """SELECT origin, visit, date, status
+ FROM origin_visit
+ WHERE origin=%s""",
(origin_id, ))
yield from cursor_to_bytes(cur)
diff --git a/swh/storage/storage.py b/swh/storage/storage.py
--- a/swh/storage/storage.py
+++ b/swh/storage/storage.py
@@ -688,7 +688,7 @@
)
@db_transaction
- def occurrence_add(self, occurrences, cur=None):
+ def occurrence_add(self, occurrences, origin_visit=None, cur=None):
"""Add occurrences to the storage
Args:
@@ -701,22 +701,16 @@
the occurrence
- target_type (str): the type of object pointed to by the
occurrence
- - date (datetime.DateTime): the validity date for the given
- occurrence
"""
db = self.db
- processed = []
- for occurrence in occurrences:
- if isinstance(occurrence['date'], str):
- occurrence['date'] = dateutil.parser.parse(occurrence['date'])
- processed.append(occurrence)
-
db.mktemp_occurrence_history(cur)
- db.copy_to(processed, 'tmp_occurrence_history',
- ['origin', 'branch', 'target', 'target_type', 'date'], cur)
+ db.copy_to(occurrences, 'tmp_occurrence_history',
+ ['origin', 'branch', 'target', 'target_type'], cur)
- db.occurrence_history_add_from_temp(cur)
+ db.occurrence_history_add_from_temp(origin_visit['origin'],
+ origin_visit['visit'],
+ cur)
@db_transaction_generator
def occurrence_get(self, origin_id, cur=None):
@@ -738,6 +732,44 @@
'target_type': line[3],
}
+ @db_transaction
+ def origin_visit_add(self, origin, ts, cur=None):
+ """Add an origin_visit for the origin at ts with status 'ongoing'.
+
+ Args:
+ origin: Visited Origin id
+ ts: timestamp of such visit
+
+ Returns:
+ Dict with keys origin and visit where:
+ - origin: origin identifier
+ - visit: the visit identifier for the new visit occurrence
+ - ts (datetime.DateTime): the visit date
+
+ """
+ if isinstance(ts, str):
+ ts = dateutil.parser.parse(ts)
+
+ return {
+ 'origin': origin,
+ 'visit': self.db.origin_visit_add(origin, ts, cur)
+ }
+
+ @db_transaction
+ def origin_visit_update(self, origin, visit_id, status, cur=None):
+ """Update an origin_visit's status.
+
+ Args:
+ origin: Visited Origin id
+ visit_id: Visit's id
+ status: Visit's new status
+
+ Returns:
+ None
+
+ """
+ return self.db.origin_visit_update(origin, visit_id, status, cur)
+
@db_transaction_generator
def origin_visit_get(self, origin, cur=None):
"""Retrieve origin's visit dates.
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
@@ -1,4 +1,4 @@
-# Copyright (C) 2015 The Software Heritage developers
+# Copyright (C) 2015-2016 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
@@ -296,28 +296,31 @@
'type': 'git',
}
+ self.date_visit1 = datetime.datetime(2015, 1, 1, 23, 0, 0,
+ tzinfo=datetime.timezone.utc)
+
self.occurrence = {
'branch': b'master',
'target': b'67890123456789012345',
'target_type': 'revision',
- 'date': datetime.datetime(2015, 1, 1, 23, 0, 0,
- tzinfo=datetime.timezone.utc),
}
+ self.date_visit2 = datetime.datetime(2015, 1, 1, 23, 0, 0,
+ tzinfo=datetime.timezone.utc)
+
self.occurrence2 = {
'branch': b'master',
'target': self.revision2['id'],
'target_type': 'revision',
- 'date': datetime.datetime(2015, 1, 1, 23, 0, 0,
- tzinfo=datetime.timezone.utc),
}
+ self.date_visit3 = datetime.datetime(2015, 1, 1, 23, 0, 0,
+ tzinfo=datetime.timezone.utc)
+
# template occurrence to be filled in test (cf. revision_log_by)
self.occurrence3 = {
'branch': b'master',
'target_type': 'revision',
- 'date': datetime.datetime(2015, 1, 1, 23, 0, 0,
- tzinfo=datetime.timezone.utc),
}
self.release = {
@@ -764,19 +767,22 @@
# occurrence3 targets 'revision4'
# with branch 'master' and origin origin_id
occurrence3 = self.occurrence3.copy()
+ date_visit1 = self.date_visit3
+ origin_visit1 = self.storage.origin_visit_add(origin_id,
+ date_visit1)
occurrence3.update({
'origin': origin_id,
'target': self.revision4['id'],
})
- self.storage.occurrence_add([occurrence3])
+ self.storage.occurrence_add([occurrence3], origin_visit1)
# self.revision4 -is-child-of-> self.revision3
# when
actual_results = list(self.storage.revision_log_by(
origin_id,
branch_name=occurrence3['branch'],
- timestamp=occurrence3['date']))
+ timestamp=date_visit1))
# hack: ids generated
for actual_result in actual_results:
@@ -880,8 +886,10 @@
# occurrence2 points to 'revision2' with branch 'master', we
# need to point to the right origin
occurrence2 = self.occurrence2.copy()
+ date_visit1 = self.date_visit2
+ origin_visit1 = self.storage.origin_visit_add(origin_id, date_visit1)
occurrence2.update({'origin': origin_id})
- self.storage.occurrence_add([occurrence2])
+ self.storage.occurrence_add([occurrence2], origin_visit1)
# we want only revision 2
expected_revisions = list(self.storage.revision_get(
@@ -918,25 +926,29 @@
# occurrence2 points to 'revision2' with branch 'master', we
# need to point to the right origin
occurrence2 = self.occurrence2.copy()
- occurrence2.update({'origin': origin_id,
- 'date': occurrence2['date']})
+ occurrence2['origin'] = origin_id
+ date_visit1 = self.date_visit2
+ origin_visit1 = self.storage.origin_visit_add(origin_id, date_visit1)
dt = datetime.timedelta(days=1)
occurrence3 = self.occurrence2.copy()
- occurrence3.update({'origin': origin_id,
- 'date': occurrence3['date'] + dt,
- 'target': self.revision3['id']})
+ occurrence3.update({
+ 'origin': origin_id,
+ 'target': self.revision3['id']
+ })
+ date_visit2 = date_visit1 + dt
+ origin_visit2 = self.storage.origin_visit_add(origin_id, date_visit2)
# 2 occurrences on same revision with lower validity date with 1h delta
- self.storage.occurrence_add([occurrence2])
- self.storage.occurrence_add([occurrence3])
+ self.storage.occurrence_add([occurrence2], origin_visit1)
+ self.storage.occurrence_add([occurrence3], origin_visit2)
# when
actual_results0 = list(self.storage.revision_get_by(
origin_id,
occurrence2['branch'],
- occurrence2['date']))
+ date_visit1))
# hack: ids are generated
del actual_results0[0]['author']['id']
@@ -949,7 +961,7 @@
actual_results1 = list(self.storage.revision_get_by(
origin_id,
occurrence2['branch'],
- occurrence2['date'] + dt/3)) # closer to occurrence2
+ date_visit1 + dt/3)) # closer to first visit
# hack: ids are generated
del actual_results1[0]['author']['id']
@@ -962,7 +974,7 @@
actual_results2 = list(self.storage.revision_get_by(
origin_id,
occurrence2['branch'],
- occurrence2['date'] + 2*dt/3)) # closer to occurrence3
+ date_visit1 + 2*dt/3)) # closer to second visit
del actual_results2[0]['author']['id']
del actual_results2[0]['committer']['id']
@@ -974,7 +986,7 @@
actual_results3 = list(self.storage.revision_get_by(
origin_id,
occurrence3['branch'],
- occurrence3['date']))
+ date_visit2))
# hack: ids are generated
del actual_results3[0]['author']['id']
@@ -1037,7 +1049,10 @@
# need to point to the right origin
occurrence2 = self.occurrence2.copy()
occurrence2.update({'origin': origin_id})
- self.storage.occurrence_add([occurrence2])
+ date_visit1 = self.date_visit2
+ origin_visit = self.storage.origin_visit_add(origin_id, date_visit1)
+
+ self.storage.occurrence_add([occurrence2], origin_visit)
# we want only revision 2
expected_releases = list(self.storage.release_get(
@@ -1085,70 +1100,95 @@
'project': None})
@istest
- def origin_visit_get(self):
- # 1- given
+ def origin_visit_add(self):
+ # given
self.assertIsNone(self.storage.origin_get(self.origin2))
- self.storage.content_add([self.cont2])
- self.storage.directory_add([self.dir2])
- self.storage.revision_add([self.revision2, self.revision3])
origin_id = self.storage.origin_add_one(self.origin2)
+ self.assertIsNotNone(origin_id)
- # occurrence2 points to 'revision2' with branch 'master', we
- # need to point to the right origin
- occurrence2 = self.occurrence2.copy()
- occurrence2.update({'origin': origin_id,
- 'date': occurrence2['date']})
-
- dt = datetime.timedelta(days=1)
-
- occurrence3 = self.occurrence2.copy()
- occurrence3.update({'origin': origin_id,
- 'date': occurrence3['date'] + dt,
- 'target': self.revision3['id']})
+ # when
+ origin_visit1 = self.storage.origin_visit_add(
+ origin_id,
+ ts=self.date_visit2)
- # 2 occurrences on same revision with lower validity date with 1h delta
- self.storage.occurrence_add([occurrence2])
+ # then
+ self.assertEquals(origin_visit1['origin'], origin_id)
+ self.assertIsNotNone(origin_visit1['visit'])
+ self.assertTrue(origin_visit1['visit'] > 0)
- # when
actual_origin_visits = list(self.storage.origin_visit_get(origin_id))
- self.assertEquals(len(actual_origin_visits), 1)
self.assertEquals(actual_origin_visits,
[{
'origin': origin_id,
- 'date': occurrence2['date'],
- 'visit': 1
+ 'date': self.date_visit2,
+ 'visit': origin_visit1['visit'],
+ 'status': 'ongoing',
}])
- # 2- given
- self.storage.occurrence_add([occurrence3])
+ @istest
+ def origin_visit_update(self):
+ # given
+ origin_id = self.storage.origin_add_one(self.origin2)
+ origin_id2 = self.storage.origin_add_one(self.origin)
+
+ origin_visit1 = self.storage.origin_visit_add(
+ origin_id,
+ ts=self.date_visit2)
+
+ origin_visit2 = self.storage.origin_visit_add(
+ origin_id,
+ ts=self.date_visit3)
+
+ origin_visit3 = self.storage.origin_visit_add(
+ origin_id2,
+ ts=self.date_visit3)
# when
+ self.storage.origin_visit_update(origin_id, origin_visit1['visit'],
+ status='full')
+ self.storage.origin_visit_update(origin_id2, origin_visit3['visit'],
+ status='partial')
+
+ # then
actual_origin_visits = list(self.storage.origin_visit_get(origin_id))
- self.assertEquals(len(actual_origin_visits), 2)
self.assertEquals(actual_origin_visits,
[{
- 'origin': origin_id,
- 'date': occurrence2['date'],
- 'visit': 1
- }, {
- 'origin': origin_id,
- 'date': occurrence3['date'],
- 'visit': 2
+ 'origin': origin_visit2['origin'],
+ 'date': self.date_visit2,
+ 'visit': origin_visit1['visit'],
+ 'status': 'full'
+ },
+ {
+ 'origin': origin_visit2['origin'],
+ 'date': self.date_visit3,
+ 'visit': origin_visit2['visit'],
+ 'status': 'ongoing'
+ }])
+
+ actual_origin_visits2 = list(self.storage.origin_visit_get(origin_id2))
+ self.assertEquals(actual_origin_visits2,
+ [{
+ 'origin': origin_visit3['origin'],
+ 'date': self.date_visit3,
+ 'visit': origin_visit3['visit'],
+ 'status': 'partial'
}])
@istest
def occurrence_add(self):
+ occur = self.occurrence
+
origin_id = self.storage.origin_add_one(self.origin2)
+ date_visit1 = self.date_visit1
+ origin_visit1 = self.storage.origin_visit_add(origin_id, date_visit1)
revision = self.revision.copy()
- revision['id'] = self.occurrence['target']
+ revision['id'] = occur['target']
self.storage.revision_add([revision])
- occur = self.occurrence
occur['origin'] = origin_id
- self.storage.occurrence_add([occur])
- self.storage.occurrence_add([occur])
+ self.storage.occurrence_add([occur], origin_visit1)
test_query = '''
with indiv_occurrences as (
@@ -1167,11 +1207,12 @@
(ret[0][0], ret[0][1].tobytes(), ret[0][2].tobytes(),
ret[0][3], ret[0][4]),
(occur['origin'], occur['branch'], occur['target'],
- occur['target_type'], occur['date']))
+ occur['target_type'], self.date_visit1))
- orig_date = occur['date']
- occur['date'] += datetime.timedelta(hours=10)
- self.storage.occurrence_add([occur])
+ date_visit2 = date_visit1 + datetime.timedelta(hours=10)
+
+ origin_visit2 = self.storage.origin_visit_add(origin_id, date_visit2)
+ self.storage.occurrence_add([occur], origin_visit2)
self.cursor.execute(test_query)
ret = self.cursor.fetchall()
@@ -1180,36 +1221,35 @@
(ret[0][0], ret[0][1].tobytes(), ret[0][2].tobytes(),
ret[0][3], ret[0][4]),
(occur['origin'], occur['branch'], occur['target'],
- occur['target_type'], orig_date))
+ occur['target_type'], date_visit1))
self.assertEqual(
(ret[1][0], ret[1][1].tobytes(), ret[1][2].tobytes(),
ret[1][3], ret[1][4]),
(occur['origin'], occur['branch'], occur['target'],
- occur['target_type'], occur['date']))
+ occur['target_type'], date_visit2))
@istest
def occurrence_get(self):
# given
+ occur = self.occurrence
origin_id = self.storage.origin_add_one(self.origin2)
+ origin_visit1 = self.storage.origin_visit_add(origin_id,
+ self.date_visit1)
revision = self.revision.copy()
- revision['id'] = self.occurrence['target']
+ revision['id'] = occur['target']
self.storage.revision_add([revision])
- occur = self.occurrence
occur['origin'] = origin_id
- self.storage.occurrence_add([occur])
- self.storage.occurrence_add([occur])
+ self.storage.occurrence_add([occur], origin_visit1)
+ self.storage.occurrence_add([occur], origin_visit1)
# when
actual_occurrence = list(self.storage.occurrence_get(origin_id))
# then
- expected_occur = occur.copy()
- del expected_occur['date']
-
self.assertEquals(len(actual_occurrence), 1)
- self.assertEquals(actual_occurrence[0], expected_occur)
+ self.assertEquals(actual_occurrence[0], occur)
@istest
def content_find_occurrence_with_present_content(self):
@@ -1221,7 +1261,10 @@
origin_id = self.storage.origin_add_one(self.origin2)
occurrence = self.occurrence2
occurrence.update({'origin': origin_id})
- self.storage.occurrence_add([occurrence])
+
+ date_visit1 = self.date_visit2
+ origin_visit1 = self.storage.origin_visit_add(origin_id, date_visit1)
+ self.storage.occurrence_add([occurrence], origin_visit1)
# when
occ = self.storage.content_find_occurrence(

File Metadata

Mime Type
text/plain
Expires
Thu, Jan 23, 1:24 AM (1 w, 3 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3219115

Event Timeline