8

Would really appreciate feedback on this issue

import subprocess

def main():
'''
Here's where the whole thing starts.
'''
#Edit this constant to change the file name in the git log command.
FILE_NAME = 'file1.xml'

#Do the git describe command to get the tag names.
gitDescribe = 'git describe --tags `git rev-list --tags --max-count=2`'
print ('Invoking: {0}'.format(gitDescribe))
p1 = subprocess.Popen(gitDescribe, shell=True, stdout=subprocess.PIPE)
output = p1.stdout.read()

#Get the first 2 tags from the output.
parsedOutput = output.split('\n')
tag1 = parsedOutput[0]
tag2 = parsedOutput[1]

print('First revision: {0}'.format(tag1))
print('Second revision: {1}'.format(tag2))
#Do the git log command for the revision comparison.
gitLog = 'git log {0}..{1} --pretty=format:"%an %h %ad %d %s" --date=short --topo-order --no-merges {2}'.format(tag1, tag2, FILE_NAME)
print('Invoking: {0}'.format(gitLog))
p2 = subprocess.Popen(gitLog, shell=True, stdout=subprocess.PIPE)
output = p2.stdout.read()
print(output)

if __name__ == "__main__":
    main()

...

bash-3.2$ python pygit5.py 
Invoking: git describe --tags `git rev-list --tags --max-count=2`

First revision: 14.5.5.1
Traceback (most recent call last):
File "pygit5.py", line 31, in <module>
main()
File "pygit5.py", line 22, in main
print('Second revision: {1}'.format(tag2))
IndexError: tuple index out of range

2 Answers 2

13

tag2 is only a single value, like tag1, so you can't reference item[1]. No doubt you mean

print('Second revision: {0}'.format(tag2))
Sign up to request clarification or add additional context in comments.

1 Comment

Or possibly tag2 is a tuple and then *tag2 which would expand the tuple into arguments for the format call and {1} will use the second item from the tuple.
8

When using formatting as you have, remember that in most programming languages, counting starts from zero. So since tag2 only carries one value, the following line:

print('Second revision: {1}'.format(tag2))

Should really be:

print('Second revision: {0}'.format(tag2))

You can also leave it empty for simple scripts if using python 2.7+:

print('Second revision: {}'.format(tag2))

Or provide them in any order with named variables:

print('Second revision: {revisiontag}'.format(revisiontag=tag2))

1 Comment

In Python 2.6 you have to put an index of some sort in the braces. The empty braces work in 2.7+ and 3.x.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.