ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/GoogleTron/FileSystem.cpp
Revision: 705
Committed: 2006-03-18T20:49:26-08:00 (19 years, 3 months ago) by douglas
File size: 2008 byte(s)
Log Message:
Should work for FileSystem fairly well...

File Contents

# Content
1 // File System
2 //
3 // Douglas Thrift
4 //
5 // $Id$
6
7 #include <cxx/standard.hh>
8
9 #include <api/pcre/regex.hpp>
10
11 #include "FileSystem.hpp"
12
13 FileSystem::FileSystem(const cse::String &sitemap, const cse::String &base, ext::Queue<Url> &queue, api::ThreadMutex &queueLock, const _R<FileSystemCommand> &command) : CommandRunner(sitemap, base, queue, queueLock)
14 {
15 api::Cout << _B("File System") << ios::NewLine;
16
17 Directory(*command, base);
18 }
19
20 void FileSystem::Directory(const api::Path &directory, const cse::String &base)
21 {
22 ext::RedBlackSet<cse::String> excludes;
23
24 {
25 _S<ios::Buffer> property(client.GetProperty(_B("GoogleTron:Exclude"), directory.GetPath()));
26 ext::Buffer exclude;
27
28 while (ios::ReadLine(property, exclude))
29 excludes.Insert(exclude);
30 }
31
32 if (base == this->base)
33 excludes.Insert(sitemap);
34
35 _foreach (const _L<Subversion::Entry>, entry, client.GetEntries(directory.GetPath()))
36 if (!entry->GetName().StartsWith('.') && !excludes.Contains(entry->GetName()) && client.GetProperty(_B("svn:mime-type"), directory.GetChild(entry->GetName()).GetPath()).IsEmpty())
37 switch (entry->GetKind())
38 {
39 case Subversion::file:
40 File(directory.GetChild(entry->GetName()), base, *entry);
41 break;
42 case Subversion::dir:
43 Directory(directory.GetChild(entry->GetName()), _S<ios::String>() << base << entry->GetName() << _B("/"));
44 break;
45 _nodefault
46 }
47 }
48
49 void FileSystem::File(const api::Path &file, const cse::String &base, const Subversion::Entry &entry)
50 {
51 _S<ios::String> location(base);
52
53 if (!api::Pcre::RegEx(_B("^index\\..+$"))(entry.GetName()))
54 {
55 cse::String actually(client.GetProperty(_B("GoogleTron:Actually"), file.GetPath()));
56
57 if (actually.IsEmpty())
58 location << entry.GetName();
59 else
60 location << actually;
61 }
62
63 Url url(location, entry.GetModified(), GetFrequency(client.GetProperty(_B("GoogleTron:Frequency"), file.GetPath())), GetPriority(client.GetProperty(_B("GoogleTron:Priority"), file.GetPath())));
64
65 _synchronized (queueLock)
66 queue.Push(url);
67 }

Properties

Name Value
svn:eol-style native
svn:keywords Id