)]}'
{"openstack/common/rootwrap/filters.py":[{"author":{"_account_id":308,"name":"Thierry Carrez","email":"thierry@openstack.org","username":"ttx"},"change_message_id":"0a84683ec04afab97478fd7d045c471719e6c6c3","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        if (argv[1].partition(\u0027\u003d\u0027)[0] not in"},{"line_number":151,"context_line":"                (\u0027QUANTUM_NETWORK_ID\u0027, \u0027NETWORK_ID\u0027)):"},{"line_number":152,"context_line":"            return False"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        return True"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F22s%3D","line":152,"updated":"2013-05-21 15:47:07.000000000","message":"This sounds a bit convoluted, the pairing of variables is actually more important than the order they are specified.\n\nAt this point I\u0027d rather rewrite both DnsmasqFilters to be generic EnvFilters that take a list of environment variables to pass in their filter definition.","commit_id":"4e136084437ddf71cc47a3e41df9029c42a64660"},{"author":{"_account_id":308,"name":"Thierry Carrez","email":"thierry@openstack.org","username":"ttx"},"change_message_id":"0a84683ec04afab97478fd7d045c471719e6c6c3","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        env[\u0027QUANTUM_RELAY_SOCKET_PATH\u0027] \u003d userargs[1].split(\u0027\u003d\u0027)[-1]"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        env[\u0027NETWORK_ID\u0027] \u003d userargs[2].split(\u0027\u003d\u0027)[-1]"},{"line_number":174,"context_line":"        env[\u0027QUANTUM_NETWORK_ID\u0027] \u003d userargs[2].split(\u0027\u003d\u0027)[-1]"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        return env"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPH%2F%2F21g%3D","line":174,"updated":"2013-05-21 15:47:07.000000000","message":"Weird to pass extra unneeded variables. Better rewrite it to be generic (see above)","commit_id":"4e136084437ddf71cc47a3e41df9029c42a64660"},{"author":{"_account_id":5638,"name":"Davanum Srinivas","email":"davanum@gmail.com","username":"dims-v"},"change_message_id":"09a68f62de3ed7e2d128be530260c2a8996f0d67","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        super(ReadFileFilter, self).__init__(\"/bin/cat\", \"root\", *args)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def match(self, userargs):"},{"line_number":222,"context_line":"        return (userargs \u003d\u003d [\u0027cat\u0027, self.file_path])"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"class IpFilter(CommandFilter):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2FeXg%3D","line":222,"updated":"2013-06-02 23:38:39.000000000","message":"Is this change related to this BP?","commit_id":"57ee3040f861edd7da8281de4e5ee2ca30731c97"},{"author":{"_account_id":6593,"name":"Dirk Mueller","email":"dirk@dmllr.de","username":"dmllr"},"change_message_id":"f189fa148c959623bf0f36ed45683e4a332ff92a","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        super(ReadFileFilter, self).__init__(\"/bin/cat\", \"root\", *args)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def match(self, userargs):"},{"line_number":222,"context_line":"        return (userargs \u003d\u003d [\u0027cat\u0027, self.file_path])"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"class IpFilter(CommandFilter):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2Fdms%3D","line":222,"in_reply_to":"AAAAPH%2F%2FeXg%3D","updated":"2013-06-03 13:03:58.000000000","message":"Not really, just a minor code beautification. I can put it into a separate review..","commit_id":"57ee3040f861edd7da8281de4e5ee2ca30731c97"},{"author":{"_account_id":308,"name":"Thierry Carrez","email":"thierry@openstack.org","username":"ttx"},"change_message_id":"6b4d09964f653bfc523a63addf8cc4d6ab719a00","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def match(self, userargs):"},{"line_number":49,"context_line":"        \"\"\"Only check that the first argument (command) matches exec_path.\"\"\""},{"line_number":50,"context_line":"        return (len(userargs)"},{"line_number":51,"context_line":"                and os.path.basename(self.exec_path) \u003d\u003d userargs[0])"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def get_command(self, userargs, exec_dirs\u003d[]):"},{"line_number":54,"context_line":"        \"\"\"Returns command to execute (with sudo -u if run_as !\u003d root).\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2FwAw%3D","line":51,"updated":"2013-06-11 13:23:07.000000000","message":"This is unrelated to the larger changes and should be split into a separate change","commit_id":"395236d2315b9fd454b737c1368dde238ce19d13"},{"author":{"_account_id":308,"name":"Thierry Carrez","email":"thierry@openstack.org","username":"ttx"},"change_message_id":"c14191b2a59cf5fcfe60726c8cd581d0e13168da","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def match(self, userargs):"},{"line_number":49,"context_line":"        \"\"\"Only check that the first argument (command) matches exec_path.\"\"\""},{"line_number":50,"context_line":"        return (len(userargs)"},{"line_number":51,"context_line":"                and os.path.basename(self.exec_path) \u003d\u003d userargs[0])"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def get_command(self, userargs, exec_dirs\u003d[]):"},{"line_number":54,"context_line":"        \"\"\"Returns command to execute (with sudo -u if run_as !\u003d root).\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2FtJg%3D","line":51,"in_reply_to":"AAAAPX%2F%2FvY4%3D","updated":"2013-06-12 12:37:05.000000000","message":"No it\u0027s fine if it\u0027s related.","commit_id":"395236d2315b9fd454b737c1368dde238ce19d13"},{"author":{"_account_id":6593,"name":"Dirk Mueller","email":"dirk@dmllr.de","username":"dmllr"},"change_message_id":"50ed9a6e476493684ef18884d73cebee19ce9ef1","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def match(self, userargs):"},{"line_number":49,"context_line":"        \"\"\"Only check that the first argument (command) matches exec_path.\"\"\""},{"line_number":50,"context_line":"        return (len(userargs)"},{"line_number":51,"context_line":"                and os.path.basename(self.exec_path) \u003d\u003d userargs[0])"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def get_command(self, userargs, exec_dirs\u003d[]):"},{"line_number":54,"context_line":"        \"\"\"Returns command to execute (with sudo -u if run_as !\u003d root).\"\"\""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2FvY4%3D","line":51,"in_reply_to":"AAAAPX%2F%2FwAw%3D","updated":"2013-06-11 16:12:08.000000000","message":"It is actually a bugfix that triggered in the EnvFilter tests.. I can move that to a separate patch but I think it is related.","commit_id":"395236d2315b9fd454b737c1368dde238ce19d13"},{"author":{"_account_id":308,"name":"Thierry Carrez","email":"thierry@openstack.org","username":"ttx"},"change_message_id":"6b4d09964f653bfc523a63addf8cc4d6ab719a00","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        return super(PathFilter, self).get_command([command] + args,"},{"line_number":133,"context_line":"                                                   exec_dirs)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class DnsmasqFilter(CommandFilter):"},{"line_number":137,"context_line":"    \"\"\"Specific filter for the dnsmasq call (which includes env).\"\"\""},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2FwAI%3D","line":135,"updated":"2013-06-11 13:23:07.000000000","message":"I would remove this one as we add the EnvFilter... and when we copy this code over to Nova and Quantum, make them use EnvFilter.","commit_id":"395236d2315b9fd454b737c1368dde238ce19d13"},{"author":{"_account_id":308,"name":"Thierry Carrez","email":"thierry@openstack.org","username":"ttx"},"change_message_id":"c14191b2a59cf5fcfe60726c8cd581d0e13168da","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        return super(PathFilter, self).get_command([command] + args,"},{"line_number":133,"context_line":"                                                   exec_dirs)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class DnsmasqFilter(CommandFilter):"},{"line_number":137,"context_line":"    \"\"\"Specific filter for the dnsmasq call (which includes env).\"\"\""},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2FtJQ%3D","line":135,"in_reply_to":"AAAAPX%2F%2FvY0%3D","updated":"2013-06-12 12:37:05.000000000","message":"OK, that works.","commit_id":"395236d2315b9fd454b737c1368dde238ce19d13"},{"author":{"_account_id":6593,"name":"Dirk Mueller","email":"dirk@dmllr.de","username":"dmllr"},"change_message_id":"50ed9a6e476493684ef18884d73cebee19ce9ef1","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        return super(PathFilter, self).get_command([command] + args,"},{"line_number":133,"context_line":"                                                   exec_dirs)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class DnsmasqFilter(CommandFilter):"},{"line_number":137,"context_line":"    \"\"\"Specific filter for the dnsmasq call (which includes env).\"\"\""},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2FvY0%3D","line":135,"in_reply_to":"AAAAPX%2F%2FwAI%3D","updated":"2013-06-11 16:12:08.000000000","message":"i would actually prefer to not break Quantum (so my workflow was to first add the new filter, then get quantum to use it, then remove the old stuff).","commit_id":"395236d2315b9fd454b737c1368dde238ce19d13"},{"author":{"_account_id":308,"name":"Thierry Carrez","email":"thierry@openstack.org","username":"ttx"},"change_message_id":"6b4d09964f653bfc523a63addf8cc4d6ab719a00","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        env[\u0027NETWORK_ID\u0027] \u003d userargs[2].split(\u0027\u003d\u0027)[-1]"},{"line_number":158,"context_line":"        return env"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"class DeprecatedDnsmasqFilter(DnsmasqFilter):"},{"line_number":162,"context_line":"    \"\"\"Variant of dnsmasq filter to support old-style FLAGFILE.\"\"\""},{"line_number":163,"context_line":"    CONFIG_FILE_ARG \u003d \u0027FLAGFILE\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2Fv%2F4%3D","line":160,"updated":"2013-06-11 13:23:07.000000000","message":"This should be removed as well","commit_id":"395236d2315b9fd454b737c1368dde238ce19d13"},{"author":{"_account_id":308,"name":"Thierry Carrez","email":"thierry@openstack.org","username":"ttx"},"change_message_id":"c14191b2a59cf5fcfe60726c8cd581d0e13168da","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        env[\u0027NETWORK_ID\u0027] \u003d userargs[2].split(\u0027\u003d\u0027)[-1]"},{"line_number":158,"context_line":"        return env"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"class DeprecatedDnsmasqFilter(DnsmasqFilter):"},{"line_number":162,"context_line":"    \"\"\"Variant of dnsmasq filter to support old-style FLAGFILE.\"\"\""},{"line_number":163,"context_line":"    CONFIG_FILE_ARG \u003d \u0027FLAGFILE\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2FtJM%3D","line":160,"in_reply_to":"AAAAPX%2F%2Fv%2F4%3D","updated":"2013-06-12 12:37:05.000000000","message":"Ignore me.","commit_id":"395236d2315b9fd454b737c1368dde238ce19d13"},{"author":{"_account_id":308,"name":"Thierry Carrez","email":"thierry@openstack.org","username":"ttx"},"change_message_id":"6b4d09964f653bfc523a63addf8cc4d6ab719a00","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        super(ReadFileFilter, self).__init__(\"/bin/cat\", \"root\", *args)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def match(self, userargs):"},{"line_number":223,"context_line":"        return (userargs \u003d\u003d [\u0027cat\u0027, self.file_path])"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"class IpFilter(CommandFilter):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2FwAo%3D","line":223,"updated":"2013-06-11 13:23:07.000000000","message":"This is unrelated to the larger changes and should be split into a separate change (maybe together with the other optimization above)","commit_id":"395236d2315b9fd454b737c1368dde238ce19d13"},{"author":{"_account_id":6593,"name":"Dirk Mueller","email":"dirk@dmllr.de","username":"dmllr"},"change_message_id":"86118ac71bc12be9d8b9765f23008fadd1830c88","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        super(ReadFileFilter, self).__init__(\"/bin/cat\", \"root\", *args)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def match(self, userargs):"},{"line_number":223,"context_line":"        return (userargs \u003d\u003d [\u0027cat\u0027, self.file_path])"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"class IpFilter(CommandFilter):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2Fs68%3D","line":223,"in_reply_to":"AAAAPX%2F%2FtI8%3D","updated":"2013-06-13 09:59:23.000000000","message":"I\u0027m looking at fixing a bug in EnvFilter first.. I\u0027ll hopefully get to it tonight.","commit_id":"395236d2315b9fd454b737c1368dde238ce19d13"},{"author":{"_account_id":308,"name":"Thierry Carrez","email":"thierry@openstack.org","username":"ttx"},"change_message_id":"c14191b2a59cf5fcfe60726c8cd581d0e13168da","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        super(ReadFileFilter, self).__init__(\"/bin/cat\", \"root\", *args)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def match(self, userargs):"},{"line_number":223,"context_line":"        return (userargs \u003d\u003d [\u0027cat\u0027, self.file_path])"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"class IpFilter(CommandFilter):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2FtI8%3D","line":223,"in_reply_to":"AAAAPX%2F%2FvYw%3D","updated":"2013-06-12 12:37:05.000000000","message":"I don\u0027t see a new changeset though ?","commit_id":"395236d2315b9fd454b737c1368dde238ce19d13"},{"author":{"_account_id":6593,"name":"Dirk Mueller","email":"dirk@dmllr.de","username":"dmllr"},"change_message_id":"50ed9a6e476493684ef18884d73cebee19ce9ef1","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        super(ReadFileFilter, self).__init__(\"/bin/cat\", \"root\", *args)"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def match(self, userargs):"},{"line_number":223,"context_line":"        return (userargs \u003d\u003d [\u0027cat\u0027, self.file_path])"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"class IpFilter(CommandFilter):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPX%2F%2FvYw%3D","line":223,"in_reply_to":"AAAAPX%2F%2FwAo%3D","updated":"2013-06-11 16:12:08.000000000","message":"Done","commit_id":"395236d2315b9fd454b737c1368dde238ce19d13"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"4b272fa5071d5f4239f7b861fb288855a187f6ce","unresolved":false,"context_lines":[{"line_number":251,"context_line":"class EnvFilter(CommandFilter):"},{"line_number":252,"context_line":"    \"\"\"Specific filter for the env utility."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"       Behaves like CommandFilter, except that it handles"},{"line_number":255,"context_line":"       leading env A\u003dB.. strings appropriately."},{"line_number":256,"context_line":"    \"\"\""},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2F3sE%3D","line":254,"updated":"2013-06-19 12:42:54.000000000","message":"align (3 more spaces then needed)","commit_id":"caba5fcc14253084afba4db38d4b2377f15e34e6"},{"author":{"_account_id":6593,"name":"Dirk Mueller","email":"dirk@dmllr.de","username":"dmllr"},"change_message_id":"499204eea147e12ca63634023c2242d6a43c226d","unresolved":false,"context_lines":[{"line_number":251,"context_line":"class EnvFilter(CommandFilter):"},{"line_number":252,"context_line":"    \"\"\"Specific filter for the env utility."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"       Behaves like CommandFilter, except that it handles"},{"line_number":255,"context_line":"       leading env A\u003dB.. strings appropriately."},{"line_number":256,"context_line":"    \"\"\""},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2F3eA%3D","line":254,"in_reply_to":"AAAAPn%2F%2F3sE%3D","updated":"2013-06-19 14:07:33.000000000","message":"Done","commit_id":"caba5fcc14253084afba4db38d4b2377f15e34e6"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"4b272fa5071d5f4239f7b861fb288855a187f6ce","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        # env A\u003da B\u003db C\u003dc X Y Z"},{"line_number":274,"context_line":"        if \"env\" in exec_path and len(env_list) \u003c len(self.args):"},{"line_number":275,"context_line":"            self.exec_path \u003d self.args[len(env_list)]"},{"line_number":276,"context_line":"        pass"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def match(self, userargs):"},{"line_number":279,"context_line":"        if userargs[0] !\u003d \u0027env\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2F3rw%3D","line":276,"updated":"2013-06-19 12:42:54.000000000","message":"unnecessary \"pass\"","commit_id":"caba5fcc14253084afba4db38d4b2377f15e34e6"},{"author":{"_account_id":6593,"name":"Dirk Mueller","email":"dirk@dmllr.de","username":"dmllr"},"change_message_id":"499204eea147e12ca63634023c2242d6a43c226d","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        # env A\u003da B\u003db C\u003dc X Y Z"},{"line_number":274,"context_line":"        if \"env\" in exec_path and len(env_list) \u003c len(self.args):"},{"line_number":275,"context_line":"            self.exec_path \u003d self.args[len(env_list)]"},{"line_number":276,"context_line":"        pass"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def match(self, userargs):"},{"line_number":279,"context_line":"        if userargs[0] !\u003d \u0027env\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2F3dk%3D","line":276,"in_reply_to":"AAAAPn%2F%2F3rw%3D","updated":"2013-06-19 14:07:33.000000000","message":"Done","commit_id":"caba5fcc14253084afba4db38d4b2377f15e34e6"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"4b272fa5071d5f4239f7b861fb288855a187f6ce","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        args \u003d userargs[1:]"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        # throw away all NAME\u003dVALUE arguments"},{"line_number":299,"context_line":"        while args and \u0027\u003d\u0027 in args[0]:"},{"line_number":300,"context_line":"            args \u003d args[1:]"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        #if args:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2F3q8%3D","line":299,"updated":"2013-06-19 12:42:54.000000000","message":"is this really throws away all NAME\u003dVALUE arguments, or only first ones?\n\nthis dont work with this case:\n\n[\"asd\",\"q\u003de\",\"qwe\", \"ppp\"]","commit_id":"caba5fcc14253084afba4db38d4b2377f15e34e6"},{"author":{"_account_id":6593,"name":"Dirk Mueller","email":"dirk@dmllr.de","username":"dmllr"},"change_message_id":"499204eea147e12ca63634023c2242d6a43c226d","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        args \u003d userargs[1:]"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"        # throw away all NAME\u003dVALUE arguments"},{"line_number":299,"context_line":"        while args and \u0027\u003d\u0027 in args[0]:"},{"line_number":300,"context_line":"            args \u003d args[1:]"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"        #if args:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2F3d4%3D","line":299,"in_reply_to":"AAAAPn%2F%2F3q8%3D","updated":"2013-06-19 14:07:33.000000000","message":"yeah, I meant leading ones.","commit_id":"caba5fcc14253084afba4db38d4b2377f15e34e6"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"4b272fa5071d5f4239f7b861fb288855a187f6ce","unresolved":false,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"class IpNetnsExecFilter(ChainingFilter):"},{"line_number":330,"context_line":"    \"\"\"Specific filter for the ip utility to that does match exec.\"\"\""},{"line_number":331,"context_line":"    def match(self, userargs):"},{"line_number":332,"context_line":"        # Network namespaces currently require root"},{"line_number":333,"context_line":"        # require \u003cns\u003e argument"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2F3qc%3D","line":330,"updated":"2013-06-19 12:42:54.000000000","message":"empty line after docstring","commit_id":"caba5fcc14253084afba4db38d4b2377f15e34e6"},{"author":{"_account_id":6593,"name":"Dirk Mueller","email":"dirk@dmllr.de","username":"dmllr"},"change_message_id":"499204eea147e12ca63634023c2242d6a43c226d","unresolved":false,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":""},{"line_number":329,"context_line":"class IpNetnsExecFilter(ChainingFilter):"},{"line_number":330,"context_line":"    \"\"\"Specific filter for the ip utility to that does match exec.\"\"\""},{"line_number":331,"context_line":"    def match(self, userargs):"},{"line_number":332,"context_line":"        # Network namespaces currently require root"},{"line_number":333,"context_line":"        # require \u003cns\u003e argument"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2F3ds%3D","line":330,"in_reply_to":"AAAAPn%2F%2F3qc%3D","updated":"2013-06-19 14:07:33.000000000","message":"Done","commit_id":"caba5fcc14253084afba4db38d4b2377f15e34e6"},{"author":{"_account_id":308,"name":"Thierry Carrez","email":"thierry@openstack.org","username":"ttx"},"change_message_id":"442e662a1f32e7f3f9032e0abfa7858483faad0e","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def match(self, userargs):"},{"line_number":278,"context_line":"        if userargs[0] !\u003d \u0027env\u0027:"},{"line_number":279,"context_line":"            return False"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        # require one additional argument after configured ones"},{"line_number":282,"context_line":"        if len(userargs[1:]) \u003c len(self.args):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2F1F8%3D","line":279,"updated":"2013-06-20 08:17:27.000000000","message":"This is where you require the first userargs to be \u0027env\u0027","commit_id":"dcaca72a4ac10be2023ac00dd470557d5e736c79"}],"tests/unit/test_rootwrap.py":[{"author":{"_account_id":308,"name":"Thierry Carrez","email":"thierry@openstack.org","username":"ttx"},"change_message_id":"442e662a1f32e7f3f9032e0abfa7858483faad0e","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        # accept with leading env"},{"line_number":89,"context_line":"        self.assertTrue(f.match(envcmd + [\"sleep\"]))"},{"line_number":90,"context_line":"        # accept without leading env"},{"line_number":91,"context_line":"        self.assertTrue(envset + [\"sleep\"])"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        # any other command does not match"},{"line_number":94,"context_line":"        self.assertFalse(f.match(envcmd + [\"sleep2\"]))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2F1HU%3D","line":91,"updated":"2013-06-20 08:17:27.000000000","message":"Should be \u0027self.assertTrue(f.match(envset + [\"sleep\"]))","commit_id":"dcaca72a4ac10be2023ac00dd470557d5e736c79"},{"author":{"_account_id":308,"name":"Thierry Carrez","email":"thierry@openstack.org","username":"ttx"},"change_message_id":"442e662a1f32e7f3f9032e0abfa7858483faad0e","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        # accept with leading env"},{"line_number":127,"context_line":"        self.assertTrue(f.match(envcmd + [\"sleep\"]))"},{"line_number":128,"context_line":"        # accept without leading env"},{"line_number":129,"context_line":"        self.assertTrue(envset + [\"sleep\"])"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        self.assertEqual(f.get_command(envcmd + [\"sleep\"]), [\"sleep\"])"},{"line_number":132,"context_line":"        self.assertEqual(f.get_command(envset + [\"sleep\"]), [\"sleep\"])"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2F1GM%3D","line":129,"updated":"2013-06-20 08:17:27.000000000","message":"Should be \u0027self.assertTrue(f.match(envset + [\"sleep\"]))","commit_id":"dcaca72a4ac10be2023ac00dd470557d5e736c79"}]}
