6 Star 16 Fork 9

Gitee 极速下载 / gpdb

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/greenplum-db/gpdb
克隆/下载
README.gpdb 4.36 KB
一键复制 编辑 原始数据 按行查看 历史
Daniel Gustafsson 提交于 2020-04-15 13:57 . Fix typos in documentation
pgindent'ing Greenplum Code
============================
On upstream Postgres, pgindent is run before major releases to maintain a
uniform layout style across the codebase. However, pgindent is not run as
regularly against the GPDB codebase.
Ideally, all GPDB code should be kept pgindent'ed consistently, but currently it
is not. The reason for this is that GPDB is composed of several types of code:
1. Code originating from Postgres 8.3
2. Code originating from Postgres 8.4
3. Code that was cherry-picked from a newer version of Postgres
4. Code that was purely written for GPDB
5. A Frankenstein-like mix of code originating from many places
To further complicate matters, pgindent formatting rules have changed between
Postgres releases and the version of the pgindent binaries living in the GPDB
repository was actually cherry-picked from 9.1 (before it was later removed).
UPSTREAM CODE:
Because there are plans to merge commits from newer versions of Postgres into
GPDB, upstream code should not be pgindent'ed using newer versions of pgindent.
For example, if code originating from Postgres 8.3 was pgindent'ed using the
newest pgindent binaries, there would be merge conflicts when commits from
Postgres 8.4 were cherry-picked on top of it.
PURE GPDB CODE:
For these files, using the latest pgindent binaries seems to make the most sense.
It has been run on certain GPDB-only directories, such as
`src/backend/access/appendonly` and `src/backend/cdb`:
https://github.com/greenplum-db/gpdb/pull/3384
https://github.com/greenplum-db/gpdb/pull/3400
https://github.com/greenplum-db/gpdb/pull/3423
OTHER CODE:
For GPDB-specific code that lives in files inherited from upstream PostgreSQL,
there is no clear answer, especially if it is a mix of code from different
versions of Postgres. One possible answer is to only pgindent GPDB code that
is added into that file using the version of pgindent corresponding to the
newest version of Postgres code that appears in the file.
CONCLUSION:
Although it is always awkward, pgindent'ing code is a good practice in general
if done understanding the above constraints.
DOING THE INDENT RUN:
For the reasons mentioned above, the pgindent binaries were removed from GPDB
and the below practice is instead recommended.
1. Determine which version of pgindent you need.
2. Download that version of the Postgres code.
3. Run pgindent by following the `src/tools/pgindent/README` of the downloaded
Postgres code, but using the `src/tools/pgindent/typedefs.list` provided with
GPDB.
For example, running the latest version of the Postgres pgindent tool against
`src/backend/access/appendonly/aosegfiles.c` will produce no diffs because
that file is following the latest pgindent rules:
```bash
~/workspace/postgres/src/tools/pgindent/pgindent ~/workspace/gpdb/src/tools/pgindent/typedefs.list ~/workspace/gpdb/src/backend/access/appendonly/aosegfiles.c
```
However, running it against `src/backend/main/main.c` which originated from
Postgres 8.3 (as of this writing) will produce diffs:
```bash
~/workspace/postgres/src/tools/pgindent/pgindent \
~/workspace/gpdb/src/tools/pgindent/typedefs.list \
~/workspace/gpdb/src/backend/main/main.c
```
Updating typedefs.list
======================
typedefs.list contains a list of all the data structures in the GPDB code. It is
constantly changing (perhaps every day) and also varies depending on the
configure flags passed when compiling GPDB. It is thus not easy to keep
up-to-date in a GitHub repository. Postgres gets around this issue by using
a BuildFarm (see the upstream pgindent README).
We provide an out-of-date typedefs.list in the GPDB pgindent folder for
convenience, but it is recommended that you update it before running pgindent.
The below commands were used to generate typedefs.list from a GPDB postgres
binary built on Concourse, but they might not work on Mac or other environments.
```bash
objdump -W postgres |\
egrep -A3 DW_TAG_typedef |\
perl -e ' while (<>) { chomp; @flds = split;next unless (1 < @flds);\
next if $flds[0] ne "DW_AT_name" && $flds[1] ne "DW_AT_name";\
next if $flds[-1] =~ /^DW_FORM_str/;\
print $flds[-1],"\n"; }' |\
sort | uniq > typedefs.list
```
Editor Code Style Configuration
===============================
The `src/tools/editors` directory contains sample settings that can be used with
the emacs, xemacs, vim and CLion editors, that assist in keeping to PostgreSQL
coding standards.
C
1
https://gitee.com/mirrors/gpdb.git
git@gitee.com:mirrors/gpdb.git
mirrors
gpdb
gpdb
main

搜索帮助

53164aa7 5694891 3bd8fe86 5694891