1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#!/usr/bin/env python
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org# Use of this source code is governed by a BSD-style license
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org# that can be found in the LICENSE file in the root of the source
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org# tree. An additional intellectual property rights grant can be found
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org# in the file PATENTS.  All contributing project authors may
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org# be found in the AUTHORS file in the root of the source tree.
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org"""Get svn revision of working copy
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgThis script tries to get the svn revision as much as it can. It supports
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgboth git-svn and svn. It will fail if not in a git-svn or svn repository;
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgin this case the script will return "n/a".
16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgThis script is a simplified version of lastchange.py which is in Chromium's
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgsrc/build/util folder.
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org"""
19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport os
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport subprocess
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgimport sys
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgdef popen_cmd_and_get_output(cmd, directory):
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  """Return (status, output) of executing cmd in a shell."""
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  try:
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    proc = subprocess.Popen(cmd,
28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                            stdout=subprocess.PIPE,
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                            stderr=subprocess.PIPE,
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                            cwd=directory,
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                            shell=(sys.platform=='win32'))
32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  except OSError:
33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    # command is apparently either not installed or not executable.
34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return None
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  if not proc:
36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    return None
37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  for line in proc.stdout:
39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    line = line.strip()
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if not line:
41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      continue
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    words = line.split()
43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    for index, word in enumerate(words):
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      if word == "Revision:":
45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org        return words[index+1]
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  # return None if cannot find keyword Revision
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  return None
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgdef main():
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  directory = os.path.dirname(sys.argv[0]);
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  version = popen_cmd_and_get_output(['git', 'svn', 'info'], directory)
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  if version == None:
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    version = popen_cmd_and_get_output(['svn', 'info'], directory)
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org    if version == None:
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      print "n/a"
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org      return 0
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  print version
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  return 0
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgif __name__ == '__main__':
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org  sys.exit(main())
62