);
create view syncconflicts as
-with
-preserved as (
- select BASE.*, 'preserved' as rstatus
- from packagefiles_status BASE
- join elflibraries EL on EL.file = BASE.hash
- where
- BASE.status in ('removed', 'updated')
- and BASE.hash in (select hash from packagefiles_status where
- status in ('installed'))
-),
-syncstatus as (
- select distinct BASE.*,
- case when P.status = 'installing' and BASE.status = 'installed'
- then 'updating'
- when BASE.status in ('removed','updated')
- and BASE.path in (select path from preserved) then
- 'preserved'
- else
- BASE.status
- end as rstatus
- from packagefiles_status BASE
- left join packages P on P.package = BASE.package
- and BASE.status in ('installed', 'removing')
- and P.status = 'installing'
-),
+with
-- metadata different
md_conflict as (
- select path, count(distinct mds) as mdcount,
- count(distinct hash) as hashcount
- from syncstatus SS
- where SS.rstatus in ('installing', 'installed')
+ select path, count(distinct
+ printf('%s:%s:%s:%s', PFA.filetype, PFA.mode, PFA.username, PFA.groupname)) as mdcount,
+ count(distinct PFA.hash) as hashcount
+ from packagefiles PFA
+ join packages PA
+ on PA.package = PFA.package and PA.version = PFA.version and PA.release = PFA.release
+ where PA.status in ('installing', 'installed')
group by path
- having (count(distinct mds) > 1 or count(distinct hash) > 1)
+ having (count(distinct
+ printf('%s:%s:%s:%s', PFA.filetype, PFA.mode, PFA.username, PFA.groupname)
+ ) > 1 or count(distinct PFA.hash) > 1)
)
-select BASE.*, 'hash' as conflict
-from syncstatus BASE
+select PFH.*,
+ printf('%s-%s-%s', PFH.package, PFH.version, PFH.release) as pkgid,
+ printf('%s:%s:%s:%s', PFH.filetype, PFH.mode, PFH.username, PFH.groupname) as mds,
+'hash' as conflict
+from packagefiles PFH
where path in (select path from md_conflict where hashcount > 1)
union
-select BASE.*, 'md' as conflict
-from syncstatus BASE
+select PFM.*,
+ printf('%s-%s-%s', PFM.package, PFM.version, PFM.release) as pkgid,
+ printf('%s:%s:%s:%s', PFM.filetype, PFM.mode, PFM.username, PFM.groupname) as mds,
+'md' as conflict
+from packagefiles PFM
where path in (select path from md_conflict where mdcount > 1)
;
printf('%s:%s:%s:%s', PFP.filetype, PFP.mode, PFP.username, PFP.groupname) as mds,
null as omds
from preserve PFP
+ -- TODO don't include installed or installing
+ -- left join packages P on P.package = PFP.package ...
+ -- where P.status not in ('installed','installing')
;
commit;