DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUGĀ· RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://issues.apache.org/bugzilla/show_bug.cgi?id=42603>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED ANDĀ· INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=42603 Summary: enhance <available> to search for files using wildecards Product: Ant Version: 1.6.5 Platform: Other OS/Version: Windows XP Status: NEW Severity: enhancement Priority: P3 Component: Core AssignedTo: dev@ant.apache.org ReportedBy: [EMAIL PROTECTED] As I use ant to syncronize my buildprocess over seperated computers, I need to know, if some is still building or not. I do that over filesystem with files like "abc.building" "def.building" etc. Now, the main task should wait until none of the others is building any more. Until today (I modified my ant version today to achieve the goal) I have to write it like this: <waitfor maxwait="60" maxwaitunit="minute" checkevery="5" checkeveryunit="second" timeoutproperty="waitforOthersTimeout"> <not> <or> <available file="${buildsrv_exchange}\list_abc.building"/> <available file="${buildsrv_exchange}\list_def.building"/> <available file="${buildsrv_exchange}\list_something.building"/> <available file="${buildsrv_exchange}\list_abc.shouldstart"/> <available file="${buildsrv_exchange}\list_def.shouldstart"/> <available file="${buildsrv_exchange}\list_something.shouldstart"/> </or> </not> </waitfor> I now can write this like this: <available MatchFilename="list*.building" MatchFilepath="${buildsrv_exchange}"/> <available MatchFilename="list*.shouldstart" MatchFilepath="${buildsrv_exchange}"/> I have not only 2 tasks to wait for, but many, so it is in deed a gread enhancement if I can be able to use wildcards like '*" and '?'. The code is not perfect, but a quick-and-dirty hack for <available>, the "MatchFilepath" must be set in that case, you can do that better and use the existend "filepath" instead of introducing a new "MatchFilepath". You can also easyly add a "scanSubdir" feature. But here it is (additional lines for Available.java (in v.1.6.5): add: private String matchFilepath = null; enhance: private boolean checkFile() { if (matchFilepath != null) { return checkMatchFilePath(file, false); } add: /** * Check if a given filename exists and matches the pattern (no RegEx) */ public void setMatchFilename(String filename) { this.filename = filename; } public void setMatchFilepath(String path) { this.matchFilepath = path; this.file = new File(path); } private boolean stringCompare(String strCompare, String strSource) { int i = 0; int l = strCompare.length(); if (strSource.length() < l) { return false; } if (strCompare.equalsIgnoreCase(strSource)) { return true; } boolean bMatch = true; while (bMatch && (i < l)) { switch (strCompare.charAt(i)) { case '?': break; // ignore single char case '*': i = l; // ignore rest break; default: if (strCompare.charAt(i) != strSource.charAt(i)) { bMatch = false; // Stop here. } break; } i++; } return bMatch; } private boolean filenameMatchesFilter(String sFilename, String sFilter) { if (sFilter.length() == 0) return true; int i = sFilter.lastIndexOf("."); int j; // filter has file extension? if (i > 0) { j = sFilename.lastIndexOf("."); if (j > 0) { // check file extension seperatly if (stringCompare(sFilter.substring(i + 1), sFilename.substring(j + 1))) { // check filename (without ext) return (stringCompare(sFilter.substring(0, i), sFilename.substring(0, j))); } } else { // file has no extension, check filter extension is .* if (stringCompare(sFilter.substring(i + 1), "*")) { // check filename (without ext) return (stringCompare(sFilter.substring(0, i - 1), sFilename)); } } } else { // filter without file extension return (stringCompare(sFilter, sFilename)); } return false; } private boolean fileMatchFilter(String fi, String filename) { if (fi != null) { if ((fi == "*.*") || (fi == "*")) { // this normally means "all files" return true; } if (filenameMatchesFilter(filename.toUpperCase(), fi.toUpperCase())) { return true; } } return false; } private boolean checkMatchFilePath(File recurDir, boolean scanSubdirs) { if ((!recurDir.exists()) || (!recurDir.isDirectory())) { return false; } int i; File aDirectory = null; File[] aDirList = recurDir.listFiles(); if (aDirList != null && aDirList.length > 0) { for (i = 0; i < aDirList.length; i++) { aDirectory = aDirList[i]; if (aDirectory.canRead()) { if (aDirectory.isDirectory()) { if (scanSubdirs) { if (checkMatchFilePath(aDirectory, true)) { return true; } } } else { if (fileMatchFilter(this.filename, aDirectory.getName())) { return true; } } } } } return false; } -- Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]