]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - release/scripts/list-new-changesets.py
Optionally bind ktls threads to NUMA domains
[FreeBSD/FreeBSD.git] / release / scripts / list-new-changesets.py
1 #!/usr/bin/env python
2 #
3 # Copyright (c) 2014, Craig Rodrigues <rodrigc@FreeBSD.org>
4 # All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
8 # are met:
9 # 1. Redistributions of source code must retain the above copyright
10 #    notice unmodified, this list of conditions, and the following
11 #    disclaimer.
12 # 2. Redistributions in binary form must reproduce the above copyright
13 #    notice, this list of conditions and the following disclaimer in the
14 #     documentation and/or other materials provided with the distribution.
15 #
16 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 #
27 # $FreeBSD$
28
29 # Display SVN log entries for changesets which have files which were
30 # Added or Deleted.
31 # This script takes arguments which would normally be
32 # passed to the "svn log" command.
33 #
34 # Examples:
35 #
36 #  (1) Display all new changesets in stable/10 branch:  
37 #
38 #        list-new-changesets.py --stop-on-copy \
39 #                        svn://svn.freebsd.org/base/stable/10 
40 #
41 #  (2) Display all new changesets between r254153 and r261794 in
42 #      stable/9 branch:
43 #
44 #        list-new-changesets.py  -r254153:261794 \
45 #                        svn://svn.freebsd.org/base/stable/9
46
47 from __future__ import print_function
48 import os
49 import subprocess
50 import sys
51 import xml.etree.ElementTree
52
53 def print_logentry(logentry):
54     """Print an SVN log entry.
55  
56     Take an SVN log entry formatted in XML, and print it out in
57     plain text.
58     """
59     rev = logentry.attrib['revision']
60     author = logentry.find('author').text
61     date = logentry.find('date').text
62     msg = logentry.find('msg').text
63
64     print("-" * 71)
65     print("%s | %s | %s" % (rev, author, date))
66     print("Changed paths:")
67     for paths in logentry.findall('paths'):
68         for path in paths.findall('path'):
69             print("   %s %s" % (path.attrib['action'], path.text))
70
71     print()
72     print(msg.encode('utf-8'))
73
74 def main(args):
75     """Main function.
76
77     Take command-line arguments which would be passed to 'svn log'.
78     Prepend '-v --xml' to get verbose XML formatted output.
79     Only display entries which have Added or Deleted files.
80     """
81     cmd = ["svn", "log", "-v", "--xml"]
82     cmd += args[1:] 
83
84     print(" ".join(cmd))
85
86     proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
87     (out, err) = proc.communicate()
88
89     if proc.returncode != 0:
90         print(err)
91         sys.exit(proc.returncode) 
92
93     displayed_entries = 0
94     root = xml.etree.ElementTree.fromstring(out)
95
96     for logentry in root.findall('logentry'):
97        show_logentry = False
98     
99        for paths in logentry.findall('paths'):
100            for path in paths.findall('path'):
101                if path.attrib['action'] == 'A':
102                   show_logentry = True
103                elif path.attrib['action'] == 'D':
104                   show_logentry = True
105            
106        if show_logentry == True :
107            print_logentry(logentry)
108            displayed_entries += 1
109
110     if displayed_entries == 0:
111         print("No changesets with Added or Deleted files")
112
113     if displayed_entries > 0:    
114         print("-" * 71)
115
116
117 if __name__ == "__main__":
118     main(sys.argv)