You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2013/04/17 21:35:47 UTC

svn commit: r1469041 - in /lucene/dev/trunk: ./ dev-tools/ dev-tools/scripts/buildAndPushRelease.py

Author: mikemccand
Date: Wed Apr 17 19:35:47 2013
New Revision: 1469041

URL: http://svn.apache.org/r1469041
Log:
prompt for GPG password up front

Modified:
    lucene/dev/trunk/   (props changed)
    lucene/dev/trunk/dev-tools/   (props changed)
    lucene/dev/trunk/dev-tools/scripts/buildAndPushRelease.py

Modified: lucene/dev/trunk/dev-tools/scripts/buildAndPushRelease.py
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/dev-tools/scripts/buildAndPushRelease.py?rev=1469041&r1=1469040&r2=1469041&view=diff
==============================================================================
--- lucene/dev/trunk/dev-tools/scripts/buildAndPushRelease.py (original)
+++ lucene/dev/trunk/dev-tools/scripts/buildAndPushRelease.py Wed Apr 17 19:35:47 2013
@@ -15,9 +15,11 @@
 
 import datetime
 import re
+import time
 import shutil
 import os
 import sys
+import subprocess
 
 # Usage: python3.2 -u buildAndPushRelease.py [-sign gpgKey(eg: 6E68DA61)] [-prepare] [-push userName] [-pushLocal dirName] [-smoke tmpDir] /path/to/checkout version(eg: 3.4.0) rcNum(eg: 0)
 #
@@ -43,6 +45,25 @@ def run(command):
     print(msg)
     raise RuntimeError(msg)
 
+def runAndSendGPGPassword(command, password):
+  p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
+  f = open(LOG, 'ab')
+  while True:
+    line = p.stdout.readline()
+    if len(line) == 0:
+      break
+    f.write(line)
+    if line.find(b'Enter GPG keystore password:') != -1:
+      time.sleep(1.0)
+      p.stdin.write((password + '\n').encode('UTF-8'))
+      p.stdin.write('\n'.encode('UTF-8'))
+
+  result = p.poll()
+  if result != 0:
+    msg = '    FAILED: %s [see log %s]' % (command, LOG)
+    print(msg)
+    raise RuntimeError(msg)
+
 def scrubCheckout():
   # removes any files not checked into svn
 
@@ -68,7 +89,7 @@ def getSVNRev():
   return rev
   
 
-def prepare(root, version, gpgKeyID, doTest):
+def prepare(root, version, gpgKeyID, gpgPassword, doTest):
   print()
   print('Prepare release...')
   if os.path.exists(LOG):
@@ -98,7 +119,11 @@ def prepare(root, version, gpgKeyID, doT
     cmd += ' -Dgpg.key=%s prepare-release' % gpgKeyID
   else:
     cmd += ' prepare-release-no-sign'
-  run(cmd)
+
+  if gpgPassword is not None:
+    runAndSendGPGPassword(cmd, gpgPassword)
+  else:
+    run(cmd)
   
   print('  solr prepare-release')
   os.chdir('../solr')
@@ -107,7 +132,12 @@ def prepare(root, version, gpgKeyID, doT
     cmd += ' -Dgpg.key=%s prepare-release' % gpgKeyID
   else:
     cmd += ' prepare-release-no-sign'
-  run(cmd)
+
+  if gpgPassword is not None:
+    runAndSendGPGPassword(cmd, gpgPassword)
+  else:
+    run(cmd)
+    
   print('  done!')
   print()
   return rev
@@ -253,12 +283,16 @@ def main():
     gpgKeyID = sys.argv[idx+1]
     del sys.argv[idx:idx+2]
 
+    sys.stdout.flush()
+    import getpass
+    gpgPassword = getpass.getpass('Enter GPG keystore password: ')
+
   root = os.path.abspath(sys.argv[1])
   version = sys.argv[2]
   rcNum = int(sys.argv[3])
 
   if doPrepare:
-    rev = prepare(root, version, gpgKeyID, smokeTmpDir is None)
+    rev = prepare(root, version, gpgKeyID, gpgPassword, smokeTmpDir is None)
   else:
     os.chdir(root)
     rev = open('rev.txt', encoding='UTF-8').read()