On Mon, Dec 01, 2008 at 02:57:20PM +0300, Grigory Batalov wrote: > Что случится, если два разных пакета содержат (владеют) одну и ту же > директорию? Если директории "одинаковые", то ничего не случится -- rpm "поделит" этот каталог между двумя пакетами, и будет пробовать удалять его только при удалении последнего пакета, который владеет этим каталогом. Если же директории "разные", то будет файловый конфликт. Это касается и файлов. lib/transaction.c: 878 static int filecmp(const TFI_t fi1, const int ix1, const TFI_t fi2, const int ix2) 879 /*@*/ 880 { 881 uint_16 m1 = fi1->fmodes[ix1], m2 = fi2->fmodes[ix2]; 882 uint_32 f1 = fi1->fflags[ix1], f2 = fi2->fflags[ix2]; 883 const char *u1 = fi1->fuser[ix1], *u2 = fi2->fuser[ix2]; 884 const char *g1 = fi1->fgroup[ix1], *g2 = fi2->fgroup[ix2]; 885 886 /* both file type and permissions must match */ 887 if (m1 != m2) 888 return 1; 889 890 /* ownership must also match */ 891 if (strcmp(u1, u2) || strcmp(g1, g2)) 892 return 1; 893 894 if ((f1 | f2) & RPMFILE_GHOST) 895 /* one or both %ghost files, no extra check */ 896 ; 897 else if (S_ISLNK(m1)) { 898 /* symlinks must have the same target */ 899 const char *l1 = fi1->flinks[ix1], *l2 = fi2->flinks[ix2]; 900 if (strcmp(l1, l2)) 901 return 1; 902 } 903 else if (S_ISREG(m1)) { 904 /* regular files must have the same md5 sum */ 905 const char *md51 = fi1->fmd5s[ix1], *md52 = fi2->fmd5s[ix2]; 906 if (strcmp(md51, md52)) 907 return 1; 908 } 909 910 /* e.g. mtime difference is immaterial */ 911 return 0; 912 }