.gitignore 与 Change-Id 的生成

来源:互联网 发布:isp网络数量 编辑:程序博客网 时间:2024/06/03 21:32
#Mac.DS_Store#Java*.class# XCode*.moved-asidebuild/**.xcworkspace*.mode1v3*.mode2v3*.pbxuser!default.xcworkspace!default.mode1v3!default.mode2v3!default.pbxuser*.perspectivev3profilexcuserdata.idea/*#Cocoa pods*.oldPods/*#cocos2d-xlibs/bin/obj/assets/gen/out/.classpath.project.cproject# backup files*.bak*.bak[0-9][0-9]*.orig*.orig[0-9][0-9]# source packages - anywhere*.tar.bz2*.tar.gz*.tar*.tgz*.gtgz


commit-msg  放在.git/hook 下面


#!/bin/sh# From Gerrit Code Review 2.9.3## Part of Gerrit Code Review (http://code.google.com/p/gerrit/)## Copyright (C) 2009 The Android Open Source Project## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.#unset GREP_OPTIONSCHANGE_ID_AFTER="Bug|Issue"MSG="$1"# Check for, and add if missing, a unique Change-Id#add_ChangeId() {clean_message=`sed -e '/^diff --git .*/{s///q}/^Signed-off-by:/d/^#/d' "$MSG" | git stripspace`if test -z "$clean_message"thenreturnfiif test "false" = "`git config --bool --get gerrit.createChangeId`"thenreturnfi# Does Change-Id: already exist? if so, exit (no change).if grep -i '^Change-Id:' "$MSG" >/dev/nullthenreturnfiid=`_gen_ChangeId`T="$MSG.tmp.$$"AWK=awkif [ -x /usr/xpg4/bin/awk ]; then# Solaris AWK is just too brokenAWK=/usr/xpg4/bin/awkfi# How this works:# - parse the commit message as (textLine+ blankLine*)*# - assume textLine+ to be a footer until proven otherwise# - exception: the first block is not footer (as it is the title)# - read textLine+ into a variable# - then count blankLines# - once the next textLine appears, print textLine+ blankLine* as these#   aren't footer# - in END, the last textLine+ block is available for footer parsing$AWK 'BEGIN {# while we start with the assumption that textLine+# is a footer, the first block is not.isFooter = 0footerComment = 0blankLines = 0}# Skip lines starting with "#" without any spaces before it./^#/ { next }# Skip the line starting with the diff command and everything after it,# up to the end of the file, assuming it is only patch data.# If more than one line before the diff was empty, strip all but one./^diff --git / {blankLines = 0while (getline) { }next}# Count blank lines outside footer comments/^$/ && (footerComment == 0) {blankLines++next}# Catch footer comment/^\[[a-zA-Z0-9-]+:/ && (isFooter == 1) {footerComment = 1}/]$/ && (footerComment == 1) {footerComment = 2}# We have a non-blank line after blank lines. Handle this.(blankLines > 0) {print linesfor (i = 0; i < blankLines; i++) {print ""}lines = ""blankLines = 0isFooter = 1footerComment = 0}# Detect that the current block is not the footer(footerComment == 0) && (!/^\[?[a-zA-Z0-9-]+:/ || /^[a-zA-Z0-9-]+:\/\//) {isFooter = 0}{# We need this information about the current last comment lineif (footerComment == 2) {footerComment = 0}if (lines != "") {lines = lines "\n";}lines = lines $0}# Footer handling:# If the last block is considered a footer, splice in the Change-Id at the# right place.# Look for the right place to inject Change-Id by considering# CHANGE_ID_AFTER. Keys listed in it (case insensitive) come first,# then Change-Id, then everything else (eg. Signed-off-by:).## Otherwise just print the last block, a new line and the Change-Id as a# block of its own.END {unprinted = 1if (isFooter == 0) {print lines "\n"lines = ""}changeIdAfter = "^(" tolower("'"$CHANGE_ID_AFTER"'") "):"numlines = split(lines, footer, "\n")for (line = 1; line <= numlines; line++) {if (unprinted && match(tolower(footer[line]), changeIdAfter) != 1) {unprinted = 0print "Change-Id: I'"$id"'"}print footer[line]}if (unprinted) {print "Change-Id: I'"$id"'"}}' "$MSG" > "$T" && mv "$T" "$MSG" || rm -f "$T"}_gen_ChangeIdInput() {echo "tree `git write-tree`"if parent=`git rev-parse "HEAD^0" 2>/dev/null`thenecho "parent $parent"fiecho "author `git var GIT_AUTHOR_IDENT`"echo "committer `git var GIT_COMMITTER_IDENT`"echoprintf '%s' "$clean_message"}_gen_ChangeId() {_gen_ChangeIdInput |git hash-object -t commit --stdin}add_ChangeId



0 0