It was just an experiment so I hadn't thought too much about it. The script receives a directory name (e.g. 'src') as a command-line param and outputs something like
=== src.org.waveprotocol.wave.client.doodad.diff === com.google.gwt.dom.client java.util org.waveprotocol.wave.client.common.util org.waveprotocol.wave.client.editor.content org.waveprotocol.wave.model.document org.waveprotocol.wave.model.document.util org.waveprotocol.wave.model.util === src.org.waveprotocol.wave.model.document.raw === java.util org.waveprotocol.wave.model.document org.waveprotocol.wave.model.document.parser org.waveprotocol.wave.model.document.util org.waveprotocol.wave.model.util ...etc On 22 November 2010 20:47, Vega <[email protected]> wrote: > I see, is there also a description of input and output? > > On Nov 22, 6:59 pm, Alex North <[email protected]> wrote: > > Sure. Here's some python code I hacked up to calculate deps. The goal is > to > > calculate cross-package java deps and write them to a file which we check > > in. Then changing package deps generates a diff for comment in code > review, > > avoiding accidental unwanted deps. > > > > Note that the question is not so much whether it's possible in Java, but > > whether we should suffer using Java for scripting tasks in return for > > avoiding the python dep. I also noticed that in addition to the code > review > > script we also have a python script for compiling the HTML docs from RST. > > > > #!/usr/bin/env python > > > > import re > > import os > > import sys > > > > # Matches an import line, separating the package part (lowercase only) > from > > # the type name. > > IMPORT_RE = re.compile(r'import ([a-z0-9\.]+)\.([\w\.]+);') > > > > def main(): > > if len(sys.argv) < 2: > > print "Usage: %s <root>" % sys.argv[0] > > exit(1) > > root = sys.argv[1] > > > > all_deps = {} > > os.path.walk(root, find_deps, all_deps) > > > > for (package, deps) in all_deps.iteritems(): > > print "===", package, "===" > > ordered_deps = [] > > ordered_deps.extend(deps) > > ordered_deps.sort() > > for dep in ordered_deps: > > print dep > > print > > > > def find_deps(all_deps, dir, names): > > package = dir.partition('/')[2].replace('/', '.') > > > > deps = set() > > for sourcename in names: > > if sourcename.endswith('.java'): > > f = open(os.path.join(dir, sourcename)) > > for line in f: > > match = IMPORT_RE.match(line) > > if match: > > dep = match.group(1) > > deps.add(dep) > > f.close() > > > > if deps: > > all_deps[package] = deps > > > > if __name__ == "__main__": > > main() > > > > On 22 November 2010 16:22, Vega <[email protected]> wrote: > > > > > > > > > > > > > > > > > If you can specify what exactly you want to accomplish with these > > > scripts - I can try to do it with ant. > > > > > On Nov 22, 12:25 am, Vega <[email protected]> wrote: > > > > Also, windows users don't have python preinstalled, so that would > > > > require additional dependency. > > > > > > On Nov 22, 12:23 am, Vega <[email protected]> wrote: > > > > > > > Umm, I am not sure about what scripts you are talking about, but if > > > > > this can be done with ant - I would prefer it this way. Java > > > > > programmers usually have some knowledge of ant, but python is > > > > > different story. > > > > > > > On Nov 21, 11:49 pm, Tad Glines <[email protected]> wrote: > > > > > > > > Given that the review tool also requires python, I don't see a > big > > > problem > > > > > > with additional python dependencies. > > > > > > > > -Tad > > > > > > > > On Sun, Nov 21, 2010 at 1:20 PM, Alex North <[email protected]> > > > wrote: > > > > > > > Hi all, > > > > > > > > > I'm considering introducing a python script to the codebase to > help > > > keep > > > > > > > track of cross-module dependencies. We have tools to help this > > > inside > > > > > > > Google, which is why the libraries code, for example, is not a > pile > > > of > > > > > > > dependency spaghetti. Unfortunately they're not appropriate to > use > > > outside. > > > > > > > We have a couple of options: > > > > > > > > > - Do everything in Java so we can invoke it from ant > > > > > > > - Use python (or some other scripting language) for scripting > > > > > > > > > While possible, I'm not excited about using Java for > script-style > > > things. > > > > > > > We should use a platform-independent scripting language, and > Python > > > is > > > > > > > widely known and understood. This would eventually be a path to > > > replacing > > > > > > > all the shell scripts and batch files too (though some of the > run > > > scripts > > > > > > > can perhaps move into ant). > > > > > > > > > Python would only be required for development, not running the > > > server. > > > > > > > Pre-packaged distros would not require python. > > > > > > > > > Objections? Opinions? > > > > > > > > > Alex > > > > > > > > > -- > > > > > > > You received this message because you are subscribed to the > Google > > > Groups > > > > > > > "Wave Protocol" group. > > > > > > > To post to this group, send email to > > > [email protected]. > > > > > > > To unsubscribe from this group, send email to > > > > > > > [email protected]<wave-protocol%[email protected]> > <wave-protocol%2bunsubscr...@goog legroups.com> > > > <wave-protocol%2bunsubscr...@goog legroups.com> > > > > > > > . > > > > > > > For more options, visit this group at > > > > > > >http://groups.google.com/group/wave-protocol?hl=en. > > > > > -- > > > You received this message because you are subscribed to the Google > Groups > > > "Wave Protocol" group. > > > To post to this group, send email to [email protected]. > > > To unsubscribe from this group, send email to > > > [email protected]<wave-protocol%[email protected]> > <wave-protocol%2bunsubscr...@goog legroups.com> > > > . > > > For more options, visit this group at > > >http://groups.google.com/group/wave-protocol?hl=en. > > -- > You received this message because you are subscribed to the Google Groups > "Wave Protocol" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<wave-protocol%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/wave-protocol?hl=en. > > -- You received this message because you are subscribed to the Google Groups "Wave Protocol" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/wave-protocol?hl=en.
