#!/bin/sh
sqlite3 "$REPOCOP_TEST_TMPDIR/tmp.db" <<EOSQL
attach database '$REPOCOP_DISTROTEST_DBDIR/rpm.db' as rpm;
attach database '$REPOCOP_DISTROTEST_DBDIR/rpm-ext.db' as rpmext;
.mode tabs
-- filedir conflict
-- http://refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/pkgformat.html
-- only direct name conflicts; not good
-- note: 580 is RPMFILE_DONOTUSE (1 << 2) + RPMFILE_GHOST (1 << 6) + RPMFILE_EXCLUDE (1 << 9)
-- a.FILENAME, 
-- good straitforward implementation, but too slow
-- select distinct a.pkgid, b.pkgid, a.filename FROM rpm_files as a LEFT JOIN rpm as c ON a.pkgid=c.pkgid, rpm_files as b  LEFT JOIN rpm as d ON b.pkgid=d.pkgid WHERE a.pkgid<>b.pkgid and a.filename=b.filename and a.fileflag & 580 = 0 and b.fileflag & 580 = 0 and a.filemode & 61440 = 32768 and b.filemode & 61440 = 32768 and (a.filemode & 4095 <> b.filemode & 4095 or a.FILEUSERNAME<>b.FILEUSERNAME OR a.FILEGROUPNAME<>b.FILEGROUPNAME or a.FILESIZE <> b.FILESIZE) AND   c.name <> d.name AND a.pkgid NOT IN (select conflictee FROM explicit_conflict WHERE conflicter=b.pkgid) AND b.pkgid NOT IN (select conflictee FROM explicit_conflict WHERE conflicter=a.pkgid) AND a.pkgid NOT IN (select obsoletee FROM explicit_obsolete WHERE obsoleter=b.pkgid) AND b.pkgid NOT IN (select obsoletee FROM explicit_obsolete WHERE obsoleter=a.pkgid);
-- .output $REPOCOP_TEST_TMPDIR/msg1
-- optimised, faster by 15%
CREATE TEMPORARY TABLE fileconflict (apkgid TEXT, bpkgid TEXT, afilename TEXT);
INSERT INTO fileconflict select distinct a.pkgid, b.pkgid, a.filename FROM rpm_files as a, rpm_files as b WHERE a.pkgid<>b.pkgid and a.filename=b.filename and a.fileflag & 580 = 0 and b.fileflag & 580 = 0 and a.filemode & 61440 = 32768 and b.filemode & 61440 = 32768 and (a.filemode & 4095 <> b.filemode & 4095 or a.FILEUSERNAME<>b.FILEUSERNAME OR a.FILEGROUPNAME<>b.FILEGROUPNAME or a.FILESIZE <> b.FILESIZE) AND a.pkgid NOT IN (select conflictee FROM explicit_conflict WHERE conflicter=b.pkgid) AND b.pkgid NOT IN (select conflictee FROM explicit_conflict WHERE conflicter=a.pkgid) AND a.pkgid NOT IN (select obsoletee FROM explicit_obsolete WHERE obsoleter=b.pkgid) AND b.pkgid NOT IN (select obsoletee FROM explicit_obsolete WHERE obsoleter=a.pkgid);
DELETE FROM fileconflict WHERE (apkgid, bpkgid) IN (SELECT apkgid, bpkgid FROM fileconflict LEFT JOIN RPM as c ON apkgid=c.pkgid  LEFT JOIN RPM as d ON bpkgid=d.pkgid WHERE c.name = d.name);
.output $REPOCOP_TEST_TMPDIR/msg1
SELECT * FROM fileconflict;
DROP TABLE fileconflict;
EOSQL
# compactify messages, delete debuginfo <-> debuginfo confilcts
# (see https://bugzilla.altlinux.org/show_bug.cgi?id=28467,
# also #30862 /usr/lib/debug/bin/mail.debug ...)
/usr/bin/repocop-unittest-rpm-filesystem-conflict-file-file-message-filter $REPOCOP_TEST_TMPDIR/msg1 > $REPOCOP_TEST_TMPDIR/msg
perl -ne 'chomp;@a=split /\t/;system(qw/repocop-test-warn -k/,$a[0], $a[1])' $REPOCOP_TEST_TMPDIR/msg

rm $REPOCOP_TEST_TMPDIR/*
