Re: branching for 9.2devel

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема Re: branching for 9.2devel
Дата
Msg-id 201110122023.p9CKN4X22394@momjian.us
обсуждение исходный текст
Ответ на Re: branching for 9.2devel  (Alvaro Herrera <alvherre@commandprompt.com>)
Список pgsql-hackers
Alvaro Herrera wrote:
> Excerpts from Tom Lane's message of lun abr 25 20:48:42 -0300 2011:
> > Andrew Dunstan <andrew@dunslane.net> writes:
>
> > > Well, that way you'll have a handful of -Ttypdef parameters for each
> > > invocation of indent instead of a gazillion of them. No more command
> > > line length issues.
> >
> > Well, -Ttypedef is wrong on its face.  Right would be a switch
> > specifying the name of the file to read the typedef list from.
> > Then you don't need massive script-level infrastructure to try
> > to spoonfeed that data to the program doing the work.
>
> I gather that Andrew will be working on replacing the pgindent shell
> script with a Perl script, but this new script will still rely on our
> patched BSD indent, right?
>
> Of course, it would make sense to further patch indent so that it
> accepts typedefs in a file instead of thousands of -T switches, but that
> seems orthogonal.

I have done as you suggested, modifying our version of BSD indent to
allow a file of typedefs to be processed.  I also renamed the download
and binary to 'pg_bsd_indent' so it can be installed on a system that
already has 'indent'.  It should propogate to the ftp mirrors in a few
hours.  Even after we go to Perl, this is still a necessary change.

I have modified the pgindent script to use this new flag, and applied
those changes, attached.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +
diff --git a/src/tools/pgindent/README b/src/tools/pgindent/README
new file mode 100644
index e81e85d..7504650
*** a/src/tools/pgindent/README
--- b/src/tools/pgindent/README
*************** pgindent
*** 6,31 ****
  This can format all PostgreSQL *.c and *.h files, but excludes *.y, and
  *.l files.

! 1) Change directory to the top of the build tree.

! 2) Download the typedef file from the buildfarm:

      wget -O src/tools/pgindent/typedefs.list http://buildfarm.postgresql.org/cgi-bin/typedefs.pl

! 3) Remove all derived files (pgindent has trouble with one of the flex macros):

      gmake maintainer-clean

! 4) Run pgindent:

      find . -name '*.[ch]' -type f -print | \
      egrep -v -f src/tools/pgindent/exclude_file_patterns | \
      xargs -n100 pgindent src/tools/pgindent/typedefs.list

! 5) Remove any files that generate errors and restore their original
     versions.

! 6) Do a full test build:

      run configure
      # stop is only necessary if it's going to install in a location with an
--- 6,33 ----
  This can format all PostgreSQL *.c and *.h files, but excludes *.y, and
  *.l files.

! 1) Install pg_bsd_indent (see below for details)

! 2) Change directory to the top of the build tree.
!
! 3) Download the typedef file from the buildfarm:

      wget -O src/tools/pgindent/typedefs.list http://buildfarm.postgresql.org/cgi-bin/typedefs.pl

! 4) Remove all derived files (pgindent has trouble with one of the flex macros):

      gmake maintainer-clean

! 5) Run pgindent:

      find . -name '*.[ch]' -type f -print | \
      egrep -v -f src/tools/pgindent/exclude_file_patterns | \
      xargs -n100 pgindent src/tools/pgindent/typedefs.list

! 6) Remove any files that generate errors and restore their original
     versions.

! 7) Do a full test build:

      run configure
      # stop is only necessary if it's going to install in a location with an
*************** This can format all PostgreSQL *.c and *
*** 38,54 ****

  ---------------------------------------------------------------------------

! We have standardized on NetBSD's indent.  We have fixed a few bugs which
! requre the NetBSD source to be patched with indent.bsd.patch patch.  A
! fully patched version is available at ftp://ftp.postgresql.org/pub/dev.

  GNU indent, version 2.2.6, has several problems, and is not recommended.
  These bugs become pretty major when you are doing >500k lines of code.
  If you don't believe me, take a directory and make a copy.  Run pgindent
  on the copy using GNU indent, and do a diff -r. You will see what I
! mean. GNU indent does some things better, but mangles too.

! Notes about excluded files:

  src/include/storage/s_lock.h is excluded because it contains assembly code
  that pgindent tends to mess up.
--- 40,67 ----

  ---------------------------------------------------------------------------

! BSD indent
! ----------
!
! We have standardized on NetBSD's indent, and renamed it pg_bsd_indent.
! We have fixed a few bugs which requre the NetBSD source to be patched
! with indent.bsd.patch patch.  A fully patched version is available at
! ftp://ftp.postgresql.org/pub/dev.

  GNU indent, version 2.2.6, has several problems, and is not recommended.
  These bugs become pretty major when you are doing >500k lines of code.
  If you don't believe me, take a directory and make a copy.  Run pgindent
  on the copy using GNU indent, and do a diff -r. You will see what I
