Если в спеке присутствует тэг BuildArch то в выводе rpm -bE дублируется кусок спека находящийся до этого тэга. Пример спека: Name: test Version: test Release: test Summary: test License: GPL Group: test BuildArch: noarch %description
It's a known story.
*** Bug 5573 has been marked as a duplicate of this bug. ***
Created attachment 664 [details] Патчик, который исправляет проблемму
блин, орфографическая ошибка в патче - s/tempory/temporary/
Comment on attachment 664 [details] Патчик, который исправляет проблемму >--- rpm-4_0-4.0.4-orig/build/parseSpec.c 2002-03-26 01:09:32 +0200 >+++ rpm-4_0-4.0.4/build/parseSpec.c 2004-12-10 15:13:44 +0200 >@@ -16,6 +16,8 @@ > > /*@access FD_t @*/ /* compared with NULL */ > >+static FILE* temp_file;/*temporary file to output preprocessing spec*/ >+ > /** > */ > /*@unchecked@*/ >@@ -362,7 +364,7 @@ > > if ( '\n' == chomped[len-1] ) > chomped[len-1] = '\0'; >- puts( chomped ); >+ fprintf(temp_file, "%s\n", chomped ); > chomped = _free( chomped ); > } > >@@ -396,6 +398,10 @@ > { > rpmParseState parsePart = PART_PREAMBLE; > int initialPackage = 1; >+ char temp_filename_pattern[25]="preprocessed-spec.XXXXXX"; >+ int temp_fd; >+ char line[255]; >+ > #ifdef DYING > const char *saveArch; > #endif >@@ -416,6 +422,23 @@ > spec->fileStack = newOpenFileInfo(); > spec->fileStack->fileName = xstrdup(spec->specFile); > spec->preprocess_mode = preprocess; >+ >+ if (spec->preprocess_mode){ >+ temp_fd = mkstemp(temp_filename_pattern); >+ if (temp_fd == -1) { >+ rpmError(RPMERR_CREATE, _("Cannot open temporary file")); >+ return RPMERR_CREATE; >+ } >+ if (!(temp_file = fdopen(temp_fd, "w+b"))) { >+ rpmError(RPMERR_CREATE, _("Cannot create temporary file descriptor")); >+ return RPMERR_CREATE; >+ } >+ if (unlink(temp_filename_pattern) == -1) { >+ rpmError(RPMERR_UNLINK, _("Cannot delete temporary file")); >+ return RPMERR_UNLINK; >+ } >+ } >+ > if (buildRootURL) { > const char * buildRoot; > (void) urlPath(buildRootURL, &buildRoot); >@@ -636,5 +659,15 @@ > closeSpec(spec); > *specp = spec; > >+ if (spec->preprocess_mode){ >+ if (!fseek(temp_file,0,SEEK_SET)) >+ while(fgets(line,255,temp_file)) >+ printf("%s",line); >+ else{ >+ rpmError(RPMERR_FSEEK, _("Cannot seek temporary file")); >+ return RPMERR_FSEEK; >+ } >+ } >+ > return 0; > }
Ввиду повышенной активности reporter'а.
1. в таких случаях необъодимо использовать ftruncate(2). 2. в rpmlib работа с временными файлами отличается от обычной.
(In reply to comment #7) > 1. в таких случаях необъодимо использовать ftruncate(2). ok > 2. в rpmlib работа с временными файлами отличается от обычной. Вы имеете ввиду использование makeTempFile?
Created attachment 671 [details] Теперь используется ftruncate А по поводу использования временных файлов в rpmlib - прошу разъяснить по-подробней...
Эта бага до сих пор актуальна? (сегодня вечером проверю дома) И, думаю, что это не major, а normal.
Воспроизводиться, но для мня не актуальна.
Fixed in 4.0.4-alt77.M40.1-39-g63d7ecd