Skip to content

Commit 9b0f887

Browse files
committed
Merge pull request #14 from codebendercc/dev
Merge dev to master
2 parents c924d81 + df93198 commit 9b0f887

File tree

3 files changed

+118
-0
lines changed

3 files changed

+118
-0
lines changed

Symfony/src/Codebender/CompilerBundle/Controller/DefaultController.php

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,114 @@ public function indexAction($auth_key, $version)
6969
}
7070
}
7171

72+
public function deleteAllObjectsAction($auth_key, $version)
73+
{
74+
if ($this->container->getParameter('auth_key') != $auth_key)
75+
return new Response(json_encode(array("success" => false, "step" => 0, "message" => "Invalid authorization key.")));
76+
77+
if ($version != "v1")
78+
return new Response(json_encode(array("success" => false, "step" => 0, "message" => "Invalid API version.")));
79+
80+
$tempDir = $this->container->getParameter('temp_dir');
81+
$objectFilesDir = $this->container->getParameter('objdir');
82+
$fileCount = 0;
83+
$undeletedFiles = "";
84+
$deletionStats = array("success_dot_a" => 0,
85+
"failure_dot_a" => 0,
86+
"success_dot_o" => 0,
87+
"failure_dot_o" => 0,
88+
"success_dot_d" => 0,
89+
"failure_dot_d" => 0,
90+
"success_dot_LOCK" => 0,
91+
"failure_dot_LOCK" => 0);
92+
93+
if ($handle = opendir("$tempDir/$objectFilesDir"))
94+
{
95+
96+
while (false !== ($entry = readdir($handle)))
97+
{
98+
if ($entry != "." && $entry != ".." && $entry != ".DS_Store")
99+
{
100+
$fileCount++;
101+
$extension = pathinfo($entry, PATHINFO_EXTENSION);
102+
103+
if (!in_array($extension, array("a", "o", "d", "LOCK")))
104+
continue;
105+
106+
if (@unlink("$tempDir/$objectFilesDir/$entry") === false)
107+
{
108+
$deletionStats["failure_dot_$extension"]++;
109+
$undeletedFiles .= $entry . "\n";
110+
}
111+
else
112+
$deletionStats["success_dot_$extension"]++;
113+
}
114+
}
115+
closedir($handle);
116+
}else
117+
return new Response(json_encode(array("success" => false, "step" => 0, "message" => "Failed to access object files directory.")));
118+
119+
return new Response(json_encode(array_merge(array("success" => true,
120+
"message" => "Object files deletion complete. Found $fileCount files."),
121+
$deletionStats,
122+
array("Files not deleted" => $undeletedFiles))));
123+
}
124+
125+
public function deleteSpecificObjectsAction($auth_key, $version, $option, $to_delete)
126+
{
127+
if ($this->container->getParameter('auth_key') != $auth_key)
128+
return new Response(json_encode(array("success" => false, "step" => 0, "message" => "Invalid authorization key.")));
129+
130+
if ($version != "v1")
131+
return new Response(json_encode(array("success" => false, "step" => 0, "message" => "Invalid API version.")));
132+
133+
$tempDir = $this->container->getParameter('temp_dir');
134+
$objectFilesDir = $this->container->getParameter('objdir');
135+
136+
if ($option == "core")
137+
$to_delete = str_replace(":", "_", $to_delete);
138+
139+
$response = array();
140+
$response["deleted_files"] = "";
141+
$response["undeleted_files"] = "";
142+
143+
if ($handle = opendir("$tempDir/$objectFilesDir"))
144+
{
145+
while (false !== ($entry = readdir($handle)))
146+
{
147+
if ($entry == "." || $entry == ".." || $entry == ".DS_Store")
148+
continue;
149+
150+
if ($option == "library" && strpos($entry, "______" . $to_delete . "_______") === false)
151+
continue;
152+
153+
if ($option == "core" && strpos($entry, "_" . $to_delete . "_") === false)
154+
continue;
155+
156+
157+
if (@unlink("$tempDir/$objectFilesDir/$entry") === false)
158+
$response["undeleted_files"] .= $entry . "\n";
159+
else
160+
$response["deleted_files"] .= $entry . "\n";
161+
162+
}
163+
closedir($handle);
164+
}
165+
else
166+
{
167+
return new Response(json_encode(array("success" => false, "step" => 0, "message" => "Failed to access object files directory.")));
168+
}
169+
170+
if ($response["undeleted_files"] != "")
171+
{
172+
$message = ($option == "library") ? "Failed to delete one or more of the specified library object files.": "Failed to delete one or more of the specified core object files.";
173+
return new Response(json_encode(array_merge(array("success" => false, "step" => 0, "message" => $message), $response)));
174+
}
175+
176+
$message = ($option == "library") ? "Library deleted successfully.": "Core object files deleted successfully.";
177+
return new Response(json_encode(array_merge(array("success" => true, "message" => $message), $response)));
178+
}
179+
72180
/**
73181
\brief Creates a list of the configuration parameters to be used in the compilation process.
74182

Symfony/src/Codebender/CompilerBundle/Handler/CompilerHandler.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,8 @@ private function doCompile($compiler_config, &$files, $dir, $CC, $CFLAGS, $CPP,
597597
foreach ($files[$ext] as $file)
598598
{
599599
if($caching){
600+
$name_params['core'] = str_replace(":", "_", $name_params['core']);
601+
$name_params['variant'] = str_replace(":", "_", $name_params['variant']);
600602
$object_filename = "$this->object_directory/${name_params['mcu']}_${name_params['f_cpu']}_${name_params['core']}_${name_params['variant']}_${name_params['vid']}_${name_params['pid']}______${name_params['library']}_______".((pathinfo(pathinfo($file, PATHINFO_DIRNAME), PATHINFO_FILENAME) == "utility") ? "utility_______" : "") .pathinfo($file, PATHINFO_FILENAME);
601603
$object_file = $object_filename;
602604
//Lock the file so that only one compiler instance (thread) will compile every library object file

Symfony/src/Codebender/CompilerBundle/Resources/config/routing.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,11 @@ codebender_compiler_test:
99
codebender_compiler_homepage:
1010
pattern: /{auth_key}/{version}
1111
defaults: { _controller: CodebenderCompilerBundle:Default:index }
12+
13+
codebender_compiler_delete_all:
14+
pattern: /{auth_key}/{version}/delete/all/
15+
defaults: { _controller: CodebenderCompilerBundle:Default:deleteAllObjects }
16+
17+
codebender_compiler_delete_specific:
18+
pattern: /{auth_key}/{version}/delete/{option}/{to_delete}
19+
defaults: { _controller: CodebenderCompilerBundle:Default:deleteSpecificObjects }

0 commit comments

Comments
 (0)