! mean. GNU indent does some things better, but mangles too.  For details,
! see:

!     http://archives.postgresql.org/pgsql-hackers/2003-10/msg00374.php
!     http://archives.postgresql.org/pgsql-hackers/2011-04/msg01436.php
!
! ---------------------------------------------------------------------------
!
! Notes about excluded files
! --------------------------

  src/include/storage/s_lock.h is excluded because it contains assembly code
  that pgindent tends to mess up.
*************** should not be changed.
*** 63,70 ****

  ---------------------------------------------------------------------------

! Obsolete typedef list creation instructions:
! --------------------------------------------

  To use pgindent:

--- 76,83 ----

  ---------------------------------------------------------------------------

! Obsolete typedef list creation instructions
! -------------------------------------------

  To use pgindent:

diff --git a/src/tools/pgindent/pgindent b/src/tools/pgindent/pgindent
new file mode 100755
index 05f69ef..eeb6f5d
*** a/src/tools/pgindent/pgindent
--- b/src/tools/pgindent/pgindent
*************** fi
*** 21,32 ****
  TYPEDEFS="$1"
  shift

! if [ -z "$INDENT" ]
! then
!     INDENT=indent
! fi

  trap "rm -f /tmp/$$ /tmp/$$a" 0 1 2 3 15
  entab </dev/null >/dev/null
  if [ "$?" -ne 0 ]
  then    echo "Go to the src/tools/entab directory and do a 'make' and 'make install'." >&2
--- 21,32 ----
  TYPEDEFS="$1"
  shift

! [ -z "$INDENT" ] && INDENT=pg_bsd_indent

  trap "rm -f /tmp/$$ /tmp/$$a" 0 1 2 3 15
+
+ # check the environment
+
  entab </dev/null >/dev/null
  if [ "$?" -ne 0 ]
  then    echo "Go to the src/tools/entab directory and do a 'make' and 'make install'." >&2
*************** then    echo "Go to the src/tools/entab dir
*** 36,42 ****
  fi
  $INDENT -? </dev/null >/dev/null 2>&1
  if [ "$?" -ne 1 ]
! then    echo "You do not appear to have 'indent' installed on your system." >&2
      exit 1
  fi
  $INDENT -gnu </dev/null >/dev/null 2>&1
--- 36,46 ----
  fi
  $INDENT -? </dev/null >/dev/null 2>&1
  if [ "$?" -ne 1 ]
! then    echo "You do not appear to have '$INDENT' installed on your system." >&2
!     exit 1
! fi
! if [ "`$INDENT -V`" != "$INDENT 1.0" ]
! then    echo "You do not appear to have $INDENT version 1.0 installed on your system." >&2
      exit 1
  fi
  $INDENT -gnu </dev/null >/dev/null 2>&1
*************** do
*** 140,149 ****
  # Protect wrapping in CATALOG().
      sed 's;^CATALOG(.*$;/*&*/;' >/tmp/$$a

  # We get the list of typedef's from /src/tools/find_typedef
      $INDENT -bad -bap -bc -bl -d0 -cdb -nce -nfc1 -di12 -i4 -l79 \
!         -lp -nip -npro -bbb $EXTRA_OPTS \
!         `egrep -v '^(FD_SET|date|interval|timestamp|ANY)$' "$TYPEDEFS" | sed -e '/^$/d' -e 's/.*/-T& /'` \
          /tmp/$$a >/tmp/$$ 2>&1

      if [ "$?" -ne 0 -o -s /tmp/$$ ]
--- 144,154 ----
  # Protect wrapping in CATALOG().
      sed 's;^CATALOG(.*$;/*&*/;' >/tmp/$$a

+     egrep -v '^(FD_SET|date|interval|timestamp|ANY)$' "$TYPEDEFS" | sed -e '/^$/d' > /tmp/$$b
+
  # We get the list of typedef's from /src/tools/find_typedef
      $INDENT -bad -bap -bc -bl -d0 -cdb -nce -nfc1 -di12 -i4 -l79 \
!         -lp -nip -npro -bbb $EXTRA_OPTS -U/tmp/$$b \
          /tmp/$$a >/tmp/$$ 2>&1

      if [ "$?" -ne 0 -o -s /tmp/$$ ]

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Phil Sorber
Дата:
Сообщение: Re: patch: move dumpUserConfig call in dumpRoles function of pg_dumpall.c
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: Formatting Curmudgeons WAS: MMAP Buffers