From 184f3bd92e9a55242623c18afd27ed44e844ae83 Mon Sep 17 00:00:00 2001 From: Daniel Cujba Date: Thu, 6 Feb 2025 20:33:26 +0200 Subject: [PATCH] Anul 3 Semestrul 1 --- .gitignore | 128 + .../FA.in | 22 + .../FA.py | 46 + .../Grammer.py | 161 + .../Hashtable.py | 78 + .../Lab 1 - new.cs | 69 + .../Parser.py | 103 + .../ParserOutput.py | 111 + .../Scanner.py | 84 + .../SymbolTable.py | 40 + .../g1.txt | 4 + .../g2.txt | 40 + .../lang.lxi | 112 + .../lang.tab.c | 1478 + .../lang.tab.h | 103 + .../lang.y | 153 + .../lex.yy.c | 2013 + .../main.py | 22 + .../out1.txt | 16 + .../p1.in | 5 + .../p1error.in | 7 + .../p2.in | 23 + .../p3.in | 16 + .../test.in | 1 + .../tokens.in | 32 + .../Mobile Applications/.gitignore | 89 + .../Mobile Applications/MA-Native/.gitignore | 15 + .../MA-Native/app/.gitignore | 1 + .../MA-Native/app/build.gradle.kts | 59 + .../MA-Native/app/proguard-rules.pro | 21 + .../ma_ui_native/ExampleInstrumentedTest.kt | 24 + .../app/src/main/AndroidManifest.xml | 33 + .../java/com/example/ma_ui_native/Drug.kt | 15 + .../example/ma_ui_native/DrugViewModel.java | 5 + .../com/example/ma_ui_native/MainActivity.kt | 300 + .../example/ma_ui_native/SecondActivity.kt | 273 + .../java/com/example/ma_ui_native/Service.kt | 49 + .../example/ma_ui_native/ui/theme/Color.kt | 14 + .../example/ma_ui_native/ui/theme/Theme.kt | 58 + .../com/example/ma_ui_native/ui/theme/Type.kt | 34 + .../app/src/main/res/drawable/cancel.xml | 9 + .../res/drawable/ic_launcher_background.xml | 170 + .../res/drawable/ic_launcher_foreground.xml | 30 + .../main/res/mipmap-anydpi/ic_launcher.xml | 6 + .../res/mipmap-anydpi/ic_launcher_round.xml | 6 + .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1404 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2898 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 982 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1772 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1900 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3918 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2884 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 5914 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3844 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 7778 bytes .../app/src/main/res/values/colors.xml | 10 + .../app/src/main/res/values/strings.xml | 3 + .../app/src/main/res/values/themes.xml | 5 + .../app/src/main/res/xml/backup_rules.xml | 13 + .../main/res/xml/data_extraction_rules.xml | 19 + .../example/ma_ui_native/ExampleUnitTest.kt | 17 + .../MA-Native/build.gradle.kts | 6 + .../MA-Native/gradle.properties | 23 + .../MA-Native/gradle/libs.versions.toml | 32 + .../gradle/wrapper/gradle-wrapper.properties | 6 + .../Mobile Applications/MA-Native/gradlew.bat | 89 + .../MA-Native/settings.gradle.kts | 23 + .../MA-NonNative/.gitignore | 39 + .../MA-NonNative/README.md | 50 + .../Mobile Applications/MA-NonNative/app.json | 72 + .../MA-NonNative/app/_layout.tsx | 32 + .../MA-NonNative/app/add.tsx | 14 + .../MA-NonNative/app/index.tsx | 15 + .../MA-NonNative/app/update/[id].tsx | 14 + .../assets/fonts/SpaceMono-Regular.ttf | Bin 0 -> 93252 bytes .../assets/images/adaptive-icon.png | Bin 0 -> 17547 bytes .../MA-NonNative/assets/images/favicon.png | Bin 0 -> 1466 bytes .../MA-NonNative/assets/images/icon.png | Bin 0 -> 22380 bytes .../assets/images/partial-react-logo.png | Bin 0 -> 5075 bytes .../MA-NonNative/assets/images/react-logo.png | Bin 0 -> 6341 bytes .../assets/images/react-logo@2x.png | Bin 0 -> 14225 bytes .../assets/images/react-logo@3x.png | Bin 0 -> 21252 bytes .../assets/images/splash-icon.png | Bin 0 -> 17547 bytes .../components/ConnectionNotification.tsx | 38 + .../MA-NonNative/components/DataLoader.tsx | 17 + .../MA-NonNative/components/DeletePopUp.tsx | 31 + .../MA-NonNative/components/DrugDisplay.tsx | 204 + .../MA-NonNative/components/DrugList.tsx | 87 + .../components/ErrorNotification.tsx | 39 + .../MA-NonNative/components/Form.tsx | 202 + .../MA-NonNative/constants/Constants.ts | 3 + .../MA-NonNative/database/localdb.ts | 124 + .../MA-NonNative/database/serverdb.ts | 58 + .../MA-NonNative/database/socket.ts | 15 + .../Mobile Applications/MA-NonNative/eas.json | 22 + .../MA-NonNative/middleware/localdbSaga.ts | 53 + .../MA-NonNative/middleware/rootSaga.ts | 64 + .../MA-NonNative/middleware/serverSaga.ts | 161 + .../MA-NonNative/package-lock.json | 15668 ++ .../MA-NonNative/package.json | 79 + .../MA-NonNative/redux/features/drug/drug.ts | 13 + .../redux/features/drug/drugSlice.ts | 39 + .../redux/features/errorstatus/errorStatus.ts | 4 + .../features/errorstatus/errorStatusSlice.ts | 17 + .../redux/features/status/status.ts | 5 + .../redux/features/status/statusSlice.ts | 19 + .../MA-NonNative/redux/store.ts | 23 + .../MA-NonNative/tsconfig.json | 17 + .../Semestrul 1/Mobile Applications/README.md | 75 + .../Mobile Applications/figma1.png | Bin 0 -> 79644 bytes .../Mobile Applications/figma2.png | Bin 0 -> 73361 bytes .../Mobile Applications/figma3.png | Bin 0 -> 25560 bytes .../Mobile Applications/package-lock.json | 1352 + .../Mobile Applications/package.json | 12 + .../Semestrul 1/Mobile Applications/server.js | 112 + .../Mobile Applications/testclient.js | 23 + .../Lab 5/Lab 5.csproj | 11 + .../Lab 5/Program.cs | 202 + .../Lab 6/Lab 6.csproj | 11 + .../Lab 6/Program.cs | 92 + .../Lab 7/Lab 7.csproj | 16 + .../Lab 7/Program.cs | 208 + .../Lab 7/runtimeconfig.template.json | 7 + .../Lab1/Lab1/Lab1.csproj | 10 + .../Lab1/Lab1/Program.cs | 182 + .../Lab2/Lab2/Lab2.csproj | 10 + .../Lab2/Lab2/Program.cs | 60 + .../Lab3/Lab3/Lab3.csproj | 10 + .../Lab3/Lab3/Matrix.cs | 90 + .../Lab3/Lab3/Program.cs | 41 + .../Lab4/Lab4/AsyncAwait.cs | 81 + .../Lab4/Lab4/DirectCallbacks.cs | 64 + .../Lab4/Lab4/Lab4.csproj | 10 + .../Lab4/Lab4/Program.cs | 17 + .../Lab4/Lab4/SocketInfo.cs | 26 + .../Lab4/Lab4/TaskCallbacks.cs | 81 + .../ProjectDistributed/Program.cs | 110 + .../ProjectDistributed.csproj | 15 + .../ProjectParallel/Program.cs | 96 + .../ProjectParallel/ProjectParallel.csproj | 10 + .../Cox_in_the_back/.config/dotnet-tools.json | 20 + .../Cox_in_the_back/.gitignore | 82 + .../Cox_in_the_back/.husky/task-runner.json | 14 + .../Cox_in_the_back/README.md | 161 + .../Cox_in_the_back/WebApi/.editorconfig | 231 + .../WebApi/Context/JyrosContext.cs | 196 + .../WebApi/Controllers/BacklogController.cs | 160 + .../WebApi/Controllers/HomeController.cs | 118 + .../ShiftAvailabilityController.cs | 107 + .../WebApi/Controllers/TicketController.cs | 122 + .../WebApi/Controllers/UserController.cs | 80 + .../Cox_in_the_back/WebApi/Enums/Status.cs | 14 + .../20241221184059_db-creation.Designer.cs | 413 + .../Migrations/20241221184059_db-creation.cs | 280 + .../20241221195345_added-priority.Designer.cs | 419 + .../20241221195345_added-priority.cs | 29 + .../20241222003947_test.Designer.cs | 421 + .../WebApi/Migrations/20241222003947_test.cs | 41 + .../20250118125647_password.Designer.cs | 425 + .../Migrations/20250118125647_password.cs | 29 + .../Migrations/JyrosContextModelSnapshot.cs | 422 + .../WebApi/Models/Adjustment.cs | 16 + .../Cox_in_the_back/WebApi/Models/Sprint.cs | 35 + .../Cox_in_the_back/WebApi/Models/Story.cs | 41 + .../Cox_in_the_back/WebApi/Models/Team.cs | 25 + .../WebApi/Models/TeamMemberAvailability.cs | 20 + .../Cox_in_the_back/WebApi/Models/User.cs | 26 + .../Cox_in_the_back/WebApi/Program.cs | 55 + .../WebApi/Properties/launchSettings.json | 41 + .../Repositories/AdjustmentRepository.cs | 72 + .../WebApi/Repositories/SprintRepository.cs | 59 + .../WebApi/Repositories/StoryRepository.cs | 64 + .../TeamMemberAvailabilityRepository.cs | 70 + .../WebApi/Repositories/TeamRepository.cs | 60 + .../WebApi/Repositories/UserRepository.cs | 82 + .../IAdjustmentRepository.cs | 11 + .../RepositoryInterfaces/IRepository.cs | 12 + .../RepositoryInterfaces/ISprintRepository.cs | 10 + .../RepositoryInterfaces/IStoryRepository.cs | 11 + .../ITeamMemberAvailabilityRepository.cs | 12 + .../RepositoryInterfaces/ITeamRepository.cs | 10 + .../RepositoryInterfaces/IUserRepository.cs | 15 + .../WebApi/Services/StoryPointEstimator.cs | 135 + .../WebApi/Vocabularies/base_cased.txt | 28996 ++++ .../WebApi/Vocabularies/base_cased_german.txt | 31102 ++++ .../WebApi/Vocabularies/base_cased_large.txt | 28996 ++++ .../Vocabularies/base_cased_multilingual.txt | 119547 +++++++++++++++ .../WebApi/Vocabularies/base_uncased.txt | 30522 ++++ .../Vocabularies/base_uncased_large.txt | 30522 ++++ .../Cox_in_the_back/WebApi/WebApi.csproj | 41 + .../Cox_in_the_back/WebApi/WebApi.http | 6 + .../WebApi/appsettings.Development.json | 11 + .../Cox_in_the_back/WebApi/appsettings.json | 12 + .../Cox_in_the_front/.gitignore | 1 + .../Cox_in_the_front/Jyros/.eslintrc.json | 3 + .../Cox_in_the_front/Jyros/.gitignore | 24 + .../Cox_in_the_front/Jyros/README.md | 50 + .../Cox_in_the_front/Jyros/components.json | 21 + .../Cox_in_the_front/Jyros/eslint.config.js | 34 + .../Cox_in_the_front/Jyros/index.html | 13 + .../Cox_in_the_front/Jyros/package-lock.json | 10654 ++ .../Cox_in_the_front/Jyros/package.json | 61 + .../Cox_in_the_front/Jyros/postcss.config.js | 6 + .../Cox_in_the_front/Jyros/public/vite.svg | 1 + .../Cox_in_the_front/Jyros/src/App.css | 0 .../Cox_in_the_front/Jyros/src/App.tsx | 49 + .../Jyros/src/assets/Solid_red.png | Bin 0 -> 116 bytes .../Jyros/src/assets/react.svg | 1 + .../Jyros/src/assets/user/LoginPage.tsx | 46 + .../Jyros/src/assets/user/PrivatRoute.tsx | 11 + .../Jyros/src/assets/user/SignUpPage.tsx | 103 + .../Jyros/src/assets/user/index.css | 9 + .../Jyros/src/assets/user_logo.png | Bin 0 -> 13711 bytes .../AvailabiltyPage/Availability.tsx | 35 + .../AvailabiltyPage/ShiftAvailability.tsx | 255 + .../Jyros/src/components/Board/Board.tsx | 255 + .../FilterDropdown/FilterDropdown.css | 58 + .../FilterDropdown/FilterDropdown.tsx | 59 + .../src/components/SearchBar/SearchBar.css | 20 + .../src/components/SearchBar/SearchBar.tsx | 27 + .../src/components/Shared/SideBar/SideBar.tsx | 68 + .../components/Shared/UserCard/UserCard.css | 42 + .../components/Shared/UserCard/UserCard.tsx | 43 + .../src/components/TaskTable/TaskTable.css | 236 + .../src/components/TaskTable/TaskTable.tsx | 572 + .../src/components/TeamMates/TeamMates.css | 8 + .../src/components/TeamMates/TeamMates.tsx | 38 + .../Jyros/src/components/ui/avatar.tsx | 48 + .../Jyros/src/components/ui/badge.tsx | 36 + .../Jyros/src/components/ui/button.tsx | 56 + .../Jyros/src/components/ui/card.tsx | 79 + .../Jyros/src/components/ui/checkbox.tsx | 27 + .../Jyros/src/components/ui/dialog.tsx | 120 + .../Jyros/src/components/ui/dropdown-menu.tsx | 198 + .../Jyros/src/components/ui/input.tsx | 22 + .../Jyros/src/components/ui/label.tsx | 24 + .../Jyros/src/components/ui/scroll-area.tsx | 46 + .../Jyros/src/components/ui/select.tsx | 158 + .../Jyros/src/components/ui/separator.tsx | 31 + .../Jyros/src/components/ui/sheet.tsx | 137 + .../Jyros/src/components/ui/sidebar.tsx | 760 + .../Jyros/src/components/ui/skeleton.tsx | 15 + .../Jyros/src/components/ui/table.tsx | 120 + .../Jyros/src/components/ui/textarea.tsx | 22 + .../Jyros/src/components/ui/tooltip.tsx | 32 + .../Jyros/src/context/AppContext.tsx | 349 + .../Cox_in_the_front/Jyros/src/css/App.css | 0 .../Jyros/src/hooks/use-mobile.tsx | 19 + .../Cox_in_the_front/Jyros/src/index.css | 153 + .../Cox_in_the_front/Jyros/src/main.tsx | 10 + .../Jyros/src/pages/BacklogPage.tsx | 35 + .../AnimationKnives/CrossingKnives.css | 60 + .../AnimationKnives/CrossingKnives.tsx | 12 + .../Jyros/src/ticketPopup/EstimationPopup.css | 66 + .../Jyros/src/ticketPopup/EstimationPopup.tsx | 121 + .../src/ticketPopup/EstimatorDetailsPopup.tsx | 251 + .../Jyros/src/ticketPopup/TicketCreate.tsx | 393 + .../Jyros/src/ticketPopup/TicketView.tsx | 673 + .../Cox_in_the_front/Jyros/src/vite-env.d.ts | 1 + .../Cox_in_the_front/Jyros/tailwind.config.js | 66 + .../Cox_in_the_front/Jyros/tsconfig.app.json | 33 + .../Cox_in_the_front/Jyros/tsconfig.json | 17 + .../Cox_in_the_front/Jyros/tsconfig.node.json | 24 + .../Cox_in_the_front/Jyros/vite.config.ts | 13 + .../Cox_in_the_front/Jyros/yarn.lock | 5434 + .../Cox_in_the_front/README.md | 1 + .../Proiect Colectiv/Jyros Documentation.pdf | Bin 0 -> 282644 bytes .../StoryPointEstimator/.gitignore | 3 + .../StoryPointEstimator/README.md | 88 + .../data/appceleratorstudio.csv | 2920 + .../StoryPointEstimator/data/aptanastudio.csv | 830 + .../StoryPointEstimator/data/bamboo.csv | 522 + .../StoryPointEstimator/data/clover.csv | 385 + .../data/datamanagement.csv | 4668 + .../StoryPointEstimator/data/duracloud.csv | 667 + .../StoryPointEstimator/data/jirasoftware.csv | 353 + .../StoryPointEstimator/data/mesos.csv | 1681 + .../StoryPointEstimator/data/moodle.csv | 1167 + .../StoryPointEstimator/data/mule.csv | 890 + .../StoryPointEstimator/data/mulestudio.csv | 733 + .../StoryPointEstimator/data/springxd.csv | 3527 + .../data/talenddataquality.csv | 1382 + .../StoryPointEstimator/data/talendesb.csv | 869 + .../StoryPointEstimator/data/titanium.csv | 2252 + .../StoryPointEstimator/data/usergrid.csv | 483 + .../StoryPointEstimator/requirements.txt | 6 + .../src/data_loader/__init__.py | 7 + .../src/data_loader/dataframe_generator.py | 81 + .../src/data_loader/storypoint_dataset.py | 36 + .../StoryPointEstimator/src/eval.py | 71 + .../StoryPointEstimator/src/export.py | 77 + .../src/models/__init__.py | 3 + .../src/models/distilbert_classifier.py | 17 + .../StoryPointEstimator/src/train.py | 220 + .../StoryPointEstimator/src/utils/__init__.py | 4 + .../StoryPointEstimator/src/utils/utils.py | 47 + .../Public Key Cryptography/Crypto1.py | 83 + .../Public Key Cryptography/Crypto2.py | 54 + .../Public Key Cryptography/Crypto3.py | 39 + .../Public Key Cryptography/Crypto4.py | 101 + .../Public Key Cryptography/Crypto5.py | 79 + .../Semestrul 1/Roboti Inteligenti/.gitignore | 2 + .../ros_workspace/.catkin_workspace | 1 + .../ros_workspace/src/CMakeLists.txt | 69 + .../ros_workspace/src/pkg_1/CMakeLists.txt | 206 + .../ros_workspace/src/pkg_1/package.xml | 68 + .../src/pkg_1/scripts/helloworld.py | 2 + .../ros_workspace/src/pkg_1/scripts/lab3.py | 28 + .../src/pkg_1/scripts/lab3_example.py | 24 + .../ros_workspace/src/pkg_1/scripts/lab4.py | 51 + .../ros_workspace/src/pkg_1/scripts/lab5.py | 54 + .../ros_workspace/src/pkg_1/scripts/lab6.py | 128 + .../ros_workspace/src/pkg_1/scripts/led.py | 39 + 313 files changed, 348499 insertions(+) create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/FA.in create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/FA.py create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/Grammer.py create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/Hashtable.py create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/Lab 1 - new.cs create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/Parser.py create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/ParserOutput.py create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/Scanner.py create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/SymbolTable.py create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/g1.txt create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/g2.txt create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.lxi create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.tab.c create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.tab.h create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.y create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/lex.yy.c create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/main.py create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/out1.txt create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/p1.in create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/p1error.in create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/p2.in create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/p3.in create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/test.in create mode 100644 Anul 3/Semestrul 1/Formal Languages and Compiler Design/tokens.in create mode 100644 Anul 3/Semestrul 1/Mobile Applications/.gitignore create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/.gitignore create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/.gitignore create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/build.gradle.kts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/proguard-rules.pro create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/androidTest/java/com/example/ma_ui_native/ExampleInstrumentedTest.kt create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/AndroidManifest.xml create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/Drug.kt create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/DrugViewModel.java create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/MainActivity.kt create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/SecondActivity.kt create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/Service.kt create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/ui/theme/Color.kt create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/ui/theme/Theme.kt create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/ui/theme/Type.kt create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/drawable/cancel.xml create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-anydpi/ic_launcher.xml create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/values/colors.xml create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/values/strings.xml create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/values/themes.xml create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/xml/backup_rules.xml create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/xml/data_extraction_rules.xml create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/test/java/com/example/ma_ui_native/ExampleUnitTest.kt create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/build.gradle.kts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/gradle.properties create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/gradle/libs.versions.toml create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/gradle/wrapper/gradle-wrapper.properties create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/gradlew.bat create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-Native/settings.gradle.kts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/.gitignore create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/README.md create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/app.json create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/app/_layout.tsx create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/app/add.tsx create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/app/index.tsx create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/app/update/[id].tsx create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/assets/fonts/SpaceMono-Regular.ttf create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/assets/images/adaptive-icon.png create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/assets/images/favicon.png create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/assets/images/icon.png create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/assets/images/partial-react-logo.png create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/assets/images/react-logo.png create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/assets/images/react-logo@2x.png create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/assets/images/react-logo@3x.png create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/assets/images/splash-icon.png create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/components/ConnectionNotification.tsx create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/components/DataLoader.tsx create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/components/DeletePopUp.tsx create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/components/DrugDisplay.tsx create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/components/DrugList.tsx create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/components/ErrorNotification.tsx create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/components/Form.tsx create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/constants/Constants.ts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/database/localdb.ts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/database/serverdb.ts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/database/socket.ts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/eas.json create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/middleware/localdbSaga.ts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/middleware/rootSaga.ts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/middleware/serverSaga.ts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/package-lock.json create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/package.json create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/redux/features/drug/drug.ts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/redux/features/drug/drugSlice.ts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/redux/features/errorstatus/errorStatus.ts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/redux/features/errorstatus/errorStatusSlice.ts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/redux/features/status/status.ts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/redux/features/status/statusSlice.ts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/redux/store.ts create mode 100644 Anul 3/Semestrul 1/Mobile Applications/MA-NonNative/tsconfig.json create mode 100644 Anul 3/Semestrul 1/Mobile Applications/README.md create mode 100644 Anul 3/Semestrul 1/Mobile Applications/figma1.png create mode 100644 Anul 3/Semestrul 1/Mobile Applications/figma2.png create mode 100644 Anul 3/Semestrul 1/Mobile Applications/figma3.png create mode 100644 Anul 3/Semestrul 1/Mobile Applications/package-lock.json create mode 100644 Anul 3/Semestrul 1/Mobile Applications/package.json create mode 100644 Anul 3/Semestrul 1/Mobile Applications/server.js create mode 100644 Anul 3/Semestrul 1/Mobile Applications/testclient.js create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab 5/Lab 5.csproj create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab 5/Program.cs create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab 6/Lab 6.csproj create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab 6/Program.cs create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab 7/Lab 7.csproj create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab 7/Program.cs create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab 7/runtimeconfig.template.json create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab1/Lab1/Lab1.csproj create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab1/Lab1/Program.cs create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab2/Lab2/Lab2.csproj create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab2/Lab2/Program.cs create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab3/Lab3/Lab3.csproj create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab3/Lab3/Matrix.cs create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab3/Lab3/Program.cs create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab4/Lab4/AsyncAwait.cs create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab4/Lab4/DirectCallbacks.cs create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab4/Lab4/Lab4.csproj create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab4/Lab4/Program.cs create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab4/Lab4/SocketInfo.cs create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/Lab4/Lab4/TaskCallbacks.cs create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/ProjectDistributed/Program.cs create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/ProjectDistributed/ProjectDistributed.csproj create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/ProjectParallel/Program.cs create mode 100644 Anul 3/Semestrul 1/Parallel and Distributed Programming/ProjectParallel/ProjectParallel.csproj create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/.config/dotnet-tools.json create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/.gitignore create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/.husky/task-runner.json create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/README.md create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/.editorconfig create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Context/JyrosContext.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Controllers/BacklogController.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Controllers/HomeController.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Controllers/ShiftAvailabilityController.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Controllers/TicketController.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Controllers/UserController.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Enums/Status.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Migrations/20241221184059_db-creation.Designer.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Migrations/20241221184059_db-creation.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Migrations/20241221195345_added-priority.Designer.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Migrations/20241221195345_added-priority.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Migrations/20241222003947_test.Designer.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Migrations/20241222003947_test.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Migrations/20250118125647_password.Designer.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Migrations/20250118125647_password.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Migrations/JyrosContextModelSnapshot.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Models/Adjustment.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Models/Sprint.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Models/Story.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Models/Team.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Models/TeamMemberAvailability.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Models/User.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Program.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Properties/launchSettings.json create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Repositories/AdjustmentRepository.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Repositories/SprintRepository.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Repositories/StoryRepository.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Repositories/TeamMemberAvailabilityRepository.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Repositories/TeamRepository.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Repositories/UserRepository.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/RepositoryInterfaces/IAdjustmentRepository.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/RepositoryInterfaces/IRepository.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/RepositoryInterfaces/ISprintRepository.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/RepositoryInterfaces/IStoryRepository.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/RepositoryInterfaces/ITeamMemberAvailabilityRepository.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/RepositoryInterfaces/ITeamRepository.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/RepositoryInterfaces/IUserRepository.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Services/StoryPointEstimator.cs create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Vocabularies/base_cased.txt create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Vocabularies/base_cased_german.txt create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Vocabularies/base_cased_large.txt create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Vocabularies/base_cased_multilingual.txt create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Vocabularies/base_uncased.txt create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/Vocabularies/base_uncased_large.txt create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/WebApi.csproj create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/WebApi.http create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/appsettings.Development.json create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_back/WebApi/appsettings.json create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/.gitignore create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/.eslintrc.json create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/.gitignore create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/README.md create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/components.json create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/eslint.config.js create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/index.html create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/package-lock.json create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/package.json create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/postcss.config.js create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/public/vite.svg create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/App.css create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/App.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/assets/Solid_red.png create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/assets/react.svg create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/assets/user/LoginPage.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/assets/user/PrivatRoute.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/assets/user/SignUpPage.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/assets/user/index.css create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/assets/user_logo.png create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/AvailabiltyPage/Availability.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/AvailabiltyPage/ShiftAvailability.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/Board/Board.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/FilterDropdown/FilterDropdown.css create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/FilterDropdown/FilterDropdown.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/SearchBar/SearchBar.css create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/SearchBar/SearchBar.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/Shared/SideBar/SideBar.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/Shared/UserCard/UserCard.css create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/Shared/UserCard/UserCard.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/TaskTable/TaskTable.css create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/TaskTable/TaskTable.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/TeamMates/TeamMates.css create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/TeamMates/TeamMates.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/avatar.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/badge.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/button.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/card.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/checkbox.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/dialog.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/dropdown-menu.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/input.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/label.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/scroll-area.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/select.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/separator.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/sheet.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/sidebar.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/skeleton.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/table.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/textarea.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/components/ui/tooltip.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/context/AppContext.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/css/App.css create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/hooks/use-mobile.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/index.css create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/main.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/pages/BacklogPage.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/ticketPopup/AnimationKnives/CrossingKnives.css create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/ticketPopup/AnimationKnives/CrossingKnives.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/ticketPopup/EstimationPopup.css create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/ticketPopup/EstimationPopup.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/ticketPopup/EstimatorDetailsPopup.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/ticketPopup/TicketCreate.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/ticketPopup/TicketView.tsx create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/src/vite-env.d.ts create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/tailwind.config.js create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/tsconfig.app.json create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/tsconfig.json create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/tsconfig.node.json create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/vite.config.ts create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/Jyros/yarn.lock create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Cox_in_the_front/README.md create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/Jyros Documentation.pdf create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/.gitignore create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/README.md create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/appceleratorstudio.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/aptanastudio.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/bamboo.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/clover.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/datamanagement.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/duracloud.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/jirasoftware.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/mesos.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/moodle.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/mule.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/mulestudio.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/springxd.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/talenddataquality.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/talendesb.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/titanium.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/usergrid.csv create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/requirements.txt create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/src/data_loader/__init__.py create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/src/data_loader/dataframe_generator.py create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/src/data_loader/storypoint_dataset.py create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/src/eval.py create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/src/export.py create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/src/models/__init__.py create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/src/models/distilbert_classifier.py create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/src/train.py create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/src/utils/__init__.py create mode 100644 Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/src/utils/utils.py create mode 100644 Anul 3/Semestrul 1/Public Key Cryptography/Crypto1.py create mode 100644 Anul 3/Semestrul 1/Public Key Cryptography/Crypto2.py create mode 100644 Anul 3/Semestrul 1/Public Key Cryptography/Crypto3.py create mode 100644 Anul 3/Semestrul 1/Public Key Cryptography/Crypto4.py create mode 100644 Anul 3/Semestrul 1/Public Key Cryptography/Crypto5.py create mode 100644 Anul 3/Semestrul 1/Roboti Inteligenti/.gitignore create mode 100644 Anul 3/Semestrul 1/Roboti Inteligenti/ros_workspace/.catkin_workspace create mode 100644 Anul 3/Semestrul 1/Roboti Inteligenti/ros_workspace/src/CMakeLists.txt create mode 100644 Anul 3/Semestrul 1/Roboti Inteligenti/ros_workspace/src/pkg_1/CMakeLists.txt create mode 100644 Anul 3/Semestrul 1/Roboti Inteligenti/ros_workspace/src/pkg_1/package.xml create mode 100644 Anul 3/Semestrul 1/Roboti Inteligenti/ros_workspace/src/pkg_1/scripts/helloworld.py create mode 100644 Anul 3/Semestrul 1/Roboti Inteligenti/ros_workspace/src/pkg_1/scripts/lab3.py create mode 100644 Anul 3/Semestrul 1/Roboti Inteligenti/ros_workspace/src/pkg_1/scripts/lab3_example.py create mode 100644 Anul 3/Semestrul 1/Roboti Inteligenti/ros_workspace/src/pkg_1/scripts/lab4.py create mode 100644 Anul 3/Semestrul 1/Roboti Inteligenti/ros_workspace/src/pkg_1/scripts/lab5.py create mode 100644 Anul 3/Semestrul 1/Roboti Inteligenti/ros_workspace/src/pkg_1/scripts/lab6.py create mode 100644 Anul 3/Semestrul 1/Roboti Inteligenti/ros_workspace/src/pkg_1/scripts/led.py diff --git a/.gitignore b/.gitignore index b15d8ac..d9e2bff 100644 --- a/.gitignore +++ b/.gitignore @@ -77,3 +77,131 @@ __pycache__/ *.gcno *.gcda +node_modules +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# .NET Core +bin/ +obj/ +project.lock.json +project.fragment.lock.json +artifacts/ + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# Auto-generated files +*.generated.cs +*.generated.ts + +# Build results +[Dd]ebug/ +[Rr]elease/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# Visual Studio Code +.vscode/ + +# Rider +.idea/ +*.sln.iml + +# User-specific files (Mono Auto Generated) +mono_crash.* + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# VS Code directories +.vscode/ +.history/ + +# Local History for Visual Studio +.localhistory/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk +/.vs +/WebApi/.vs +/WebApi/.vs/WebApi/CopilotIndices/0.2.1657.32929 +/WebApi/.vs/WebApi/FileContentIndex +/WebApi/.vs/WebApi/copilot-chat/6ceaa888/sessions +/WebApi/.vs/ProjectEvaluation +/WebApi/.vs/WebApi/DesignTimeBuild +/WebApi/.vs/WebApi/v17 + + +/WebApi/AIModels +*.onnx +.DS_Store +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties +devel/ +build/ +__pycache__/ +.env +experiments/ \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/FA.in b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/FA.in new file mode 100644 index 0000000..d635cb6 --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/FA.in @@ -0,0 +1,22 @@ +q0 q1 q2 q3 qf +1 2 3 +q0 +qf +q0 q0 1 +q0 q0 2 +q0 q0 3 +q0 q1 1 +q0 q2 2 +q0 q3 3 +q1 q1 1 +q1 q1 2 +q1 q1 3 +q1 qf 1 +q2 q2 1 +q2 q2 2 +q2 q2 3 +q2 qf 2 +q3 q3 1 +q3 q3 2 +q3 q3 3 +q3 qf 3 \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/FA.py b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/FA.py new file mode 100644 index 0000000..836cf0a --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/FA.py @@ -0,0 +1,46 @@ +class FiniteAutomata: + def __init__(self, file_path): + self.alphabet = set() + self.states = set() + self.transitions = {} + self.start_state = None + self.final_states = set() + self.read_fa(file_path) + + def read_fa(self, file_path): + with open(file_path, "r") as file: + self.states = set(file.readline().strip().split()) + self.alphabet = set(file.readline().strip().split()) + self.start_state = file.readline().strip() + self.final_states = set(file.readline().strip().split()) + for line in file: + state1, state2, char = line.strip().split() + if state1 not in self.transitions: + self.transitions[state1] = {} + if char not in self.transitions[state1]: + self.transitions[state1][char] = [] + self.transitions[state1][char].append(state2) + + def is_accepted(self, word): + current_states = [self.start_state] + for char in word: + new_states = [] + for state in current_states: + if state in self.transitions and char in self.transitions[state]: + new_states.extend(self.transitions[state][char]) + current_states = new_states + return any(state in self.final_states for state in current_states) + + def isNFA(self): + for state in self.transitions: + for char in self.transitions[state]: + if len(self.transitions[state][char]) > 1: + return True + return False + + +fa = FiniteAutomata("FA.in") +print(fa.isNFA()) +print(fa.is_accepted("1312")) +print(fa.is_accepted("12321")) +print(fa.is_accepted("")) \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/Grammer.py b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/Grammer.py new file mode 100644 index 0000000..fdab02b --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/Grammer.py @@ -0,0 +1,161 @@ +import re +from collections import defaultdict +from Parser import RecursiveDescentParser +from ParserOutput import TreeNode, ParserOutput + + +class Grammar: + def __init__(self): + self.nonterminals = set() + self.terminals = set() + self.productions = defaultdict(list) + self.start_symbol = None + + def read_from_file(self, filename): + + with open(filename, 'r') as file: + lines = file.readlines() + + + grammar_header = lines[0].strip() + match = re.match(r"G\s*=\s*\(\s*\{([^}]*)\}\s*,\s*\{([^}]*)\}\s*,\s*P\s*,\s*([^)]+)\s*\)", grammar_header) + + if not match: + raise ValueError("Invalid grammar format in the first line.") + + self.nonterminals = set([x.strip() for x in set(match.group(1).split(', '))]) + self.terminals = set([x.strip() for x in set(match.group(2).split(', '))]) + self.start_symbol = match.group(3) + + # Parse the productions + for line in lines[1:]: + line = line.strip() + if line.startswith("P :"): + line = line[3:].strip() + if "->" in line: + lhs, rhs = line.split('->') + lhs = lhs.strip() + self.nonterminals.add(lhs) + for production in rhs.split('|'): + production = production.strip() + self.productions[lhs].append(production.strip()) + + def print_nonterminals(self): + print("Nonterminals:", self.nonterminals) + + def print_terminals(self): + print("Terminals:", self.terminals) + + def print_productions(self): + for lhs, rhs in self.productions.items(): + print(f"{lhs} -> {' | '.join(rhs)}") + + def get_productions_for(self, nonterminal): + return self.productions.get(nonterminal, []) + + def is_cfg(self): + for lhs, rhs_list in self.productions.items(): + + if lhs not in self.nonterminals: + print(f"Invalid nonterminal: {lhs}") + return False + + for rhs in rhs_list: + rhs_symbols = rhs.split() + + for symbol in rhs_symbols: + if symbol not in self.terminals and symbol not in self.nonterminals: + print(f"Invalid symbol in RHS: {symbol}") + return False + return True + + +def menu(): + g = Grammar() + #g.read_from_file("g2.txt") + parser = None + while True: + print("1. Read grammar from file") + print("2. Print nonterminals") + print("3. Print terminals") + print("4. Print productions") + print("5. Get productions for a nonterminal") + print("6. Check if the grammar is CFG") + print("7. Parse input string") + print("0. Exit") + input_command = input("Enter your command: ") + match input_command: + case "1": + filename = input("Enter the filename: ") + g.read_from_file(filename) + case "2": + g.print_nonterminals() + case "3": + g.print_terminals() + case "4": + g.print_productions() + case "5": + nonterminal = input("Enter the nonterminal: ") + print(g.get_productions_for(nonterminal)) + case "6": + print(g.is_cfg()) + case "7": + input_string = input("Enter the input string: ") + parser = RecursiveDescentParser(g, input_string) + if parser.parse(): + print(parser.print_parse_tree()) + parser.save_parse_tree("out1.txt") + + else: + print("The input string is not in the language") + print(parser.stack) + print(parser.parsed_stack) + case "0": + return + case _: + print("Invalid command") + + +if __name__ == '__main__': + menu() + # g = Grammar() + # g.read_from_file("g1.txt") + # parser = RecursiveDescentParser(g, "a a b") + # parser.expand("S", 0) + # print(parser.current_pos) + # print(parser.stack) + # print(parser.parsed_stack) + # parser.advance() + # print(parser.current_pos) + # print(parser.stack) + # print(parser.parsed_stack) + # parser.expand("A", 1) + # print(parser.current_pos) + # print(parser.stack) + # print(parser.parsed_stack) + # parser.advance() + # print(parser.current_pos) + # print(parser.stack) + # print(parser.parsed_stack) + # parser.back() + # print(parser.current_pos) + # print(parser.stack) + # print(parser.parsed_stack) + # parser.another_try("A",1) + # print(parser.current_pos) + # print(parser.stack) + # print(parser.parsed_stack) + # parser.advance() + # print(parser.current_pos) + # print(parser.stack) + # print(parser.parsed_stack) + # parser.advance() + # print(parser.current_pos) + # print(parser.stack) + # print(parser.parsed_stack) + # print(parser.success()) + # print(parser.current_pos) + # print(parser.stack) + # print(parser.parsed_stack) + + diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/Hashtable.py b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/Hashtable.py new file mode 100644 index 0000000..a68b220 --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/Hashtable.py @@ -0,0 +1,78 @@ +import copy + + +class Node: + def __init__(self, key, value): + self.key = key + self.value = value + self.next = None + + +class HashTable: + def __init__(self): + self.capacity = 2 + self.noOfElements = 0 + self.elementList = [None] * 2 + + def hash(self, value): + if isinstance(value, int): + return value % self.capacity + + sum = 0 + for l in value: + sum += ord(l) + return sum % self.capacity + + def insert(self, key, value): + if self.noOfElements and (self.capacity // self.noOfElements < 2): + self.resizeAndRehash() + hash_key = self.hash(key) + element = self.elementList[hash_key] + + if element is None: + self.elementList[hash_key] = Node(key, value) + self.noOfElements += 1 + return + + while element.next is not None: + element = element.next + element.next = Node(key, value) + self.noOfElements += 1 + + def get(self, key): + element = self.elementList[self.hash(key)] + while element is not None: + if element.key == key: + return element.value + element = element.next + return None + + def getPosition(self, key): + element = self.elementList[self.hash(key)] + position = 0 + while element is not None: + if element.key == key: + return (key,position) + element = element.next + position += 1 + return None + + def resizeAndRehash(self): + self.capacity *= 2 + + copyElementList = copy.deepcopy(self.elementList) + self.elementList = [None] * self.capacity + self.noOfElements = 0 + for element in copyElementList: + copyElement = copy.deepcopy(element) + while copyElement is not None: + self.insert(copyElement.key, copyElement.value) + copyElement = copyElement.next + + def __str__(self): + var = "" + for element in self.elementList: + while element is not None: + var += f"{element.key} -> {element.value}\n" + element = element.next + return var \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/Lab 1 - new.cs b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/Lab 1 - new.cs new file mode 100644 index 0000000..d33b873 --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/Lab 1 - new.cs @@ -0,0 +1,69 @@ +class Main{ + void entry Main(){ + Problem1([3,5,7,2]) + Problem2([3,5,7,2]) + int[] x = [3,5,7,2] + Problem3(x,[8,4,2,8]) + + } + + int Problem1(int[] numbers){ + int max = -1; + int index = 0; + while(index < numbers.lenght){ + int number = numbers[index]; + if(number > max){ + max = number; + } + index = index + 1; + } + return max; + } + + int Problem2(int[] numbers){ + var prod = 0; + int index = 0; + while(index < numbers.lenght){ + int number = numbers[index]; + prod *= number; + } + index = index + 1; + return prod; + } + + void Problem3(int[] numbers1, int[] numbers2){ + while(index < numbers.lenght){ + numbers1[index] = numbers1[index] + numbers2[index]; + index = index + 1; + } + } + Problem1err(number, power){ + return number ** power + } +} + +// Key Features of the Language: + +// OOP: +// The programming language supports classes and object. Everything written must belong to a class + +// Entry Point: + +// The entry point of the program is defined by a method with the keyword entry. + +// Method Definitions: + +// Methods are defined using modifiers such as public and return types like int or var. + +// Dynamic Typing and Static Typing: + +// var is used for variables where the type is dynamically inferred, similar to languages like Python. This suggests a flexible type system where variables can hold different types based on context. It can however also support static typing + + +// Loops and Iteration: + +// The foreach loop is used to iterate over collections, such as lists. The syntax is familiar to C# or Python-style iteration. + +// Lexical Rules: + +// Functions are declared with a return type (must be present even if void or dynamic), followed by the function name, and the parameter list. The parameter list can have strong types (like List) or flexible types (like var), but must contain a type. Every statement must be followed by a semi-colon (;), and code is separated into blocks using { and } diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/Parser.py b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/Parser.py new file mode 100644 index 0000000..4d5c744 --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/Parser.py @@ -0,0 +1,103 @@ +from ParserOutput import ParserOutput, TreeNode + +class RecursiveDescentParser: + def __init__(self, grammar, input_string): + self.grammar = grammar + self.input = input_string.split() + self.current_pos = 0 + self.stack = [] # Stack for backtracking + self.parsed_stack = [] # Current sequence of symbols being parsed + self.production_sequence = [] # To track applied productions + self.parse_tree = ParserOutput(self.grammar.terminals, self.grammar.nonterminals) # Parse tree output + + def expand(self, nonterminal, prod_index=0): + """Expand a nonterminal using the specified production index.""" + if nonterminal in self.grammar.productions: + production = self.grammar.productions[nonterminal][prod_index] + self.stack.append((nonterminal, prod_index, self.current_pos, len(self.parsed_stack))) # Push state + self.production_sequence.append((nonterminal, production)) # Track production + self.parsed_stack = production.split() + self.parsed_stack # Add production to parsed stack + else: + raise ValueError(f"No production for {nonterminal}") + + def advance(self): + if self.current_pos < len(self.input) and self.parsed_stack: + next_symbol = self.parsed_stack.pop(0) + if next_symbol == self.input[self.current_pos]: + self.current_pos += 1 + return True + else: + self.parsed_stack.insert(0, next_symbol) # Push it back + return False + return False + + def back(self): + if self.stack: + # Pop the last saved state + nonterminal, prod_index, prev_pos, stack_size = self.stack.pop() + + # Restore the previous position in the input + self.current_pos = prev_pos + + # Restore the stack to the state it was before expanding the production + self.parsed_stack = self.parsed_stack[:stack_size] + self.production_sequence.pop() + + # Try the next production for the same nonterminal + return self.another_try(nonterminal, prod_index) + + # If the stack is empty, backtracking is not possible + return False + + def another_try(self, nonterminal, prod_index): + """Try the next production of the nonterminal.""" + prod_list = self.grammar.productions.get(nonterminal, []) + if prod_index + 1 < len(prod_list): + self.expand(nonterminal, prod_index + 1) # Expand using the next production + return True + return False + + def success(self): + """Check if parsing succeeded.""" + return self.current_pos == len(self.input) and not self.parsed_stack + + def parse(self): + if not self.grammar.start_symbol: + raise ValueError("Grammar must have a start symbol defined.") + + self.expand(self.grammar.start_symbol) + + while True: + # If parsing succeeds + if self.success(): + self.parse_tree.build_tree(self.production_sequence) + return True + # If there's something to parse + if self.parsed_stack: + next_symbol = self.parsed_stack[0] + + # If next symbol is a terminal, try to match it + if next_symbol in self.grammar.terminals: + if not self.advance(): + # If matching fails, backtrack + if not self.back() and len(self.stack) <= 1: + return False + elif next_symbol in self.grammar.nonterminals: + # Expand nonterminal + self.parsed_stack.pop(0) + self.expand(next_symbol) + else: + # Handle unexpected symbols + print(f"Error: Unexpected symbol {next_symbol}") + return False + else: + if not self.back() and len(self.stack) <= 1: + return False + + def print_parse_tree(self): + """Prints the parse tree to the screen.""" + self.parse_tree.print_to_screen() + + def save_parse_tree(self, filename): + """Saves the parse tree representation to a file.""" + self.parse_tree.save_to_file(filename) \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/ParserOutput.py b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/ParserOutput.py new file mode 100644 index 0000000..479cf59 --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/ParserOutput.py @@ -0,0 +1,111 @@ +import string + + +class TreeNode: + def __init__(self, value, father=None): + self.value = value # Grammar symbol (terminal/nonterminal) + self.father = father # Parent node + self.sibling = None # Sibling node + self.children = [] # List of children for easy access + + def add_child(self, child): + """Adds a child to the current node.""" + if self.children: + # Set sibling for the last child + self.children[-1].sibling = child + self.children.append(child) + + def __str__(self): + """String representation of the node.""" + return self.value + + +class ParserOutput: + def __init__(self, terminal, nonterminal): + self.root = None # Root of the parse tree + self.terminal = terminal + self.nonterminal = nonterminal + + def build_tree(self, production_sequence): + """ + Builds the parse tree from a sequence of productions. + :param production_sequence: List of (nonterminal, production) tuples + """ + if not production_sequence: + return None + + stack = [] # Stack for constructing the tree + for nonterminal, production in production_sequence: + if not self.root: + # Create the root node + self.root = TreeNode(nonterminal) + stack.append(self.root) + current = stack.pop() + symbols = production.split() + for symbol in symbols: + child = TreeNode(symbol, current) + current.add_child(child) + if symbol in self.nonterminal: # Nonterminal + stack.append(child) + else: + # Create nodes based on production + current = stack.pop() + symbols = production.split() + for symbol in symbols: + child = TreeNode(symbol, current) + current.add_child(child) + if symbol in self.nonterminal: # Nonterminal + stack.append(child) + + def transform_representation(self, node=None, level=0): + if node is None: + node = self.root + + result = "-" * level + str(node) + "\n" + for child in node.children: + result += self.transform_representation(child, level + 1) + return result + + def print_to_screen(self): + print(self.print_table()) + + def print_table(self): + """ + Prints a table representation of the parse tree. + """ + rows = [] + index_map = {} + + def traverse(node, index=1, parent_index=None): + current_index = len(rows) + index_map[node] = current_index + + # Determine right sibling + sibling_index = None + if node.sibling: + sibling_index = len(rows) + 1 # Right sibling will be the next node added + + rows.append((current_index, node.value, parent_index, sibling_index)) + + for child in node.children: + traverse(child, len(rows), current_index) + + traverse(self.root) + + # Print the table + s = "" + s += "+-------+-------+--------+---------------+" + "\n" + s += "| Index | Value | Parent | Right Sibling |" + "\n" + s += "+-------+-------+--------+---------------+" + "\n" + for index, value, parent, sibling in rows: + s += f"| {index:<3} | {value:<3} | {parent + 1 if parent is not None else '0':<4} | {sibling if sibling is not None else '0':<11} |" + "\n" + + s += "+-------+-------+--------+---------------+" + "\n" + return s + + + def save_to_file(self, filename): + with open(filename, 'w') as file: + file.write(self.print_table()) + + diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/Scanner.py b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/Scanner.py new file mode 100644 index 0000000..9001b75 --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/Scanner.py @@ -0,0 +1,84 @@ +from operator import le +from SymbolTable import SymbolTable +from Hashtable import HashTable +import re + +class Scanner: + def __init__(self, tokensPath): + self.tokensPath = tokensPath + self.symbolTable = SymbolTable() + self.indentifierRegex = r"^[a-zA-Z][a-zA-Z0-9]*$" + self.constantRegex = r"^0$|^[1-9][0-9]*$|^-[1-9][0-9]*$" + self.tokens = [] + self.pif = {} + self.readTokens() + + def readTokens(self): + with open(self.tokensPath, "r") as file: + isKeyword = True + isOperator = False + for line in file: + self.tokens.append(line.strip()) + self.tokensRegex = '|'.join(map(re.escape, self.tokens)) + + def isIdentifier(self, token): + return re.match(self.indentifierRegex, token) + + def isConstant(self, token): + return re.match(self.constantRegex, token) + + def isToken(self, token): + return token in self.tokens + + def scan(self, codePath): + with open(codePath, "r") as file: + identifierCounter = 1 + constantCounter = 1 + lineCounter = 0 + try: + for line in file: + line = line.strip() + tokens = re.findall(self.tokensRegex + r"|\w+", line) + for token in tokens: + if self.isToken(token): + self.pif[token] = -1 + elif self.isIdentifier(token): + position = self.symbolTable.getPositionIdentifier(token) + if position is None: + self.symbolTable.addIdentifier(token, identifierCounter) + self.pif["Identifier"] = identifierCounter + identifierCounter += 1 + else: + self.pif["Identifier"] = position[1] + elif self.isConstant(token): + position = self.symbolTable.getPositionConstants(token) + if position is None: + self.symbolTable.addConstants(token, constantCounter) + self.pif['Constant'] = constantCounter + constantCounter += 1 + else: + self.pif["Constant"] = position[1] + else: + raise Exception(f"Invalid token {token} at line {lineCounter}") + lineCounter += 1 + print("Lexically correct") + except Exception as e: + print(e) + return + + +def main(): + scanner = Scanner("tokens.in") + scanner.scan("p1error.in") + #save output to file + with open("PIF.out", "w") as file: + for key in scanner.pif: + file.write(f"{key} -> {scanner.pif[key]}\n") + + with open("ST.out", "w") as file: + file.write(str(scanner.symbolTable)) + + +if __name__ == "__main__": + main() + diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/SymbolTable.py b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/SymbolTable.py new file mode 100644 index 0000000..d32d49d --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/SymbolTable.py @@ -0,0 +1,40 @@ +from Hashtable import HashTable + + +class SymbolTable: + def __init__(self): + self.symboltableConstants = HashTable() + self.symboltableIdentifier = HashTable() + + def addIdentifier(self, identifier, value): + self.symboltableIdentifier.insert(identifier, value) + + def getIdentifier(self, identifier): + return self.symboltableIdentifier.get(identifier) + + def getPositionIdentifier(self, identifier): + return self.symboltableIdentifier.getPosition(identifier) + + def addConstants(self, constants, value): + self.symboltableConstants.insert(constants, value) + + def getConstants(self, constants): + return self.symboltableConstants.get(constants) + + def getPositionConstants(self, constants): + return self.symboltableConstants.getPosition(constants) + + def __str__(self): + var = "Identifier Table\n" + for i in range(self.symboltableIdentifier.capacity): + element = self.symboltableIdentifier.elementList[i] + while element is not None: + var += str(element.key) + " " + str(element.value) + "\n" + element = element.next + var += "Constants Table\n" + for i in range(self.symboltableConstants.capacity): + element = self.symboltableConstants.elementList[i] + while element is not None: + var += str(element.key) + " " + str(element.value) + "\n" + element = element.next + return var \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/g1.txt b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/g1.txt new file mode 100644 index 0000000..9f7c933 --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/g1.txt @@ -0,0 +1,4 @@ +G = ({S, A}, {a, b}, P, S) +P : + S -> a A + A -> a | b | a A | b A \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/g2.txt b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/g2.txt new file mode 100644 index 0000000..aa884bc --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/g2.txt @@ -0,0 +1,40 @@ +G = ({program, statement_list, statement, assignment_stmt, input_stmt, output_stmt, if_stmt, for_stmt, array_decl_stmt, condition, increment_stmt, expression, term, factor, relational_operator, binary_operator, concatenation},{=, (, ), [, ], if, else, for, ARRAY, echo, readline, +, -, *, /, <, <=, ==, >=, !=, ++, --, :, ;, IDENTIFIER, INTEGER_CONST, FLOAT_CONST, STRING_CONST},P, program) + +P : + program -> statement_list + + statement_list -> statement | statement statement_list + + statement -> assignment_stmt | input_stmt | output_stmt | if_stmt | for_stmt | array_decl_stmt + + assignment_stmt -> IDENTIFIER = expression + + input_stmt -> IDENTIFIER = readline_function ( STRING_CONST ) + + output_stmt -> echo_function ( STRING_CONST concatenation IDENTIFIER ) + + if_stmt -> if ( condition ) : statement | if ( condition ) : statement else : statement + + for_stmt -> for ( assignment_stmt ; condition ; increment_stmt ) : statement + + array_decl_stmt -> IDENTIFIER = ARRAY [ INTEGER_CONST ] + + condition -> expression relational_operator expression + + increment_stmt -> IDENTIFIER ++ | IDENTIFIER -- + + expression -> term | term binary_operator expression + + term -> factor | factor binary_operator term + + factor -> IDENTIFIER | INTEGER_CONST | FLOAT_CONST | STRING_CONST + + relational_operator -> < | <= | == | >= | != + + binary_operator -> + | - | * | / + + concatenation -> + + + echo_function -> echo + + readline_function -> readline \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.lxi b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.lxi new file mode 100644 index 0000000..6fabb37 --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.lxi @@ -0,0 +1,112 @@ +%{ +#include +#include +#include +#include "lang.tab.h" + +// Define YYSTYPE structure + + +extern YYSTYPE yylval; +extern int yydebug; // Declare yydebug +// Token definitions + + +// File pointers +FILE *yyin, *yyout; + +%} + +%% + +"int"|"char"|"void" { fprintf(yyout, "SIMPLETYPE\n"); return SIMPLETYPE; } +"class" { fprintf(yyout, "CLASS\n"); return CLASS; } +"entry" { fprintf(yyout, "ENTRY\n"); return ENTRY; } +"if" { fprintf(yyout, "IF\n"); return IF; } +"while" { fprintf(yyout, "WHILE\n"); return WHILE; } +"write" { fprintf(yyout, "WRITE\n"); return WRITE; } +"read" { fprintf(yyout, "READ\n"); return READ; } +"return" { fprintf(yyout, "RETURN\n"); return RETURN; } +"{" { fprintf(yyout, "LBRACE\n"); return LBRACE; } +"}" { fprintf(yyout, "RBRACE\n"); return RBRACE; } +"(" { fprintf(yyout, "LPAREN\n"); return LPAREN; } +")" { fprintf(yyout, "RPAREN\n"); return RPAREN; } +"[" { fprintf(yyout, "LBRACKET\n"); return LBRACKET; } +"]" { fprintf(yyout, "RBRACKET\n"); return RBRACKET; } +"+" { fprintf(yyout, "PLUS\n"); return PLUS; } +"-" { fprintf(yyout, "MINUS\n"); return MINUS; } +"*" { fprintf(yyout, "MULT\n"); return MULT; } +"/" { fprintf(yyout, "DIV\n"); return DIV; } +"=" { fprintf(yyout, "ASSIGN\n"); return ASSIGN; } +"==" { fprintf(yyout, "EQ\n"); return EQ; } +"<" { fprintf(yyout, "LT\n"); return LT; } +"<=" { fprintf(yyout, "LE\n"); return LE; } +">" { fprintf(yyout, "GT\n"); return GT; } +">=" { fprintf(yyout, "GE\n"); return GE; } +";" { fprintf(yyout, "SEMICOLON\n"); return SEMICOLON; } +"." { fprintf(yyout, "DOT\n"); return DOT; } +"," { fprintf(yyout, "COMMA\n"); return COMMA; } +[0-9]+ { yylval.intval = atoi(yytext); fprintf(yyout, "CONSTANTEXP %d\n", yylval.intval); return CONSTANTEXP; } +[a-zA-Z_][a-zA-Z0-9_]* { yylval.strval = strdup(yytext); fprintf(yyout, "IDENTIFIER %s\n", yylval.strval); return IDENTIFIER; } +[ \t\n]+ { /* Ignore spaces and tabs */ } +\r\n { /* Increment line count if needed */ } +. { fprintf(yyout, "Unknown character: %s\n", yytext); } + +%% + +int main(int argc, char **argv) { + if (argc < 3) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return 1; + } + // Open input and output files + yyin = fopen(argv[1], "r"); + if (!yyin) { + perror("Failed to open input file"); + return 1; + } + + yyout = fopen(argv[2], "w"); + if (!yyout) { + perror("Failed to open output file"); + fclose(yyin); + return 1; + } + + + + int token; + while ((token = yylex()) != 0) { + // Process tokens + } + fclose(yyin); + fclose(yyout); + yyin = fopen(argv[1], "r"); + if (!yyin) { + perror("Failed to open input file"); + return 1; + } + + yyout = stdout; + if (!yyout) { + perror("Failed to open output file"); + fclose(yyin); + return 1; + } + + // Close files + // printf("%d\n", yylex()); + // printf("%d\n", yylex()); + // printf("%d\n", yylex()); + // printf("%d\n", yylex()); + + yydebug = 1; + if (yyparse() == 0) { + printf("Parsing successful\n"); + } else { + printf("Parsing failed\n"); + } + fclose(yyin); + fclose(yyout); + return 0; +} diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.tab.c b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.tab.c new file mode 100644 index 0000000..3912d9d --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.tab.c @@ -0,0 +1,1478 @@ +/* A Bison parser, made by GNU Bison 3.8.2. */ + +/* Bison implementation for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* C LALR(1) parser skeleton written by Richard Stallman, by + simplifying the original so-called "semantic" parser. */ + +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ + +/* All symbols defined below should begin with yy or YY, to avoid + infringing on user name space. This should be done even for local + variables, as they might otherwise be expanded by user macros. + There are some unavoidable exceptions within include files to + define necessary library symbols; they are noted "INFRINGES ON + USER NAME SPACE" below. */ + +/* Identify Bison output, and Bison version. */ +#define YYBISON 30802 + +/* Bison version string. */ +#define YYBISON_VERSION "3.8.2" + +/* Skeleton name. */ +#define YYSKELETON_NAME "yacc.c" + +/* Pure parsers. */ +#define YYPURE 0 + +/* Push parsers. */ +#define YYPUSH 0 + +/* Pull parsers. */ +#define YYPULL 1 + + + + +/* First part of user prologue. */ +#line 1 "lang.y" + +#include +#include +#include + +void yyerror(const char *s); + +typedef struct ASTNode { + char *type; + char *value; + struct ASTNode *left; + struct ASTNode *right; +} ASTNode; + + + +ASTNode *createNode(const char *type, const char *value, ASTNode *left, ASTNode *right); + +#line 90 "lang.tab.c" + +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif +# ifndef YY_NULLPTR +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif +# else +# define YY_NULLPTR ((void*)0) +# endif +# endif + + +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 1 +#endif +#if YYDEBUG +extern int yydebug; +#endif + +/* Token kinds. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + YYEMPTY = -2, + YYEOF = 0, /* "end of file" */ + YYerror = 256, /* error */ + YYUNDEF = 257, /* "invalid token" */ + SIMPLETYPE = 258, /* SIMPLETYPE */ + CLASS = 259, /* CLASS */ + ENTRY = 260, /* ENTRY */ + IF = 261, /* IF */ + WHILE = 262, /* WHILE */ + WRITE = 263, /* WRITE */ + READ = 264, /* READ */ + RETURN = 265, /* RETURN */ + IDENTIFIER = 266, /* IDENTIFIER */ + CONSTANTEXP = 267, /* CONSTANTEXP */ + LBRACE = 268, /* LBRACE */ + RBRACE = 269, /* RBRACE */ + LPAREN = 270, /* LPAREN */ + RPAREN = 271, /* RPAREN */ + LBRACKET = 272, /* LBRACKET */ + RBRACKET = 273, /* RBRACKET */ + ASSIGN = 274, /* ASSIGN */ + EQ = 275, /* EQ */ + LT = 276, /* LT */ + LE = 277, /* LE */ + GT = 278, /* GT */ + GE = 279, /* GE */ + SEMICOLON = 280, /* SEMICOLON */ + DOT = 281, /* DOT */ + PLUS = 282, /* PLUS */ + MINUS = 283, /* MINUS */ + MULT = 284, /* MULT */ + DIV = 285, /* DIV */ + COMMA = 286 /* COMMA */ + }; + typedef enum yytokentype yytoken_kind_t; +#endif + +/* Value type. */ +#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED +typedef int YYSTYPE; +# define YYSTYPE_IS_TRIVIAL 1 +# define YYSTYPE_IS_DECLARED 1 +#endif + + +extern YYSTYPE yylval; + + +int yyparse (void); + + + +/* Symbol kind. */ +enum yysymbol_kind_t +{ + YYSYMBOL_YYEMPTY = -2, + YYSYMBOL_YYEOF = 0, /* "end of file" */ + YYSYMBOL_YYerror = 1, /* error */ + YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ + YYSYMBOL_SIMPLETYPE = 3, /* SIMPLETYPE */ + YYSYMBOL_CLASS = 4, /* CLASS */ + YYSYMBOL_ENTRY = 5, /* ENTRY */ + YYSYMBOL_IF = 6, /* IF */ + YYSYMBOL_WHILE = 7, /* WHILE */ + YYSYMBOL_WRITE = 8, /* WRITE */ + YYSYMBOL_READ = 9, /* READ */ + YYSYMBOL_RETURN = 10, /* RETURN */ + YYSYMBOL_IDENTIFIER = 11, /* IDENTIFIER */ + YYSYMBOL_CONSTANTEXP = 12, /* CONSTANTEXP */ + YYSYMBOL_LBRACE = 13, /* LBRACE */ + YYSYMBOL_RBRACE = 14, /* RBRACE */ + YYSYMBOL_LPAREN = 15, /* LPAREN */ + YYSYMBOL_RPAREN = 16, /* RPAREN */ + YYSYMBOL_LBRACKET = 17, /* LBRACKET */ + YYSYMBOL_RBRACKET = 18, /* RBRACKET */ + YYSYMBOL_ASSIGN = 19, /* ASSIGN */ + YYSYMBOL_EQ = 20, /* EQ */ + YYSYMBOL_LT = 21, /* LT */ + YYSYMBOL_LE = 22, /* LE */ + YYSYMBOL_GT = 23, /* GT */ + YYSYMBOL_GE = 24, /* GE */ + YYSYMBOL_SEMICOLON = 25, /* SEMICOLON */ + YYSYMBOL_DOT = 26, /* DOT */ + YYSYMBOL_PLUS = 27, /* PLUS */ + YYSYMBOL_MINUS = 28, /* MINUS */ + YYSYMBOL_MULT = 29, /* MULT */ + YYSYMBOL_DIV = 30, /* DIV */ + YYSYMBOL_COMMA = 31, /* COMMA */ + YYSYMBOL_YYACCEPT = 32, /* $accept */ + YYSYMBOL_program = 33, /* program */ + YYSYMBOL_class_body = 34, /* class_body */ + YYSYMBOL_atrib_declaration = 35, /* atrib_declaration */ + YYSYMBOL_method_declaration = 36, /* method_declaration */ + YYSYMBOL_method_params = 37, /* method_params */ + YYSYMBOL_method_body = 38, /* method_body */ + YYSYMBOL_statement_list = 39, /* statement_list */ + YYSYMBOL_statement = 40, /* statement */ + YYSYMBOL_atrib_statement = 41, /* atrib_statement */ + YYSYMBOL_if_statement = 42, /* if_statement */ + YYSYMBOL_while_statement = 43, /* while_statement */ + YYSYMBOL_write_statement = 44, /* write_statement */ + YYSYMBOL_read_statement = 45, /* read_statement */ + YYSYMBOL_return_statement = 46, /* return_statement */ + YYSYMBOL_expression = 47, /* expression */ + YYSYMBOL_class_expression = 48, /* class_expression */ + YYSYMBOL_class_method_call = 49, /* class_method_call */ + YYSYMBOL_array_list = 50, /* array_list */ + YYSYMBOL_entry_declaration = 51 /* entry_declaration */ +}; +typedef enum yysymbol_kind_t yysymbol_kind_t; + + + + +#ifdef short +# undef short +#endif + +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + and (if available) are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif +#endif + +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; +#else +typedef signed char yytype_int8; +#endif + +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; +#else +typedef short yytype_int16; +#endif + +/* Work around bug in HP-UX 11.23, which defines these macros + incorrectly for preprocessor constants. This workaround can likely + be removed in 2023, as HPE has promised support for HP-UX 11.23 + (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of + . */ +#ifdef __hpux +# undef UINT_LEAST8_MAX +# undef UINT_LEAST16_MAX +# define UINT_LEAST8_MAX 255 +# define UINT_LEAST16_MAX 65535 +#endif + +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; +#else +typedef short yytype_uint8; +#endif + +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; +#else +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif +#endif + +#ifndef YYSIZE_T +# ifdef __SIZE_TYPE__ +# define YYSIZE_T __SIZE_TYPE__ +# elif defined size_t +# define YYSIZE_T size_t +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include /* INFRINGES ON USER NAME SPACE */ +# define YYSIZE_T size_t +# else +# define YYSIZE_T unsigned +# endif +#endif + +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + + +/* Stored state numbers (used for stacks). */ +typedef yytype_int8 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; + +#ifndef YY_ +# if defined YYENABLE_NLS && YYENABLE_NLS +# if ENABLE_NLS +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# endif +# endif +# ifndef YY_ +# define YY_(Msgid) Msgid +# endif +#endif + + +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define YY_ATTRIBUTE_PURE +# endif +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +# else +# define YY_ATTRIBUTE_UNUSED +# endif +#endif + +/* Suppress unused-variable warnings by "using" E. */ +#if ! defined lint || defined __GNUC__ +# define YY_USE(E) ((void) (E)) +#else +# define YY_USE(E) /* empty */ +#endif + +/* Suppress an incorrect diagnostic about yylval being uninitialized. */ +#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ +# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") +# else +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ + _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") +# endif +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ + _Pragma ("GCC diagnostic pop") +#else +# define YY_INITIAL_VALUE(Value) Value +#endif +#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN +# define YY_IGNORE_MAYBE_UNINITIALIZED_END +#endif +#ifndef YY_INITIAL_VALUE +# define YY_INITIAL_VALUE(Value) /* Nothing. */ +#endif + +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) + +#if !defined yyoverflow + +/* The parser invokes alloca or malloc; define the necessary symbols. */ + +# ifdef YYSTACK_USE_ALLOCA +# if YYSTACK_USE_ALLOCA +# ifdef __GNUC__ +# define YYSTACK_ALLOC __builtin_alloca +# elif defined __BUILTIN_VA_ARG_INCR +# include /* INFRINGES ON USER NAME SPACE */ +# elif defined _AIX +# define YYSTACK_ALLOC __alloca +# elif defined _MSC_VER +# include /* INFRINGES ON USER NAME SPACE */ +# define alloca _alloca +# else +# define YYSTACK_ALLOC alloca +# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS +# include /* INFRINGES ON USER NAME SPACE */ + /* Use EXIT_SUCCESS as a witness for stdlib.h. */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# endif +# endif +# endif + +# ifdef YYSTACK_ALLOC + /* Pacify GCC's 'empty if-body' warning. */ +# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) +# ifndef YYSTACK_ALLOC_MAXIMUM + /* The OS might guarantee only one guard page at the bottom of the stack, + and a page size can be as small as 4096 bytes. So we cannot safely + invoke alloca (N) if N exceeds 4096. Use a slightly smaller number + to allow for a few compiler-allocated temporary stack slots. */ +# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ +# endif +# else +# define YYSTACK_ALLOC YYMALLOC +# define YYSTACK_FREE YYFREE +# ifndef YYSTACK_ALLOC_MAXIMUM +# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM +# endif +# if (defined __cplusplus && ! defined EXIT_SUCCESS \ + && ! ((defined YYMALLOC || defined malloc) \ + && (defined YYFREE || defined free))) +# include /* INFRINGES ON USER NAME SPACE */ +# ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +# endif +# endif +# ifndef YYMALLOC +# define YYMALLOC malloc +# if ! defined malloc && ! defined EXIT_SUCCESS +void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# ifndef YYFREE +# define YYFREE free +# if ! defined free && ! defined EXIT_SUCCESS +void free (void *); /* INFRINGES ON USER NAME SPACE */ +# endif +# endif +# endif +#endif /* !defined yyoverflow */ + +#if (! defined yyoverflow \ + && (! defined __cplusplus \ + || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) + +/* A type that is properly aligned for any stack member. */ +union yyalloc +{ + yy_state_t yyss_alloc; + YYSTYPE yyvs_alloc; +}; + +/* The size of the maximum gap between one aligned stack and the next. */ +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) + +/* The size of an array large to enough to hold all stacks, each with + N elements. */ +# define YYSTACK_BYTES(N) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + + YYSTACK_GAP_MAXIMUM) + +# define YYCOPY_NEEDED 1 + +/* Relocate STACK from its old location to the new one. The + local variables YYSIZE and YYSTACKSIZE give the old and new number of + elements in the stack, and YYPTR gives the new location of the + stack. Advance YYPTR to a properly aligned location for the next + stack. */ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ + do \ + { \ + YYPTRDIFF_T yynewbytes; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ + } \ + while (0) + +#endif + +#if defined YYCOPY_NEEDED && YYCOPY_NEEDED +/* Copy COUNT objects from SRC to DST. The source and destination do + not overlap. */ +# ifndef YYCOPY +# if defined __GNUC__ && 1 < __GNUC__ +# define YYCOPY(Dst, Src, Count) \ + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) +# else +# define YYCOPY(Dst, Src, Count) \ + do \ + { \ + YYPTRDIFF_T yyi; \ + for (yyi = 0; yyi < (Count); yyi++) \ + (Dst)[yyi] = (Src)[yyi]; \ + } \ + while (0) +# endif +# endif +#endif /* !YYCOPY_NEEDED */ + +/* YYFINAL -- State number of the termination state. */ +#define YYFINAL 4 +/* YYLAST -- Last index in YYTABLE. */ +#define YYLAST 174 + +/* YYNTOKENS -- Number of terminals. */ +#define YYNTOKENS 32 +/* YYNNTS -- Number of nonterminals. */ +#define YYNNTS 20 +/* YYNRULES -- Number of rules. */ +#define YYNRULES 50 +/* YYNSTATES -- Number of states. */ +#define YYNSTATES 117 + +/* YYMAXUTOK -- Last valid token kind. */ +#define YYMAXUTOK 286 + + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ +#define YYTRANSLATE(YYX) \ + (0 <= (YYX) && (YYX) <= YYMAXUTOK \ + ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ + : YYSYMBOL_YYUNDEF) + +/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM + as returned by yylex. */ +static const yytype_int8 yytranslate[] = +{ + 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31 +}; + +#if YYDEBUG +/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ +static const yytype_uint8 yyrline[] = +{ + 0, 35, 35, 40, 41, 42, 45, 46, 50, 54, + 55, 56, 60, 61, 65, 66, 70, 71, 72, 73, + 74, 75, 79, 83, 87, 91, 95, 99, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 122, 123, 127, 130, 131, 132, + 136 +}; +#endif + +/** Accessing symbol of state STATE. */ +#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) + +#if YYDEBUG || 0 +/* The user-facing name of the symbol whose (internal) number is + YYSYMBOL. No bounds checking. */ +static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; + +/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. + First, the terminals, then, starting at YYNTOKENS, nonterminals. */ +static const char *const yytname[] = +{ + "\"end of file\"", "error", "\"invalid token\"", "SIMPLETYPE", "CLASS", + "ENTRY", "IF", "WHILE", "WRITE", "READ", "RETURN", "IDENTIFIER", + "CONSTANTEXP", "LBRACE", "RBRACE", "LPAREN", "RPAREN", "LBRACKET", + "RBRACKET", "ASSIGN", "EQ", "LT", "LE", "GT", "GE", "SEMICOLON", "DOT", + "PLUS", "MINUS", "MULT", "DIV", "COMMA", "$accept", "program", + "class_body", "atrib_declaration", "method_declaration", "method_params", + "method_body", "statement_list", "statement", "atrib_statement", + "if_statement", "while_statement", "write_statement", "read_statement", + "return_statement", "expression", "class_expression", + "class_method_call", "array_list", "entry_declaration", YY_NULLPTR +}; + +static const char * +yysymbol_name (yysymbol_kind_t yysymbol) +{ + return yytname[yysymbol]; +} +#endif + +#define YYPACT_NINF (-77) + +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) + +#define YYTABLE_NINF (-45) + +#define yytable_value_is_error(Yyn) \ + 0 + +/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing + STATE-NUM. */ +static const yytype_int16 yypact[] = +{ + 0, -2, 11, -3, -77, 9, 13, 17, 12, 22, + 30, 17, 17, 35, 138, -77, -77, -77, 36, 48, + 46, -77, 52, 53, 43, 41, 158, 37, 63, -77, + 62, 68, 69, 70, 10, 72, 78, 158, -77, -77, + -77, -77, -77, -77, 48, 158, 10, 10, 10, 87, + -10, -77, 10, 10, 104, 84, -77, 10, -77, -77, + -77, 86, -77, 33, 51, 66, 90, 10, 96, 81, + 92, 99, 10, 10, 10, 10, 10, -77, 10, 10, + 10, 10, 10, 115, -77, 105, 117, 116, 127, 8, + 125, -77, -77, 10, -77, -77, -77, -77, -77, -77, + 126, 126, 150, 150, 142, -77, 158, 158, -77, -77, + -77, -77, -77, 140, 145, -77, -77 +}; + +/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE does not specify something else to do. Zero + means the default is an error. */ +static const yytype_int8 yydefact[] = +{ + 0, 0, 0, 0, 1, 0, 0, 3, 0, 0, + 0, 3, 3, 0, 0, 2, 4, 5, 0, 9, + 0, 6, 0, 0, 0, 0, 14, 10, 0, 7, + 0, 0, 0, 0, 0, 0, 0, 14, 16, 17, + 18, 19, 20, 21, 9, 12, 0, 0, 0, 0, + 39, 28, 0, 47, 0, 43, 42, 0, 50, 15, + 11, 0, 13, 0, 0, 0, 0, 0, 0, 0, + 48, 0, 0, 0, 0, 0, 0, 27, 0, 0, + 0, 0, 47, 0, 8, 0, 0, 0, 0, 0, + 44, 45, 38, 47, 41, 33, 34, 35, 36, 37, + 29, 30, 31, 32, 0, 22, 14, 14, 25, 26, + 40, 49, 46, 0, 0, 23, 24 +}; + +/* YYPGOTO[NTERM-NUM]. */ +static const yytype_int8 yypgoto[] = +{ + -77, -77, -9, -77, -77, 118, -77, -37, -77, -77, + -77, -77, -77, -77, -77, -33, 93, -77, -76, -77 +}; + +/* YYDEFGOTO[NTERM-NUM]. */ +static const yytype_int8 yydefgoto[] = +{ + 0, 2, 10, 11, 12, 24, 61, 36, 37, 38, + 39, 40, 41, 42, 43, 70, 55, 56, 71, 7 +}; + +/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If + positive, shift that token. If negative, reduce the rule whose + number is the opposite. If YYTABLE_NINF, syntax error. */ +static const yytype_int8 yytable[] = +{ + 59, 54, 16, 17, 1, -44, 104, 67, 62, 3, + 5, 4, 6, 63, 64, 65, 68, 111, 8, 69, + 9, 50, 51, 13, 83, 52, 110, 53, 72, 73, + 74, 75, 76, 14, 89, 78, 79, 80, 81, 95, + 96, 97, 98, 99, 15, 100, 101, 102, 103, 85, + 18, 23, 22, 72, 73, 74, 75, 76, 25, 28, + 78, 79, 80, 81, 27, 26, 29, 86, 44, 113, + 114, 72, 73, 74, 75, 76, 45, 46, 78, 79, + 80, 81, 87, 47, 48, 49, 72, 73, 74, 75, + 76, 57, 58, 78, 79, 80, 81, 92, 66, 82, + 84, 72, 73, 74, 75, 76, 88, 90, 78, 79, + 80, 81, 72, 73, 74, 75, 76, 94, 106, 78, + 79, 80, 81, 93, 72, 73, 74, 75, 76, 77, + 107, 78, 79, 80, 81, 72, 73, 74, 75, 76, + 105, 108, 78, 79, 80, 81, 72, 73, 74, 75, + 76, 68, 109, 19, 115, 80, 81, 20, 112, 116, + 0, 91, 60, 21, 30, 31, 32, 33, 34, 35, + 72, 73, 74, 75, 76 +}; + +static const yytype_int8 yycheck[] = +{ + 37, 34, 11, 12, 4, 15, 82, 17, 45, 11, + 13, 0, 3, 46, 47, 48, 26, 93, 5, 52, + 3, 11, 12, 11, 57, 15, 18, 17, 20, 21, + 22, 23, 24, 11, 67, 27, 28, 29, 30, 72, + 73, 74, 75, 76, 14, 78, 79, 80, 81, 16, + 15, 3, 16, 20, 21, 22, 23, 24, 12, 16, + 27, 28, 29, 30, 11, 13, 25, 16, 31, 106, + 107, 20, 21, 22, 23, 24, 13, 15, 27, 28, + 29, 30, 16, 15, 15, 15, 20, 21, 22, 23, + 24, 19, 14, 27, 28, 29, 30, 16, 11, 15, + 14, 20, 21, 22, 23, 24, 16, 11, 27, 28, + 29, 30, 20, 21, 22, 23, 24, 18, 13, 27, + 28, 29, 30, 31, 20, 21, 22, 23, 24, 25, + 13, 27, 28, 29, 30, 20, 21, 22, 23, 24, + 25, 25, 27, 28, 29, 30, 20, 21, 22, 23, + 24, 26, 25, 15, 14, 29, 30, 19, 16, 14, + -1, 68, 44, 25, 6, 7, 8, 9, 10, 11, + 20, 21, 22, 23, 24 +}; + +/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of + state STATE-NUM. */ +static const yytype_int8 yystos[] = +{ + 0, 4, 33, 11, 0, 13, 3, 51, 5, 3, + 34, 35, 36, 11, 11, 14, 34, 34, 15, 15, + 19, 25, 16, 3, 37, 12, 13, 11, 16, 25, + 6, 7, 8, 9, 10, 11, 39, 40, 41, 42, + 43, 44, 45, 46, 31, 13, 15, 15, 15, 15, + 11, 12, 15, 17, 47, 48, 49, 19, 14, 39, + 37, 38, 39, 47, 47, 47, 11, 17, 26, 47, + 47, 50, 20, 21, 22, 23, 24, 25, 27, 28, + 29, 30, 15, 47, 14, 16, 16, 16, 16, 47, + 11, 48, 16, 31, 18, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 50, 25, 13, 13, 25, 25, + 18, 50, 16, 39, 39, 14, 14 +}; + +/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ +static const yytype_int8 yyr1[] = +{ + 0, 32, 33, 34, 34, 34, 35, 35, 36, 37, + 37, 37, 38, 38, 39, 39, 40, 40, 40, 40, + 40, 40, 41, 42, 43, 44, 45, 46, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 48, 48, 49, 50, 50, 50, + 51 +}; + +/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ +static const yytype_int8 yyr2[] = +{ + 0, 2, 6, 0, 2, 2, 3, 5, 8, 0, + 2, 4, 0, 1, 0, 2, 1, 1, 1, 1, + 1, 1, 4, 7, 7, 5, 5, 3, 1, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, + 4, 3, 1, 1, 1, 3, 4, 0, 1, 3, + 8 +}; + + +enum { YYENOMEM = -2 }; + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) + +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrorlab +#define YYNOMEM goto yyexhaustedlab + + +#define YYRECOVERING() (!!yyerrstatus) + +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) + +/* Backward compatibility with an undocumented macro. + Use YYerror or YYUNDEF. */ +#define YYERRCODE YYUNDEF + + +/* Enable debugging if requested. */ +#if YYDEBUG + +# ifndef YYFPRINTF +# include /* INFRINGES ON USER NAME SPACE */ +# define YYFPRINTF fprintf +# endif + +# define YYDPRINTF(Args) \ +do { \ + if (yydebug) \ + YYFPRINTF Args; \ +} while (0) + + + + +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yy_symbol_print (stderr, \ + Kind, Value); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (0) + + +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ + +static void +yy_symbol_value_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) +{ + FILE *yyoutput = yyo; + YY_USE (yyoutput); + if (!yyvaluep) + return; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YY_USE (yykind); + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ + +static void +yy_symbol_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep) +{ + YYFPRINTF (yyo, "%s %s (", + yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); + + yy_symbol_value_print (yyo, yykind, yyvaluep); + YYFPRINTF (yyo, ")"); +} + +/*------------------------------------------------------------------. +| yy_stack_print -- Print the state stack from its BOTTOM up to its | +| TOP (included). | +`------------------------------------------------------------------*/ + +static void +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) +{ + YYFPRINTF (stderr, "Stack now"); + for (; yybottom <= yytop; yybottom++) + { + int yybot = *yybottom; + YYFPRINTF (stderr, " %d", yybot); + } + YYFPRINTF (stderr, "\n"); +} + +# define YY_STACK_PRINT(Bottom, Top) \ +do { \ + if (yydebug) \ + yy_stack_print ((Bottom), (Top)); \ +} while (0) + + +/*------------------------------------------------. +| Report that the YYRULE is going to be reduced. | +`------------------------------------------------*/ + +static void +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, + int yyrule) +{ + int yylno = yyrline[yyrule]; + int yynrhs = yyr2[yyrule]; + int yyi; + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", + yyrule - 1, yylno); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + YYFPRINTF (stderr, " $%d = ", yyi + 1); + yy_symbol_print (stderr, + YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), + &yyvsp[(yyi + 1) - (yynrhs)]); + YYFPRINTF (stderr, "\n"); + } +} + +# define YY_REDUCE_PRINT(Rule) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyssp, yyvsp, Rule); \ +} while (0) + +/* Nonzero means print parse trace. It is left uninitialized so that + multiple parsers can coexist. */ +int yydebug; +#else /* !YYDEBUG */ +# define YYDPRINTF(Args) ((void) 0) +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) +# define YY_STACK_PRINT(Bottom, Top) +# define YY_REDUCE_PRINT(Rule) +#endif /* !YYDEBUG */ + + +/* YYINITDEPTH -- initial size of the parser's stacks. */ +#ifndef YYINITDEPTH +# define YYINITDEPTH 200 +#endif + +/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only + if the built-in stack extension method is used). + + Do not make this value too large; the results are undefined if + YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) + evaluated with infinite-precision integer arithmetic. */ + +#ifndef YYMAXDEPTH +# define YYMAXDEPTH 10000 +#endif + + + + + + +/*-----------------------------------------------. +| Release the memory associated to this symbol. | +`-----------------------------------------------*/ + +static void +yydestruct (const char *yymsg, + yysymbol_kind_t yykind, YYSTYPE *yyvaluep) +{ + YY_USE (yyvaluep); + if (!yymsg) + yymsg = "Deleting"; + YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YY_USE (yykind); + YY_IGNORE_MAYBE_UNINITIALIZED_END +} + + +/* Lookahead token kind. */ +int yychar; + +/* The semantic value of the lookahead symbol. */ +YYSTYPE yylval; +/* Number of syntax errors so far. */ +int yynerrs; + + + + +/*----------. +| yyparse. | +`----------*/ + +int +yyparse (void) +{ + yy_state_fast_t yystate = 0; + /* Number of tokens to shift before error messages enabled. */ + int yyerrstatus = 0; + + /* Refer to the stacks through separate pointers, to allow yyoverflow + to reallocate them elsewhere. */ + + /* Their size. */ + YYPTRDIFF_T yystacksize = YYINITDEPTH; + + /* The state stack: array, bottom, top. */ + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss = yyssa; + yy_state_t *yyssp = yyss; + + /* The semantic value stack: array, bottom, top. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp = yyvs; + + int yyn; + /* The return value of yyparse. */ + int yyresult; + /* Lookahead symbol kind. */ + yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; + /* The variables used to return semantic value and location from the + action routines. */ + YYSTYPE yyval; + + + +#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) + + /* The number of symbols on the RHS of the reduced rule. + Keep to zero when no symbol should be popped. */ + int yylen = 0; + + YYDPRINTF ((stderr, "Starting parse\n")); + + yychar = YYEMPTY; /* Cause a token to be read. */ + + goto yysetstate; + + +/*------------------------------------------------------------. +| yynewstate -- push a new state, which is found in yystate. | +`------------------------------------------------------------*/ +yynewstate: + /* In all cases, when you get here, the value and location stacks + have just been pushed. So pushing a state here evens the stacks. */ + yyssp++; + + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END + YY_STACK_PRINT (yyss, yyssp); + + if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + YYNOMEM; +#else + { + /* Get the current used size of the three stacks, in elements. */ + YYPTRDIFF_T yysize = yyssp - yyss + 1; + +# if defined yyoverflow + { + /* Give user a chance to reallocate the stack. Use copies of + these so that the &'s don't force the real ones into + memory. */ + yy_state_t *yyss1 = yyss; + YYSTYPE *yyvs1 = yyvs; + + /* Each stack pointer address is followed by the size of the + data in use in that stack, in bytes. This used to be a + conditional around just the two extra args, but that might + be undefined if yyoverflow is a macro. */ + yyoverflow (YY_("memory exhausted"), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), + &yystacksize); + yyss = yyss1; + yyvs = yyvs1; + } +# else /* defined YYSTACK_RELOCATE */ + /* Extend the stack our own way. */ + if (YYMAXDEPTH <= yystacksize) + YYNOMEM; + yystacksize *= 2; + if (YYMAXDEPTH < yystacksize) + yystacksize = YYMAXDEPTH; + + { + yy_state_t *yyss1 = yyss; + union yyalloc *yyptr = + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); + if (! yyptr) + YYNOMEM; + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); +# undef YYSTACK_RELOCATE + if (yyss1 != yyssa) + YYSTACK_FREE (yyss1); + } +# endif + + yyssp = yyss + yysize - 1; + yyvsp = yyvs + yysize - 1; + + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END + + if (yyss + yystacksize - 1 <= yyssp) + YYABORT; + } +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ + + + if (yystate == YYFINAL) + YYACCEPT; + + goto yybackup; + + +/*-----------. +| yybackup. | +`-----------*/ +yybackup: + /* Do appropriate processing given the current state. Read a + lookahead token if we need one and don't already have one. */ + + /* First try to decide what to do without reference to lookahead token. */ + yyn = yypact[yystate]; + if (yypact_value_is_default (yyn)) + goto yydefault; + + /* Not known => get a lookahead token if don't already have one. */ + + /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ + if (yychar == YYEMPTY) + { + YYDPRINTF ((stderr, "Reading a token\n")); + yychar = yylex (); + } + + if (yychar <= YYEOF) + { + yychar = YYEOF; + yytoken = YYSYMBOL_YYEOF; + YYDPRINTF ((stderr, "Now at end of input.\n")); + } + else if (yychar == YYerror) + { + /* The scanner already issued an error message, process directly + to error recovery. But do not keep the error token as + lookahead, it is too special and may lead us to an endless + loop in error recovery. */ + yychar = YYUNDEF; + yytoken = YYSYMBOL_YYerror; + goto yyerrlab1; + } + else + { + yytoken = YYTRANSLATE (yychar); + YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); + } + + /* If the proper action on seeing token YYTOKEN is to reduce or to + detect an error, take that action. */ + yyn += yytoken; + if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + goto yydefault; + yyn = yytable[yyn]; + if (yyn <= 0) + { + if (yytable_value_is_error (yyn)) + goto yyerrlab; + yyn = -yyn; + goto yyreduce; + } + + /* Count tokens shifted since error; after three, turn off error + status. */ + if (yyerrstatus) + yyerrstatus--; + + /* Shift the lookahead token. */ + YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); + yystate = yyn; + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + /* Discard the shifted token. */ + yychar = YYEMPTY; + goto yynewstate; + + +/*-----------------------------------------------------------. +| yydefault -- do the default action for the current state. | +`-----------------------------------------------------------*/ +yydefault: + yyn = yydefact[yystate]; + if (yyn == 0) + goto yyerrlab; + goto yyreduce; + + +/*-----------------------------. +| yyreduce -- do a reduction. | +`-----------------------------*/ +yyreduce: + /* yyn is the number of a rule to reduce with. */ + yylen = yyr2[yyn]; + + /* If YYLEN is nonzero, implement the default value of the action: + '$$ = $1'. + + Otherwise, the following line sets YYVAL to garbage. + This behavior is undocumented and Bison + users should not rely upon it. Assigning to YYVAL + unconditionally makes the parser a bit smaller, and it avoids a + GCC warning that YYVAL may be used uninitialized. */ + yyval = yyvsp[1-yylen]; + + + YY_REDUCE_PRINT (yyn); + switch (yyn) + { + +#line 1272 "lang.tab.c" + + default: break; + } + /* User semantic actions sometimes alter yychar, and that requires + that yytoken be updated with the new translation. We take the + approach of translating immediately before every use of yytoken. + One alternative is translating here after every semantic action, + but that translation would be missed if the semantic action invokes + YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or + if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an + incorrect destructor might then be invoked immediately. In the + case of YYERROR or YYBACKUP, subsequent parser actions might lead + to an incorrect destructor call or verbose syntax error message + before the lookahead is translated. */ + YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); + + YYPOPSTACK (yylen); + yylen = 0; + + *++yyvsp = yyval; + + /* Now 'shift' the result of the reduction. Determine what state + that goes to, based on the state we popped back to and the rule + number reduced by. */ + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } + + goto yynewstate; + + +/*--------------------------------------. +| yyerrlab -- here on detecting error. | +`--------------------------------------*/ +yyerrlab: + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); + /* If not already recovering from an error, report this error. */ + if (!yyerrstatus) + { + ++yynerrs; + yyerror (YY_("syntax error")); + } + + if (yyerrstatus == 3) + { + /* If just tried and failed to reuse lookahead token after an + error, discard it. */ + + if (yychar <= YYEOF) + { + /* Return failure if at end of input. */ + if (yychar == YYEOF) + YYABORT; + } + else + { + yydestruct ("Error: discarding", + yytoken, &yylval); + yychar = YYEMPTY; + } + } + + /* Else will try to reuse lookahead token after shifting the error + token. */ + goto yyerrlab1; + + +/*---------------------------------------------------. +| yyerrorlab -- error raised explicitly by YYERROR. | +`---------------------------------------------------*/ +yyerrorlab: + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; + ++yynerrs; + + /* Do not reclaim the symbols of the rule whose action triggered + this YYERROR. */ + YYPOPSTACK (yylen); + yylen = 0; + YY_STACK_PRINT (yyss, yyssp); + yystate = *yyssp; + goto yyerrlab1; + + +/*-------------------------------------------------------------. +| yyerrlab1 -- common code for both syntax error and YYERROR. | +`-------------------------------------------------------------*/ +yyerrlab1: + yyerrstatus = 3; /* Each real token shifted decrements this. */ + + /* Pop stack until we find a state that shifts the error token. */ + for (;;) + { + yyn = yypact[yystate]; + if (!yypact_value_is_default (yyn)) + { + yyn += YYSYMBOL_YYerror; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) + { + yyn = yytable[yyn]; + if (0 < yyn) + break; + } + } + + /* Pop the current state because it cannot handle the error token. */ + if (yyssp == yyss) + YYABORT; + + + yydestruct ("Error: popping", + YY_ACCESSING_SYMBOL (yystate), yyvsp); + YYPOPSTACK (1); + yystate = *yyssp; + YY_STACK_PRINT (yyss, yyssp); + } + + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + *++yyvsp = yylval; + YY_IGNORE_MAYBE_UNINITIALIZED_END + + + /* Shift the error token. */ + YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); + + yystate = yyn; + goto yynewstate; + + +/*-------------------------------------. +| yyacceptlab -- YYACCEPT comes here. | +`-------------------------------------*/ +yyacceptlab: + yyresult = 0; + goto yyreturnlab; + + +/*-----------------------------------. +| yyabortlab -- YYABORT comes here. | +`-----------------------------------*/ +yyabortlab: + yyresult = 1; + goto yyreturnlab; + + +/*-----------------------------------------------------------. +| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. | +`-----------------------------------------------------------*/ +yyexhaustedlab: + yyerror (YY_("memory exhausted")); + yyresult = 2; + goto yyreturnlab; + + +/*----------------------------------------------------------. +| yyreturnlab -- parsing is finished, clean up and return. | +`----------------------------------------------------------*/ +yyreturnlab: + if (yychar != YYEMPTY) + { + /* Make sure we have latest lookahead translation. See comments at + user semantic actions for why this is necessary. */ + yytoken = YYTRANSLATE (yychar); + yydestruct ("Cleanup: discarding lookahead", + yytoken, &yylval); + } + /* Do not reclaim the symbols of the rule whose action triggered + this YYABORT or YYACCEPT. */ + YYPOPSTACK (yylen); + YY_STACK_PRINT (yyss, yyssp); + while (yyssp != yyss) + { + yydestruct ("Cleanup: popping", + YY_ACCESSING_SYMBOL (+*yyssp), yyvsp); + YYPOPSTACK (1); + } +#ifndef yyoverflow + if (yyss != yyssa) + YYSTACK_FREE (yyss); +#endif + + return yyresult; +} + +#line 140 "lang.y" + + +void yyerror(const char *s) { + fprintf(stderr, "Error: %s\n", s); +} + +ASTNode *createNode(const char *type, const char *value, ASTNode *left, ASTNode *right) { + ASTNode *node = (ASTNode *)malloc(sizeof(ASTNode)); + node->type = strdup(type); + node->value = value ? strdup(value) : NULL; + node->left = left; + node->right = right; + return node; +} diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.tab.h b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.tab.h new file mode 100644 index 0000000..d933a0b --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.tab.h @@ -0,0 +1,103 @@ +/* A Bison parser, made by GNU Bison 3.8.2. */ + +/* Bison interface for Yacc-like parsers in C + + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, + Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* As a special exception, you may create a larger work that contains + part or all of the Bison parser skeleton and distribute that work + under terms of your choice, so long as that work isn't itself a + parser generator using the skeleton or a modified version thereof + as a parser skeleton. Alternatively, if you modify or redistribute + the parser skeleton itself, you may (at your option) remove this + special exception, which will cause the skeleton and the resulting + Bison output files to be licensed under the GNU General Public + License without this special exception. + + This special exception was added by the Free Software Foundation in + version 2.2 of Bison. */ + +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ + +#ifndef YY_YY_LANG_TAB_H_INCLUDED +# define YY_YY_LANG_TAB_H_INCLUDED +/* Debug traces. */ +#ifndef YYDEBUG +# define YYDEBUG 1 +#endif +#if YYDEBUG +extern int yydebug; +#endif + +/* Token kinds. */ +#ifndef YYTOKENTYPE +# define YYTOKENTYPE + enum yytokentype + { + YYEMPTY = -2, + YYEOF = 0, /* "end of file" */ + YYerror = 256, /* error */ + YYUNDEF = 257, /* "invalid token" */ + SIMPLETYPE = 258, /* SIMPLETYPE */ + CLASS = 259, /* CLASS */ + ENTRY = 260, /* ENTRY */ + IF = 261, /* IF */ + WHILE = 262, /* WHILE */ + WRITE = 263, /* WRITE */ + READ = 264, /* READ */ + RETURN = 265, /* RETURN */ + IDENTIFIER = 266, /* IDENTIFIER */ + CONSTANTEXP = 267, /* CONSTANTEXP */ + LBRACE = 268, /* LBRACE */ + RBRACE = 269, /* RBRACE */ + LPAREN = 270, /* LPAREN */ + RPAREN = 271, /* RPAREN */ + LBRACKET = 272, /* LBRACKET */ + RBRACKET = 273, /* RBRACKET */ + ASSIGN = 274, /* ASSIGN */ + EQ = 275, /* EQ */ + LT = 276, /* LT */ + LE = 277, /* LE */ + GT = 278, /* GT */ + GE = 279, /* GE */ + SEMICOLON = 280, /* SEMICOLON */ + DOT = 281, /* DOT */ + PLUS = 282, /* PLUS */ + MINUS = 283, /* MINUS */ + MULT = 284, /* MULT */ + DIV = 285, /* DIV */ + COMMA = 286 /* COMMA */ + }; + typedef enum yytokentype yytoken_kind_t; +#endif + +/* Value type. */ +typedef struct { + int intval; + char *strval; +} YYSTYPE; + + +extern YYSTYPE yylval; + + +int yyparse (void); + + +#endif /* !YY_YY_LANG_TAB_H_INCLUDED */ diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.y b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.y new file mode 100644 index 0000000..e9eec20 --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/lang.y @@ -0,0 +1,153 @@ +%{ +#include +#include +#include + +void yyerror(const char *s); + +typedef struct ASTNode { + char *type; + char *value; + struct ASTNode *left; + struct ASTNode *right; +} ASTNode; + + + +ASTNode *createNode(const char *type, const char *value, ASTNode *left, ASTNode *right); +%} + +%token SIMPLETYPE CLASS ENTRY IF WHILE WRITE READ RETURN +%token IDENTIFIER +%token CONSTANTEXP +%token LBRACE RBRACE LPAREN RPAREN LBRACKET RBRACKET ASSIGN EQ LT LE GT GE SEMICOLON DOT PLUS MINUS MULT DIV +%token COMMA + +%start program + +%left PLUS MINUS +%left MULT DIV +%left LT LE GT GE EQ + +%% + +program: + CLASS IDENTIFIER LBRACE entry_declaration class_body RBRACE + ; + + +class_body: + %empty + | atrib_declaration class_body + | method_declaration class_body +; +atrib_declaration: + SIMPLETYPE IDENTIFIER SEMICOLON + | SIMPLETYPE IDENTIFIER ASSIGN CONSTANTEXP SEMICOLON + ; + +method_declaration: + SIMPLETYPE IDENTIFIER LPAREN method_params RPAREN LBRACE method_body RBRACE + ; + +method_params: + %empty + | SIMPLETYPE IDENTIFIER + | SIMPLETYPE IDENTIFIER COMMA method_params + ; + +method_body: + %empty + | statement_list + ; + +statement_list: + %empty + | statement statement_list + ; + +statement: + atrib_statement + | if_statement + | while_statement + | write_statement + | read_statement + | return_statement + ; + +atrib_statement: + IDENTIFIER ASSIGN expression SEMICOLON + ; + +if_statement: + IF LPAREN expression RPAREN LBRACE statement_list RBRACE + ; + +while_statement: + WHILE LPAREN expression RPAREN LBRACE statement_list RBRACE + ; + +write_statement: + WRITE LPAREN expression RPAREN SEMICOLON + ; + +read_statement: + READ LPAREN IDENTIFIER RPAREN SEMICOLON + ; + +return_statement: + RETURN expression SEMICOLON + ; + +expression: + CONSTANTEXP + | expression PLUS expression + | expression MINUS expression + | expression MULT expression + | expression DIV expression + | expression EQ expression + | expression LT expression + | expression LE expression + | expression GT expression + | expression GE expression + | LPAREN expression RPAREN + | IDENTIFIER + | IDENTIFIER LBRACKET expression RBRACKET + | LBRACKET array_list RBRACKET + | class_method_call + | class_expression + ; + +class_expression: + IDENTIFIER + | IDENTIFIER DOT class_expression + ; + +class_method_call: + class_expression LPAREN array_list RPAREN + +array_list: + %empty + | expression + | expression COMMA array_list + ; + +entry_declaration: + SIMPLETYPE ENTRY IDENTIFIER LPAREN RPAREN LBRACE statement_list RBRACE + ; + + +%% + +void yyerror(const char *s) { + fprintf(stderr, "Error: %s\n", s); +} + +ASTNode *createNode(const char *type, const char *value, ASTNode *left, ASTNode *right) { + ASTNode *node = (ASTNode *)malloc(sizeof(ASTNode)); + node->type = strdup(type); + node->value = value ? strdup(value) : NULL; + node->left = left; + node->right = right; + return node; +} diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/lex.yy.c b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/lex.yy.c new file mode 100644 index 0000000..6d5ee93 --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/lex.yy.c @@ -0,0 +1,2013 @@ + +#line 3 "lex.yy.c" + +#define YY_INT_ALIGNED short int + +/* A lexical scanner generated by flex */ + +#define FLEX_SCANNER +#define YY_FLEX_MAJOR_VERSION 2 +#define YY_FLEX_MINOR_VERSION 6 +#define YY_FLEX_SUBMINOR_VERSION 4 +#if YY_FLEX_SUBMINOR_VERSION > 0 +#define FLEX_BETA +#endif + +/* First, we deal with platform-specific or compiler-specific issues. */ + +/* begin standard C headers. */ +#include +#include +#include +#include + +/* end standard C headers. */ + +/* flex integer type definitions */ + +#ifndef FLEXINT_H +#define FLEXINT_H + +/* C99 systems have . Non-C99 systems may or may not. */ + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + +/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, + * if you want the limit (max/min) macros for int types. + */ +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS 1 +#endif + +#include +typedef int8_t flex_int8_t; +typedef uint8_t flex_uint8_t; +typedef int16_t flex_int16_t; +typedef uint16_t flex_uint16_t; +typedef int32_t flex_int32_t; +typedef uint32_t flex_uint32_t; +#else +typedef signed char flex_int8_t; +typedef short int flex_int16_t; +typedef int flex_int32_t; +typedef unsigned char flex_uint8_t; +typedef unsigned short int flex_uint16_t; +typedef unsigned int flex_uint32_t; + +/* Limits of integral types. */ +#ifndef INT8_MIN +#define INT8_MIN (-128) +#endif +#ifndef INT16_MIN +#define INT16_MIN (-32767-1) +#endif +#ifndef INT32_MIN +#define INT32_MIN (-2147483647-1) +#endif +#ifndef INT8_MAX +#define INT8_MAX (127) +#endif +#ifndef INT16_MAX +#define INT16_MAX (32767) +#endif +#ifndef INT32_MAX +#define INT32_MAX (2147483647) +#endif +#ifndef UINT8_MAX +#define UINT8_MAX (255U) +#endif +#ifndef UINT16_MAX +#define UINT16_MAX (65535U) +#endif +#ifndef UINT32_MAX +#define UINT32_MAX (4294967295U) +#endif + +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + +#endif /* ! C99 */ + +#endif /* ! FLEXINT_H */ + +/* begin standard C++ headers. */ + +/* TODO: this is always defined, so inline it */ +#define yyconst const + +#if defined(__GNUC__) && __GNUC__ >= 3 +#define yynoreturn __attribute__((__noreturn__)) +#else +#define yynoreturn +#endif + +/* Returned upon end-of-file. */ +#define YY_NULL 0 + +/* Promotes a possibly negative, possibly signed char to an + * integer in range [0..255] for use as an array index. + */ +#define YY_SC_TO_UI(c) ((YY_CHAR) (c)) + +/* Enter a start condition. This macro really ought to take a parameter, + * but we do it the disgusting crufty way forced on us by the ()-less + * definition of BEGIN. + */ +#define BEGIN (yy_start) = 1 + 2 * +/* Translate the current start state into a value that can be later handed + * to BEGIN to return to the state. The YYSTATE alias is for lex + * compatibility. + */ +#define YY_START (((yy_start) - 1) / 2) +#define YYSTATE YY_START +/* Action number for EOF rule of a given start state. */ +#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) +/* Special action meaning "start processing a new file". */ +#define YY_NEW_FILE yyrestart( yyin ) +#define YY_END_OF_BUFFER_CHAR 0 + +/* Size of default input buffer. */ +#ifndef YY_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k. + * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. + * Ditto for the __ia64__ case accordingly. + */ +#define YY_BUF_SIZE 32768 +#else +#define YY_BUF_SIZE 16384 +#endif /* __ia64__ */ +#endif + +/* The state buf must be large enough to hold one state per character in the main buffer. + */ +#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) + +#ifndef YY_TYPEDEF_YY_BUFFER_STATE +#define YY_TYPEDEF_YY_BUFFER_STATE +typedef struct yy_buffer_state *YY_BUFFER_STATE; +#endif + +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern int yyleng; + +extern FILE *yyin, *yyout; + +#define EOB_ACT_CONTINUE_SCAN 0 +#define EOB_ACT_END_OF_FILE 1 +#define EOB_ACT_LAST_MATCH 2 + + #define YY_LESS_LINENO(n) + #define YY_LINENO_REWIND_TO(ptr) + +/* Return all but the first "n" matched characters back to the input stream. */ +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + *yy_cp = (yy_hold_char); \ + YY_RESTORE_YY_MORE_OFFSET \ + (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ + YY_DO_BEFORE_ACTION; /* set up yytext again */ \ + } \ + while ( 0 ) +#define unput(c) yyunput( c, (yytext_ptr) ) + +#ifndef YY_STRUCT_YY_BUFFER_STATE +#define YY_STRUCT_YY_BUFFER_STATE +struct yy_buffer_state + { + FILE *yy_input_file; + + char *yy_ch_buf; /* input buffer */ + char *yy_buf_pos; /* current position in input buffer */ + + /* Size of input buffer in bytes, not including room for EOB + * characters. + */ + int yy_buf_size; + + /* Number of characters read into yy_ch_buf, not including EOB + * characters. + */ + int yy_n_chars; + + /* Whether we "own" the buffer - i.e., we know we created it, + * and can realloc() it to grow it, and should free() it to + * delete it. + */ + int yy_is_our_buffer; + + /* Whether this is an "interactive" input source; if so, and + * if we're using stdio for input, then we want to use getc() + * instead of fread(), to make sure we stop fetching input after + * each newline. + */ + int yy_is_interactive; + + /* Whether we're considered to be at the beginning of a line. + * If so, '^' rules will be active on the next match, otherwise + * not. + */ + int yy_at_bol; + + int yy_bs_lineno; /**< The line count. */ + int yy_bs_column; /**< The column count. */ + + /* Whether to try to fill the input buffer when we reach the + * end of it. + */ + int yy_fill_buffer; + + int yy_buffer_status; + +#define YY_BUFFER_NEW 0 +#define YY_BUFFER_NORMAL 1 + /* When an EOF's been seen but there's still some text to process + * then we mark the buffer as YY_EOF_PENDING, to indicate that we + * shouldn't try reading from the input source any more. We might + * still have a bunch of tokens to match, though, because of + * possible backing-up. + * + * When we actually see the EOF, we change the status to "new" + * (via yyrestart()), so that the user can continue scanning by + * just pointing yyin at a new input file. + */ +#define YY_BUFFER_EOF_PENDING 2 + + }; +#endif /* !YY_STRUCT_YY_BUFFER_STATE */ + +/* Stack of input buffers. */ +static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ +static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ +static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */ + +/* We provide macros for accessing buffer states in case in the + * future we want to put the buffer states in a more general + * "scanner state". + * + * Returns the top of the stack, or NULL. + */ +#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ + ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ + : NULL) +/* Same as previous macro, but useful when we know that the buffer stack is not + * NULL or when we need an lvalue. For internal use only. + */ +#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] + +/* yy_hold_char holds the character lost when yytext is formed. */ +static char yy_hold_char; +static int yy_n_chars; /* number of characters read into yy_ch_buf */ +int yyleng; + +/* Points to current character in buffer. */ +static char *yy_c_buf_p = NULL; +static int yy_init = 0; /* whether we need to initialize */ +static int yy_start = 0; /* start state number */ + +/* Flag which is used to allow yywrap()'s to do buffer switches + * instead of setting up a fresh yyin. A bit of a hack ... + */ +static int yy_did_buffer_switch_on_eof; + +void yyrestart ( FILE *input_file ); +void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer ); +YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size ); +void yy_delete_buffer ( YY_BUFFER_STATE b ); +void yy_flush_buffer ( YY_BUFFER_STATE b ); +void yypush_buffer_state ( YY_BUFFER_STATE new_buffer ); +void yypop_buffer_state ( void ); + +static void yyensure_buffer_stack ( void ); +static void yy_load_buffer_state ( void ); +static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file ); +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER ) + +YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size ); +YY_BUFFER_STATE yy_scan_string ( const char *yy_str ); +YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len ); + +void *yyalloc ( yy_size_t ); +void *yyrealloc ( void *, yy_size_t ); +void yyfree ( void * ); + +#define yy_new_buffer yy_create_buffer +#define yy_set_interactive(is_interactive) \ + { \ + if ( ! YY_CURRENT_BUFFER ){ \ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ + } +#define yy_set_bol(at_bol) \ + { \ + if ( ! YY_CURRENT_BUFFER ){\ + yyensure_buffer_stack (); \ + YY_CURRENT_BUFFER_LVALUE = \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ + } \ + YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ + } +#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) + +/* Begin user sect3 */ +typedef flex_uint8_t YY_CHAR; + +FILE *yyin = NULL, *yyout = NULL; + +typedef int yy_state_type; + +extern int yylineno; +int yylineno = 1; + +extern char *yytext; +#ifdef yytext_ptr +#undef yytext_ptr +#endif +#define yytext_ptr yytext + +static yy_state_type yy_get_previous_state ( void ); +static yy_state_type yy_try_NUL_trans ( yy_state_type current_state ); +static int yy_get_next_buffer ( void ); +static void yynoreturn yy_fatal_error ( const char* msg ); + +/* Done after the current pattern has been matched and before the + * corresponding action - sets up yytext. + */ +#define YY_DO_BEFORE_ACTION \ + (yytext_ptr) = yy_bp; \ + yyleng = (int) (yy_cp - yy_bp); \ + (yy_hold_char) = *yy_cp; \ + *yy_cp = '\0'; \ + (yy_c_buf_p) = yy_cp; +#define YY_NUM_RULES 33 +#define YY_END_OF_BUFFER 34 +/* This struct is not used in this scanner, + but its presence is necessary. */ +struct yy_trans_info + { + flex_int32_t yy_verify; + flex_int32_t yy_nxt; + }; +static const flex_int16_t yy_accept[70] = + { 0, + 0, 0, 34, 32, 30, 30, 32, 11, 12, 17, + 15, 27, 16, 26, 18, 28, 25, 21, 19, 23, + 29, 13, 14, 29, 29, 29, 29, 29, 29, 9, + 10, 30, 31, 28, 22, 20, 24, 29, 29, 29, + 29, 4, 29, 29, 29, 29, 29, 29, 29, 29, + 1, 29, 29, 29, 29, 29, 29, 29, 7, 29, + 29, 29, 2, 3, 29, 5, 6, 8, 0 + } ; + +static const YY_CHAR yy_ec[256] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, + 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 1, 1, 1, 1, 1, 1, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 1, 14, 15, + 16, 17, 1, 1, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 19, 1, 20, 1, 18, 1, 21, 18, 22, 23, + + 24, 25, 18, 26, 27, 18, 18, 28, 18, 29, + 30, 18, 18, 31, 32, 33, 34, 35, 36, 18, + 37, 18, 38, 1, 39, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + } ; + +static const YY_CHAR yy_meta[40] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 1, 1 + } ; + +static const flex_int16_t yy_base[71] = + { 0, + 0, 0, 85, 86, 38, 40, 81, 86, 86, 86, + 86, 86, 86, 86, 86, 70, 86, 66, 65, 64, + 0, 86, 86, 18, 50, 20, 54, 47, 21, 86, + 86, 48, 86, 63, 86, 86, 86, 0, 54, 53, + 40, 0, 39, 27, 44, 43, 42, 37, 35, 35, + 0, 42, 30, 40, 34, 28, 27, 21, 0, 26, + 32, 31, 0, 0, 25, 0, 0, 0, 86, 51 + } ; + +static const flex_int16_t yy_def[71] = + { 0, + 69, 1, 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, + 70, 69, 69, 70, 70, 70, 70, 70, 70, 69, + 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 70, 0, 69 + } ; + +static const flex_int16_t yy_nxt[126] = + { 0, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 21, 24, 21, 25, 21, 21, 26, 21, 21, 21, + 27, 21, 21, 21, 28, 29, 21, 30, 31, 32, + 32, 32, 32, 39, 42, 40, 46, 52, 43, 32, + 32, 47, 38, 68, 67, 66, 65, 64, 63, 53, + 62, 61, 51, 60, 59, 58, 57, 51, 56, 55, + 54, 51, 50, 49, 48, 34, 45, 44, 41, 37, + 36, 35, 34, 33, 69, 3, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, + + 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69 + } ; + +static const flex_int16_t yy_chk[126] = + { 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, + 5, 6, 6, 24, 26, 24, 29, 44, 26, 32, + 32, 29, 70, 65, 62, 61, 60, 58, 57, 44, + 56, 55, 54, 53, 52, 50, 49, 48, 47, 46, + 45, 43, 41, 40, 39, 34, 28, 27, 25, 20, + 19, 18, 16, 7, 3, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, + + 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, + 69, 69, 69, 69, 69 + } ; + +static yy_state_type yy_last_accepting_state; +static char *yy_last_accepting_cpos; + +extern int yy_flex_debug; +int yy_flex_debug = 0; + +/* The intent behind this definition is that it'll catch + * any uses of REJECT which flex missed. + */ +#define REJECT reject_used_but_not_detected +#define yymore() yymore_used_but_not_detected +#define YY_MORE_ADJ 0 +#define YY_RESTORE_YY_MORE_OFFSET +char *yytext; +#line 1 "lang.lxi" +#line 2 "lang.lxi" +#include +#include +#include +#include "lang.tab.h" + +// Define YYSTYPE structure + + +extern YYSTYPE yylval; +extern int yydebug; // Declare yydebug +// Token definitions + + +// File pointers +FILE *yyin, *yyout; + +#line 505 "lex.yy.c" +#line 506 "lex.yy.c" + +#define INITIAL 0 + +#ifndef YY_NO_UNISTD_H +/* Special case for "unistd.h", since it is non-ANSI. We include it way + * down here because we want the user's section 1 to have been scanned first. + * The user has a chance to override it with an option. + */ +#include +#endif + +#ifndef YY_EXTRA_TYPE +#define YY_EXTRA_TYPE void * +#endif + +static int yy_init_globals ( void ); + +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy ( void ); + +int yyget_debug ( void ); + +void yyset_debug ( int debug_flag ); + +YY_EXTRA_TYPE yyget_extra ( void ); + +void yyset_extra ( YY_EXTRA_TYPE user_defined ); + +FILE *yyget_in ( void ); + +void yyset_in ( FILE * _in_str ); + +FILE *yyget_out ( void ); + +void yyset_out ( FILE * _out_str ); + + int yyget_leng ( void ); + +char *yyget_text ( void ); + +int yyget_lineno ( void ); + +void yyset_lineno ( int _line_number ); + +/* Macros after this point can all be overridden by user definitions in + * section 1. + */ + +#ifndef YY_SKIP_YYWRAP +#ifdef __cplusplus +extern "C" int yywrap ( void ); +#else +extern int yywrap ( void ); +#endif +#endif + +#ifndef YY_NO_UNPUT + + static void yyunput ( int c, char *buf_ptr ); + +#endif + +#ifndef yytext_ptr +static void yy_flex_strncpy ( char *, const char *, int ); +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen ( const char * ); +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus +static int yyinput ( void ); +#else +static int input ( void ); +#endif + +#endif + +/* Amount of stuff to slurp up with each read. */ +#ifndef YY_READ_BUF_SIZE +#ifdef __ia64__ +/* On IA-64, the buffer size is 16k, not 8k */ +#define YY_READ_BUF_SIZE 16384 +#else +#define YY_READ_BUF_SIZE 8192 +#endif /* __ia64__ */ +#endif + +/* Copy whatever the last rule matched to the standard output. */ +#ifndef ECHO +/* This used to be an fputs(), but since the string might contain NUL's, + * we now use fwrite(). + */ +#define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) +#endif + +/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, + * is returned in "result". + */ +#ifndef YY_INPUT +#define YY_INPUT(buf,result,max_size) \ + if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ + { \ + int c = '*'; \ + int n; \ + for ( n = 0; n < max_size && \ + (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ + buf[n] = (char) c; \ + if ( c == '\n' ) \ + buf[n++] = (char) c; \ + if ( c == EOF && ferror( yyin ) ) \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + result = n; \ + } \ + else \ + { \ + errno=0; \ + while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ + { \ + if( errno != EINTR) \ + { \ + YY_FATAL_ERROR( "input in flex scanner failed" ); \ + break; \ + } \ + errno=0; \ + clearerr(yyin); \ + } \ + }\ +\ + +#endif + +/* No semi-colon after return; correct usage is to write "yyterminate();" - + * we don't want an extra ';' after the "return" because that will cause + * some compilers to complain about unreachable statements. + */ +#ifndef yyterminate +#define yyterminate() return YY_NULL +#endif + +/* Number of entries by which start-condition stack grows. */ +#ifndef YY_START_STACK_INCR +#define YY_START_STACK_INCR 25 +#endif + +/* Report a fatal error. */ +#ifndef YY_FATAL_ERROR +#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) +#endif + +/* end tables serialization structures and prototypes */ + +/* Default declaration of generated scanner - a define so the user can + * easily add parameters. + */ +#ifndef YY_DECL +#define YY_DECL_IS_OURS 1 + +extern int yylex (void); + +#define YY_DECL int yylex (void) +#endif /* !YY_DECL */ + +/* Code executed at the beginning of each rule, after yytext and yyleng + * have been set up. + */ +#ifndef YY_USER_ACTION +#define YY_USER_ACTION +#endif + +/* Code executed at the end of each rule. */ +#ifndef YY_BREAK +#define YY_BREAK /*LINTED*/break; +#endif + +#define YY_RULE_SETUP \ + YY_USER_ACTION + +/** The main scanner function which does all the work. + */ +YY_DECL +{ + yy_state_type yy_current_state; + char *yy_cp, *yy_bp; + int yy_act; + + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! yyin ) + yyin = stdin; + + if ( ! yyout ) + yyout = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE ); + } + + yy_load_buffer_state( ); + } + + { +#line 20 "lang.lxi" + + +#line 726 "lex.yy.c" + + while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ + { + yy_cp = (yy_c_buf_p); + + /* Support of yytext. */ + *yy_cp = (yy_hold_char); + + /* yy_bp points to the position in yy_ch_buf of the start of + * the current run. + */ + yy_bp = yy_cp; + + yy_current_state = (yy_start); +yy_match: + do + { + YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 70 ) + yy_c = yy_meta[yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + ++yy_cp; + } + while ( yy_base[yy_current_state] != 86 ); + +yy_find_action: + yy_act = yy_accept[yy_current_state]; + if ( yy_act == 0 ) + { /* have to back up */ + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + yy_act = yy_accept[yy_current_state]; + } + + YY_DO_BEFORE_ACTION; + +do_action: /* This label is used only to access EOF actions. */ + + switch ( yy_act ) + { /* beginning of action switch */ + case 0: /* must back up */ + /* undo the effects of YY_DO_BEFORE_ACTION */ + *yy_cp = (yy_hold_char); + yy_cp = (yy_last_accepting_cpos); + yy_current_state = (yy_last_accepting_state); + goto yy_find_action; + +case 1: +YY_RULE_SETUP +#line 22 "lang.lxi" +{ fprintf(yyout, "SIMPLETYPE\n"); return SIMPLETYPE; } + YY_BREAK +case 2: +YY_RULE_SETUP +#line 23 "lang.lxi" +{ fprintf(yyout, "CLASS\n"); return CLASS; } + YY_BREAK +case 3: +YY_RULE_SETUP +#line 24 "lang.lxi" +{ fprintf(yyout, "ENTRY\n"); return ENTRY; } + YY_BREAK +case 4: +YY_RULE_SETUP +#line 25 "lang.lxi" +{ fprintf(yyout, "IF\n"); return IF; } + YY_BREAK +case 5: +YY_RULE_SETUP +#line 26 "lang.lxi" +{ fprintf(yyout, "WHILE\n"); return WHILE; } + YY_BREAK +case 6: +YY_RULE_SETUP +#line 27 "lang.lxi" +{ fprintf(yyout, "WRITE\n"); return WRITE; } + YY_BREAK +case 7: +YY_RULE_SETUP +#line 28 "lang.lxi" +{ fprintf(yyout, "READ\n"); return READ; } + YY_BREAK +case 8: +YY_RULE_SETUP +#line 29 "lang.lxi" +{ fprintf(yyout, "RETURN\n"); return RETURN; } + YY_BREAK +case 9: +YY_RULE_SETUP +#line 30 "lang.lxi" +{ fprintf(yyout, "LBRACE\n"); return LBRACE; } + YY_BREAK +case 10: +YY_RULE_SETUP +#line 31 "lang.lxi" +{ fprintf(yyout, "RBRACE\n"); return RBRACE; } + YY_BREAK +case 11: +YY_RULE_SETUP +#line 32 "lang.lxi" +{ fprintf(yyout, "LPAREN\n"); return LPAREN; } + YY_BREAK +case 12: +YY_RULE_SETUP +#line 33 "lang.lxi" +{ fprintf(yyout, "RPAREN\n"); return RPAREN; } + YY_BREAK +case 13: +YY_RULE_SETUP +#line 34 "lang.lxi" +{ fprintf(yyout, "LBRACKET\n"); return LBRACKET; } + YY_BREAK +case 14: +YY_RULE_SETUP +#line 35 "lang.lxi" +{ fprintf(yyout, "RBRACKET\n"); return RBRACKET; } + YY_BREAK +case 15: +YY_RULE_SETUP +#line 36 "lang.lxi" +{ fprintf(yyout, "PLUS\n"); return PLUS; } + YY_BREAK +case 16: +YY_RULE_SETUP +#line 37 "lang.lxi" +{ fprintf(yyout, "MINUS\n"); return MINUS; } + YY_BREAK +case 17: +YY_RULE_SETUP +#line 38 "lang.lxi" +{ fprintf(yyout, "MULT\n"); return MULT; } + YY_BREAK +case 18: +YY_RULE_SETUP +#line 39 "lang.lxi" +{ fprintf(yyout, "DIV\n"); return DIV; } + YY_BREAK +case 19: +YY_RULE_SETUP +#line 40 "lang.lxi" +{ fprintf(yyout, "ASSIGN\n"); return ASSIGN; } + YY_BREAK +case 20: +YY_RULE_SETUP +#line 41 "lang.lxi" +{ fprintf(yyout, "EQ\n"); return EQ; } + YY_BREAK +case 21: +YY_RULE_SETUP +#line 42 "lang.lxi" +{ fprintf(yyout, "LT\n"); return LT; } + YY_BREAK +case 22: +YY_RULE_SETUP +#line 43 "lang.lxi" +{ fprintf(yyout, "LE\n"); return LE; } + YY_BREAK +case 23: +YY_RULE_SETUP +#line 44 "lang.lxi" +{ fprintf(yyout, "GT\n"); return GT; } + YY_BREAK +case 24: +YY_RULE_SETUP +#line 45 "lang.lxi" +{ fprintf(yyout, "GE\n"); return GE; } + YY_BREAK +case 25: +YY_RULE_SETUP +#line 46 "lang.lxi" +{ fprintf(yyout, "SEMICOLON\n"); return SEMICOLON; } + YY_BREAK +case 26: +YY_RULE_SETUP +#line 47 "lang.lxi" +{ fprintf(yyout, "DOT\n"); return DOT; } + YY_BREAK +case 27: +YY_RULE_SETUP +#line 48 "lang.lxi" +{ fprintf(yyout, "COMMA\n"); return COMMA; } + YY_BREAK +case 28: +YY_RULE_SETUP +#line 49 "lang.lxi" +{ yylval.intval = atoi(yytext); fprintf(yyout, "CONSTANTEXP %d\n", yylval.intval); return CONSTANTEXP; } + YY_BREAK +case 29: +YY_RULE_SETUP +#line 50 "lang.lxi" +{ yylval.strval = strdup(yytext); fprintf(yyout, "IDENTIFIER %s\n", yylval.strval); return IDENTIFIER; } + YY_BREAK +case 30: +/* rule 30 can match eol */ +YY_RULE_SETUP +#line 51 "lang.lxi" +{ /* Ignore spaces and tabs */ } + YY_BREAK +case 31: +/* rule 31 can match eol */ +YY_RULE_SETUP +#line 52 "lang.lxi" +{ /* Increment line count if needed */ } + YY_BREAK +case 32: +YY_RULE_SETUP +#line 53 "lang.lxi" +{ fprintf(yyout, "Unknown character: %s\n", yytext); } + YY_BREAK +case 33: +YY_RULE_SETUP +#line 55 "lang.lxi" +ECHO; + YY_BREAK +#line 950 "lex.yy.c" +case YY_STATE_EOF(INITIAL): + yyterminate(); + + case YY_END_OF_BUFFER: + { + /* Amount of text matched not including the EOB char. */ + int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; + + /* Undo the effects of YY_DO_BEFORE_ACTION. */ + *yy_cp = (yy_hold_char); + YY_RESTORE_YY_MORE_OFFSET + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) + { + /* We're scanning a new file or input source. It's + * possible that this happened because the user + * just pointed yyin at a new source and called + * yylex(). If so, then we have to assure + * consistency between YY_CURRENT_BUFFER and our + * globals. Here is the right place to do so, because + * this is the first action (other than possibly a + * back-up) that will match for the new input source. + */ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + } + + /* Note that here we test for yy_c_buf_p "<=" to the position + * of the first EOB in the buffer, since yy_c_buf_p will + * already have been incremented past the NUL character + * (since all states make transitions on EOB to the + * end-of-buffer state). Contrast this with the test + * in input(). + */ + if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + { /* This was really a NUL. */ + yy_state_type yy_next_state; + + (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + /* Okay, we're now positioned to make the NUL + * transition. We couldn't have + * yy_get_previous_state() go ahead and do it + * for us because it doesn't know how to deal + * with the possibility of jamming (and we don't + * want to build jamming into it because then it + * will run more slowly). + */ + + yy_next_state = yy_try_NUL_trans( yy_current_state ); + + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + + if ( yy_next_state ) + { + /* Consume the NUL. */ + yy_cp = ++(yy_c_buf_p); + yy_current_state = yy_next_state; + goto yy_match; + } + + else + { + yy_cp = (yy_c_buf_p); + goto yy_find_action; + } + } + + else switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_END_OF_FILE: + { + (yy_did_buffer_switch_on_eof) = 0; + + if ( yywrap( ) ) + { + /* Note: because we've taken care in + * yy_get_next_buffer() to have set up + * yytext, we can now set up + * yy_c_buf_p so that if some total + * hoser (like flex itself) wants to + * call the scanner after we return the + * YY_NULL, it'll still work - another + * YY_NULL will get returned. + */ + (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; + + yy_act = YY_STATE_EOF(YY_START); + goto do_action; + } + + else + { + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; + } + break; + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = + (yytext_ptr) + yy_amount_of_matched_text; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_match; + + case EOB_ACT_LAST_MATCH: + (yy_c_buf_p) = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; + + yy_current_state = yy_get_previous_state( ); + + yy_cp = (yy_c_buf_p); + yy_bp = (yytext_ptr) + YY_MORE_ADJ; + goto yy_find_action; + } + break; + } + + default: + YY_FATAL_ERROR( + "fatal flex scanner internal error--no action found" ); + } /* end of action switch */ + } /* end of scanning one token */ + } /* end of user's declarations */ +} /* end of yylex */ + +/* yy_get_next_buffer - try to read in a new buffer + * + * Returns a code representing an action: + * EOB_ACT_LAST_MATCH - + * EOB_ACT_CONTINUE_SCAN - continue scanning from current position + * EOB_ACT_END_OF_FILE - end of file + */ +static int yy_get_next_buffer (void) +{ + char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; + char *source = (yytext_ptr); + int number_to_move, i; + int ret_val; + + if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) + YY_FATAL_ERROR( + "fatal flex scanner internal error--end of buffer missed" ); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) + { /* Don't try to fill the buffer, so this is an EOF. */ + if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) + { + /* We matched a single character, the EOB, so + * treat this as a final EOF. + */ + return EOB_ACT_END_OF_FILE; + } + + else + { + /* We matched some text prior to the EOB, first + * process it. + */ + return EOB_ACT_LAST_MATCH; + } + } + + /* Try to read more data. */ + + /* First move last chars to start of buffer. */ + number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr) - 1); + + for ( i = 0; i < number_to_move; ++i ) + *(dest++) = *(source++); + + if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) + /* don't do the read, it's not guaranteed to return an EOF, + * just force an EOF + */ + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; + + else + { + int num_to_read = + YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; + + while ( num_to_read <= 0 ) + { /* Not enough room in the buffer - grow it. */ + + /* just a shorter name for the current buffer */ + YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; + + int yy_c_buf_p_offset = + (int) ((yy_c_buf_p) - b->yy_ch_buf); + + if ( b->yy_is_our_buffer ) + { + int new_size = b->yy_buf_size * 2; + + if ( new_size <= 0 ) + b->yy_buf_size += b->yy_buf_size / 8; + else + b->yy_buf_size *= 2; + + b->yy_ch_buf = (char *) + /* Include room in for 2 EOB chars. */ + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) ); + } + else + /* Can't grow it, we don't own it. */ + b->yy_ch_buf = NULL; + + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( + "fatal error - scanner input buffer overflow" ); + + (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; + + num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - + number_to_move - 1; + + } + + if ( num_to_read > YY_READ_BUF_SIZE ) + num_to_read = YY_READ_BUF_SIZE; + + /* Read in more data. */ + YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), + (yy_n_chars), num_to_read ); + + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + if ( (yy_n_chars) == 0 ) + { + if ( number_to_move == YY_MORE_ADJ ) + { + ret_val = EOB_ACT_END_OF_FILE; + yyrestart( yyin ); + } + + else + { + ret_val = EOB_ACT_LAST_MATCH; + YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = + YY_BUFFER_EOF_PENDING; + } + } + + else + ret_val = EOB_ACT_CONTINUE_SCAN; + + if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); + } + + (yy_n_chars) += number_to_move; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; + + (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; + + return ret_val; +} + +/* yy_get_previous_state - get the state just before the EOB char was reached */ + + static yy_state_type yy_get_previous_state (void) +{ + yy_state_type yy_current_state; + char *yy_cp; + + yy_current_state = (yy_start); + + for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) + { + YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 70 ) + yy_c = yy_meta[yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + } + + return yy_current_state; +} + +/* yy_try_NUL_trans - try to make a transition on the NUL character + * + * synopsis + * next_state = yy_try_NUL_trans( current_state ); + */ + static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) +{ + int yy_is_jam; + char *yy_cp = (yy_c_buf_p); + + YY_CHAR yy_c = 1; + if ( yy_accept[yy_current_state] ) + { + (yy_last_accepting_state) = yy_current_state; + (yy_last_accepting_cpos) = yy_cp; + } + while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) + { + yy_current_state = (int) yy_def[yy_current_state]; + if ( yy_current_state >= 70 ) + yy_c = yy_meta[yy_c]; + } + yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; + yy_is_jam = (yy_current_state == 69); + + return yy_is_jam ? 0 : yy_current_state; +} + +#ifndef YY_NO_UNPUT + + static void yyunput (int c, char * yy_bp ) +{ + char *yy_cp; + + yy_cp = (yy_c_buf_p); + + /* undo effects of setting up yytext */ + *yy_cp = (yy_hold_char); + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + { /* need to shift things up to make room */ + /* +2 for EOB chars. */ + int number_to_move = (yy_n_chars) + 2; + char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; + char *source = + &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; + + while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + *--dest = *--source; + + yy_cp += (int) (dest - source); + yy_bp += (int) (dest - source); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = + (yy_n_chars) = (int) YY_CURRENT_BUFFER_LVALUE->yy_buf_size; + + if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) + YY_FATAL_ERROR( "flex scanner push-back overflow" ); + } + + *--yy_cp = (char) c; + + (yytext_ptr) = yy_bp; + (yy_hold_char) = *yy_cp; + (yy_c_buf_p) = yy_cp; +} + +#endif + +#ifndef YY_NO_INPUT +#ifdef __cplusplus + static int yyinput (void) +#else + static int input (void) +#endif + +{ + int c; + + *(yy_c_buf_p) = (yy_hold_char); + + if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) + { + /* yy_c_buf_p now points to the character we want to return. + * If this occurs *before* the EOB characters, then it's a + * valid NUL; if not, then we've hit the end of the buffer. + */ + if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) + /* This was really a NUL. */ + *(yy_c_buf_p) = '\0'; + + else + { /* need more input */ + int offset = (int) ((yy_c_buf_p) - (yytext_ptr)); + ++(yy_c_buf_p); + + switch ( yy_get_next_buffer( ) ) + { + case EOB_ACT_LAST_MATCH: + /* This happens because yy_g_n_b() + * sees that we've accumulated a + * token and flags that we need to + * try matching the token before + * proceeding. But for input(), + * there's no matching to consider. + * So convert the EOB_ACT_LAST_MATCH + * to EOB_ACT_END_OF_FILE. + */ + + /* Reset buffer status. */ + yyrestart( yyin ); + + /*FALLTHROUGH*/ + + case EOB_ACT_END_OF_FILE: + { + if ( yywrap( ) ) + return 0; + + if ( ! (yy_did_buffer_switch_on_eof) ) + YY_NEW_FILE; +#ifdef __cplusplus + return yyinput(); +#else + return input(); +#endif + } + + case EOB_ACT_CONTINUE_SCAN: + (yy_c_buf_p) = (yytext_ptr) + offset; + break; + } + } + } + + c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ + *(yy_c_buf_p) = '\0'; /* preserve yytext */ + (yy_hold_char) = *++(yy_c_buf_p); + + return c; +} +#endif /* ifndef YY_NO_INPUT */ + +/** Immediately switch to a different input stream. + * @param input_file A readable stream. + * + * @note This function does not reset the start condition to @c INITIAL . + */ + void yyrestart (FILE * input_file ) +{ + + if ( ! YY_CURRENT_BUFFER ){ + yyensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + yy_create_buffer( yyin, YY_BUF_SIZE ); + } + + yy_init_buffer( YY_CURRENT_BUFFER, input_file ); + yy_load_buffer_state( ); +} + +/** Switch to a different input buffer. + * @param new_buffer The new input buffer. + * + */ + void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) +{ + + /* TODO. We should be able to replace this entire function body + * with + * yypop_buffer_state(); + * yypush_buffer_state(new_buffer); + */ + yyensure_buffer_stack (); + if ( YY_CURRENT_BUFFER == new_buffer ) + return; + + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + YY_CURRENT_BUFFER_LVALUE = new_buffer; + yy_load_buffer_state( ); + + /* We don't actually know whether we did this switch during + * EOF (yywrap()) processing, but the only time this flag + * is looked at is after yywrap() is called, so it's safe + * to go ahead and always set it. + */ + (yy_did_buffer_switch_on_eof) = 1; +} + +static void yy_load_buffer_state (void) +{ + (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; + (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; + yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; + (yy_hold_char) = *(yy_c_buf_p); +} + +/** Allocate and initialize an input buffer state. + * @param file A readable stream. + * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. + * + * @return the allocated buffer state. + */ + YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) +{ + YY_BUFFER_STATE b; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_buf_size = size; + + /* yy_ch_buf has to be 2 characters longer than the size given because + * we need to put in 2 end-of-buffer characters. + */ + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); + if ( ! b->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); + + b->yy_is_our_buffer = 1; + + yy_init_buffer( b, file ); + + return b; +} + +/** Destroy the buffer. + * @param b a buffer created with yy_create_buffer() + * + */ + void yy_delete_buffer (YY_BUFFER_STATE b ) +{ + + if ( ! b ) + return; + + if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ + YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; + + if ( b->yy_is_our_buffer ) + yyfree( (void *) b->yy_ch_buf ); + + yyfree( (void *) b ); +} + +/* Initializes or reinitializes a buffer. + * This function is sometimes called more than once on the same buffer, + * such as during a yyrestart() or at EOF. + */ + static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) + +{ + int oerrno = errno; + + yy_flush_buffer( b ); + + b->yy_input_file = file; + b->yy_fill_buffer = 1; + + /* If b is the current buffer, then yy_init_buffer was _probably_ + * called from yyrestart() or through yy_get_next_buffer. + * In that case, we don't want to reset the lineno or column. + */ + if (b != YY_CURRENT_BUFFER){ + b->yy_bs_lineno = 1; + b->yy_bs_column = 0; + } + + b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; + + errno = oerrno; +} + +/** Discard all buffered characters. On the next scan, YY_INPUT will be called. + * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. + * + */ + void yy_flush_buffer (YY_BUFFER_STATE b ) +{ + if ( ! b ) + return; + + b->yy_n_chars = 0; + + /* We always need two end-of-buffer characters. The first causes + * a transition to the end-of-buffer state. The second causes + * a jam in that state. + */ + b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; + b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; + + b->yy_buf_pos = &b->yy_ch_buf[0]; + + b->yy_at_bol = 1; + b->yy_buffer_status = YY_BUFFER_NEW; + + if ( b == YY_CURRENT_BUFFER ) + yy_load_buffer_state( ); +} + +/** Pushes the new state onto the stack. The new state becomes + * the current state. This function will allocate the stack + * if necessary. + * @param new_buffer The new state. + * + */ +void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) +{ + if (new_buffer == NULL) + return; + + yyensure_buffer_stack(); + + /* This block is copied from yy_switch_to_buffer. */ + if ( YY_CURRENT_BUFFER ) + { + /* Flush out information for old buffer. */ + *(yy_c_buf_p) = (yy_hold_char); + YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); + YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); + } + + /* Only push if top exists. Otherwise, replace top. */ + if (YY_CURRENT_BUFFER) + (yy_buffer_stack_top)++; + YY_CURRENT_BUFFER_LVALUE = new_buffer; + + /* copied from yy_switch_to_buffer. */ + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; +} + +/** Removes and deletes the top of the stack, if present. + * The next element becomes the new top. + * + */ +void yypop_buffer_state (void) +{ + if (!YY_CURRENT_BUFFER) + return; + + yy_delete_buffer(YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + if ((yy_buffer_stack_top) > 0) + --(yy_buffer_stack_top); + + if (YY_CURRENT_BUFFER) { + yy_load_buffer_state( ); + (yy_did_buffer_switch_on_eof) = 1; + } +} + +/* Allocates the stack if it does not exist. + * Guarantees space for at least one push. + */ +static void yyensure_buffer_stack (void) +{ + yy_size_t num_to_alloc; + + if (!(yy_buffer_stack)) { + + /* First allocation is just for 2 elements, since we don't know if this + * scanner will even need a stack. We use 2 instead of 1 to avoid an + * immediate realloc on the next call. + */ + num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ + (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc + (num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); + + (yy_buffer_stack_max) = num_to_alloc; + (yy_buffer_stack_top) = 0; + return; + } + + if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ + + /* Increase the buffer to prepare for a possible push. */ + yy_size_t grow_size = 8 /* arbitrary grow size */; + + num_to_alloc = (yy_buffer_stack_max) + grow_size; + (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc + ((yy_buffer_stack), + num_to_alloc * sizeof(struct yy_buffer_state*) + ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + + /* zero only the new slots.*/ + memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); + (yy_buffer_stack_max) = num_to_alloc; + } +} + +/** Setup the input buffer state to scan directly from a user-specified character buffer. + * @param base the character buffer + * @param size the size in bytes of the character buffer + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) +{ + YY_BUFFER_STATE b; + + if ( size < 2 || + base[size-2] != YY_END_OF_BUFFER_CHAR || + base[size-1] != YY_END_OF_BUFFER_CHAR ) + /* They forgot to leave room for the EOB's. */ + return NULL; + + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); + if ( ! b ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); + + b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ + b->yy_buf_pos = b->yy_ch_buf = base; + b->yy_is_our_buffer = 0; + b->yy_input_file = NULL; + b->yy_n_chars = b->yy_buf_size; + b->yy_is_interactive = 0; + b->yy_at_bol = 1; + b->yy_fill_buffer = 0; + b->yy_buffer_status = YY_BUFFER_NEW; + + yy_switch_to_buffer( b ); + + return b; +} + +/** Setup the input buffer state to scan a string. The next call to yylex() will + * scan from a @e copy of @a str. + * @param yystr a NUL-terminated string to scan + * + * @return the newly allocated buffer state object. + * @note If you want to scan bytes that may contain NUL values, then use + * yy_scan_bytes() instead. + */ +YY_BUFFER_STATE yy_scan_string (const char * yystr ) +{ + + return yy_scan_bytes( yystr, (int) strlen(yystr) ); +} + +/** Setup the input buffer state to scan the given bytes. The next call to yylex() will + * scan from a @e copy of @a bytes. + * @param yybytes the byte buffer to scan + * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. + * + * @return the newly allocated buffer state object. + */ +YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len ) +{ + YY_BUFFER_STATE b; + char *buf; + yy_size_t n; + int i; + + /* Get memory for full buffer, including space for trailing EOB's. */ + n = (yy_size_t) (_yybytes_len + 2); + buf = (char *) yyalloc( n ); + if ( ! buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); + + for ( i = 0; i < _yybytes_len; ++i ) + buf[i] = yybytes[i]; + + buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; + + b = yy_scan_buffer( buf, n ); + if ( ! b ) + YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); + + /* It's okay to grow etc. this buffer, and we should throw it + * away when we're done. + */ + b->yy_is_our_buffer = 1; + + return b; +} + +#ifndef YY_EXIT_FAILURE +#define YY_EXIT_FAILURE 2 +#endif + +static void yynoreturn yy_fatal_error (const char* msg ) +{ + fprintf( stderr, "%s\n", msg ); + exit( YY_EXIT_FAILURE ); +} + +/* Redefine yyless() so it works in section 3 code. */ + +#undef yyless +#define yyless(n) \ + do \ + { \ + /* Undo effects of setting up yytext. */ \ + int yyless_macro_arg = (n); \ + YY_LESS_LINENO(yyless_macro_arg);\ + yytext[yyleng] = (yy_hold_char); \ + (yy_c_buf_p) = yytext + yyless_macro_arg; \ + (yy_hold_char) = *(yy_c_buf_p); \ + *(yy_c_buf_p) = '\0'; \ + yyleng = yyless_macro_arg; \ + } \ + while ( 0 ) + +/* Accessor methods (get/set functions) to struct members. */ + +/** Get the current line number. + * + */ +int yyget_lineno (void) +{ + + return yylineno; +} + +/** Get the input stream. + * + */ +FILE *yyget_in (void) +{ + return yyin; +} + +/** Get the output stream. + * + */ +FILE *yyget_out (void) +{ + return yyout; +} + +/** Get the length of the current token. + * + */ +int yyget_leng (void) +{ + return yyleng; +} + +/** Get the current token. + * + */ + +char *yyget_text (void) +{ + return yytext; +} + +/** Set the current line number. + * @param _line_number line number + * + */ +void yyset_lineno (int _line_number ) +{ + + yylineno = _line_number; +} + +/** Set the input stream. This does not discard the current + * input buffer. + * @param _in_str A readable stream. + * + * @see yy_switch_to_buffer + */ +void yyset_in (FILE * _in_str ) +{ + yyin = _in_str ; +} + +void yyset_out (FILE * _out_str ) +{ + yyout = _out_str ; +} + +int yyget_debug (void) +{ + return yy_flex_debug; +} + +void yyset_debug (int _bdebug ) +{ + yy_flex_debug = _bdebug ; +} + +static int yy_init_globals (void) +{ + /* Initialization is the same as for the non-reentrant scanner. + * This function is called from yylex_destroy(), so don't allocate here. + */ + + (yy_buffer_stack) = NULL; + (yy_buffer_stack_top) = 0; + (yy_buffer_stack_max) = 0; + (yy_c_buf_p) = NULL; + (yy_init) = 0; + (yy_start) = 0; + +/* Defined in main.c */ +#ifdef YY_STDINIT + yyin = stdin; + yyout = stdout; +#else + yyin = NULL; + yyout = NULL; +#endif + + /* For future reference: Set errno on error, since we are called by + * yylex_init() + */ + return 0; +} + +/* yylex_destroy is for both reentrant and non-reentrant scanners. */ +int yylex_destroy (void) +{ + + /* Pop the buffer stack, destroying each element. */ + while(YY_CURRENT_BUFFER){ + yy_delete_buffer( YY_CURRENT_BUFFER ); + YY_CURRENT_BUFFER_LVALUE = NULL; + yypop_buffer_state(); + } + + /* Destroy the stack itself. */ + yyfree((yy_buffer_stack) ); + (yy_buffer_stack) = NULL; + + /* Reset the globals. This is important in a non-reentrant scanner so the next time + * yylex() is called, initialization will occur. */ + yy_init_globals( ); + + return 0; +} + +/* + * Internal utility routines. + */ + +#ifndef yytext_ptr +static void yy_flex_strncpy (char* s1, const char * s2, int n ) +{ + + int i; + for ( i = 0; i < n; ++i ) + s1[i] = s2[i]; +} +#endif + +#ifdef YY_NEED_STRLEN +static int yy_flex_strlen (const char * s ) +{ + int n; + for ( n = 0; s[n]; ++n ) + ; + + return n; +} +#endif + +void *yyalloc (yy_size_t size ) +{ + return malloc(size); +} + +void *yyrealloc (void * ptr, yy_size_t size ) +{ + + /* The cast to (char *) in the following accommodates both + * implementations that use char* generic pointers, and those + * that use void* generic pointers. It works with the latter + * because both ANSI C and C++ allow castless assignment from + * any pointer type to void*, and deal with argument conversions + * as though doing an assignment. + */ + return realloc(ptr, size); +} + +void yyfree (void * ptr ) +{ + free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ +} + +#define YYTABLES_NAME "yytables" + +#line 55 "lang.lxi" + + +int main(int argc, char **argv) { + if (argc < 3) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return 1; + } + // Open input and output files + yyin = fopen(argv[1], "r"); + if (!yyin) { + perror("Failed to open input file"); + return 1; + } + + yyout = fopen(argv[2], "w"); + if (!yyout) { + perror("Failed to open output file"); + fclose(yyin); + return 1; + } + + + + int token; + while ((token = yylex()) != 0) { + // Process tokens + } + fclose(yyin); + fclose(yyout); + yyin = fopen(argv[1], "r"); + if (!yyin) { + perror("Failed to open input file"); + return 1; + } + + yyout = stdout; + if (!yyout) { + perror("Failed to open output file"); + fclose(yyin); + return 1; + } + + // Close files + // printf("%d\n", yylex()); + // printf("%d\n", yylex()); + // printf("%d\n", yylex()); + // printf("%d\n", yylex()); + + yydebug = 1; + if (yyparse() == 0) { + printf("Parsing successful\n"); + } else { + printf("Parsing failed\n"); + } + fclose(yyin); + fclose(yyout); + return 0; +} + diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/main.py b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/main.py new file mode 100644 index 0000000..dbc9e24 --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/main.py @@ -0,0 +1,22 @@ +#test the symbol table +from SymbolTable import SymbolTable + +def main(): + symbol_table = SymbolTable() + symbol_table.addIdentifier("a", 0) + symbol_table.addIdentifier("ba", 1) + symbol_table.addIdentifier("ab", 2) + print(symbol_table.getIdentifier("a")) + print(symbol_table.getIdentifier("ba")) + print(symbol_table.getIdentifier("ab")) + print(symbol_table.getPositionIdentifier("a")) + print(symbol_table.getPositionIdentifier("ba")) + print(symbol_table.getPositionIdentifier("ab")) + print(symbol_table.getIdentifier("d")) + print(symbol_table.getPositionIdentifier("d")) + symbol_table.addIdentifier("d", 4) + print(symbol_table.getIdentifier("d")) + print(symbol_table.getPositionIdentifier("d")) + +if __name__ == "__main__": + main() diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/out1.txt b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/out1.txt new file mode 100644 index 0000000..d42705e --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/out1.txt @@ -0,0 +1,16 @@ +CLASS +IDENTIFIER Main +LBRACE +SIMPLETYPE +ENTRY +IDENTIFIER Main +LPAREN +RPAREN +LBRACE +WRITE +LPAREN +CONSTANTEXP 1 +RPAREN +SEMICOLON +RBRACE +RBRACE diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/p1.in b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/p1.in new file mode 100644 index 0000000..343da3a --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/p1.in @@ -0,0 +1,5 @@ +class Main{ + void entry Main(){ + write(1); + } +} \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/p1error.in b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/p1error.in new file mode 100644 index 0000000..b79f6be --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/p1error.in @@ -0,0 +1,7 @@ +class Main{ + + Problem1err(number, power){ + return 01 ** power + } +} + diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/p2.in b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/p2.in new file mode 100644 index 0000000..a482a0a --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/p2.in @@ -0,0 +1,23 @@ +class Main{ + void entry Main(){ + Problem2([3,5,7,2]) + } + + int Problem2(int[] numbers){ + var prod = 0; + int index = 0; + while(index < numbers.lenght){ + int number = numbers[index]; + prod *= number; + } + index = index + 1; + return prod; + } + + void Problem3(int[] numbers1, int[] numbers2){ + while(index < numbers.lenght){ + numbers1[index] = numbers1[index] + numbers2[index]; + index = index + 1; + } + } +} \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/p3.in b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/p3.in new file mode 100644 index 0000000..7ee751a --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/p3.in @@ -0,0 +1,16 @@ +class Main{ + void entry Main(){ + int[] x = [3,5,7,2] + Problem3(x,[8,4,2,8]) + + } + void Problem3(int[] numbers1, int[] numbers2){ + while(index < numbers.lenght){ + numbers1[index] = numbers1[index] + numbers2[index]; + index = index + 1; + } + } + Problem1err(number, power){ + return number ** power + } +} diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/test.in b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/test.in new file mode 100644 index 0000000..1e88aff --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/test.in @@ -0,0 +1 @@ +class \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Formal Languages and Compiler Design/tokens.in b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/tokens.in new file mode 100644 index 0000000..c12b1f7 --- /dev/null +++ b/Anul 3/Semestrul 1/Formal Languages and Compiler Design/tokens.in @@ -0,0 +1,32 @@ ++ +- +* +/ +[ + +{ +} +( +) +; +] += +< +> +<= +>= +== +; +, +. +int +char +class +if +while +read +write +entry +return +null +void \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/.gitignore b/Anul 3/Semestrul 1/Mobile Applications/.gitignore new file mode 100644 index 0000000..ab40c51 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/.gitignore @@ -0,0 +1,89 @@ +# Gradle files +.gradle/ +build/ +!gradle/wrapper/gradle-wrapper.jar +.gradle/ +**/build/ +**/out/ +**/buildSrc/build/ +**/buildSrc/.gradle/ +**/local.properties + +# Android Studio files +.idea/ +*.iml +*.hprof +*.orig +*.log +*.lock +*.pyc +*.swp +*.swo +*.class +*.jar +*.war +*.ear +*.db +*.sqlite +*.apk +*.ap_ +*.dex +*.class +*.so +*.dll +*.pdb +*.o +*.a +*.lib +*.nib +*.plist +*.hmap +*.ipa +*.xcuserstate +*.xcuserdatad +*.xcworkspace +*.xcuserdata +*.xcodeproj +*.xcodeproj/project.xcworkspace +*.xcodeproj/xcuserdata +*.xcodeproj/xcuserdata/*.xcuserdatad +*.xcodeproj/xcuserdata/*.xcuserdatad/xcschemes + +# built application files +*.apk +*.ap_ + +# Mac files +.DS_Store + +# files for the dex VM +*.dex + +# Java class files +*.class + +# generated files +bin/ +gen/ + +# Ignore gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ +proguard-project.txt + +# Eclipse files +.project +.classpath +.settings/ + +# Android Studio/IDEA +*.iml +.idea +.kotlin/ +node_modules/ \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/.gitignore b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/.gitignore b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/build.gradle.kts b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/build.gradle.kts new file mode 100644 index 0000000..d9e0c69 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/build.gradle.kts @@ -0,0 +1,59 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.compose) +} + +android { + namespace = "com.example.ma_ui_native" + compileSdk = 34 + + defaultConfig { + applicationId = "com.example.ma_ui_native" + minSdk = 34 + targetSdk = 34 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + kotlinOptions { + jvmTarget = "11" + } + buildFeatures { + compose = true + } +} + +dependencies { + + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.lifecycle.runtime.ktx) + implementation(libs.androidx.activity.compose) + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.ui) + implementation(libs.androidx.ui.graphics) + implementation(libs.androidx.ui.tooling.preview) + implementation(libs.androidx.material3) + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) + androidTestImplementation(platform(libs.androidx.compose.bom)) + androidTestImplementation(libs.androidx.ui.test.junit4) + debugImplementation(libs.androidx.ui.tooling) + debugImplementation(libs.androidx.ui.test.manifest) +} \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/proguard-rules.pro b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/androidTest/java/com/example/ma_ui_native/ExampleInstrumentedTest.kt b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/androidTest/java/com/example/ma_ui_native/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..e51e25e --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/androidTest/java/com/example/ma_ui_native/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.example.ma_ui_native + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.example.ma_ui_native", appContext.packageName) + } +} \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/AndroidManifest.xml b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..dd8d5a4 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/Drug.kt b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/Drug.kt new file mode 100644 index 0000000..8b549d4 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/Drug.kt @@ -0,0 +1,15 @@ +package com.example.ma_ui_native + +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.mutableStateOf + +data class Drug( + var Id: Int = -1, + var Name: String = "", + var Category: String = "", + var NumberOfUnits: Int = 0, + var RetailPrice: Double = 0.0, + var Manufacturer: String = "" +){ + +} \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/DrugViewModel.java b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/DrugViewModel.java new file mode 100644 index 0000000..076db51 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/DrugViewModel.java @@ -0,0 +1,5 @@ +package com.example.ma_ui_native; + +public class DrugViewModel { + +} diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/MainActivity.kt b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/MainActivity.kt new file mode 100644 index 0000000..9957cbf --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/MainActivity.kt @@ -0,0 +1,300 @@ +package com.example.ma_ui_native + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.util.Log +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Edit +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonColors +import androidx.compose.material3.FloatingActionButton +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.unit.dp +import com.example.ma_ui_native.ui.theme.MAUINativeTheme + +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContent { + MAUINativeTheme { + val openDialog = remember { mutableStateOf(false) } + val dialogId = remember { mutableStateOf(-1) } + if(openDialog.value){ + DeleteDialog( + dialogId.value, + onConfirm = { + Service.DeleteDrug(dialogId.value) + openDialog.value = false + }, + onDismiss = { + openDialog.value = false + } + ) + } + DrugList({ + openDialog.value = true + dialogId.value = it + }) + Column( + modifier = Modifier + .padding(48.dp) + .fillMaxSize(), + verticalArrangement = Arrangement.Bottom, + horizontalAlignment = Alignment.End, + ) { + val context = LocalContext.current + FAB(onClick = { + context.startActivity(Intent(context, SecondActivity::class.java)) + }) + + } + + } + } + } +} + + +@Composable +fun FAB(onClick: () -> Unit) { + FloatingActionButton( + onClick = { onClick() }, + shape = CircleShape, + contentColor = MaterialTheme.colorScheme.onPrimary, + containerColor = MaterialTheme.colorScheme.primary, + ) { + Icon(Icons.Outlined.Edit, "Floating action button.") + } +} + +@Composable +fun DrugList(onDelete: (Int) -> Unit){ + LazyColumn( + modifier = Modifier + .background(MaterialTheme.colorScheme.surface) + .padding(top = 75.5.dp, bottom = 23.5.dp, start = 26.dp, end = 26.dp) + .fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy((10.dp)) + ){ + items( + Service.GetDrugs(), + key = { it.value.Id}, + ){ + DrugDisplay(it.value, onDelete) + } + } +} + +@Composable +fun DrugDisplay(drug: Drug, onDelete: (Int) -> Unit){ + Box { + Box( + modifier = Modifier + .matchParentSize() + .background(MaterialTheme.colorScheme.surface, RoundedCornerShape((12.dp))) + .border(1.dp, MaterialTheme.colorScheme.outlineVariant, RoundedCornerShape(12.dp)) + ) + Column( + modifier = Modifier + .fillMaxSize() + ) { + Row( + modifier = Modifier + .padding(top = 16.dp, start = 16.dp, end = 16.dp, bottom = 7.dp) + .fillMaxWidth() + .height(44.dp), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Column { + Text(drug.Name, color = MaterialTheme.colorScheme.onSurface, style = MaterialTheme.typography.bodyLarge) + Text(drug.Manufacturer, color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodyMedium) + } + Row( + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + val context = LocalContext.current + Button( + onClick = { GoToUpdate(drug.Id, context) }, + colors = ButtonColors( + MaterialTheme.colorScheme.surface, + MaterialTheme.colorScheme.primary, + MaterialTheme.colorScheme.surface, + MaterialTheme.colorScheme.primary + ), + border = BorderStroke(1.dp, MaterialTheme.colorScheme.outline) + ) { + Text("Edit") + } + Button( + onClick = { onDelete(drug.Id) }, + colors = ButtonColors( + MaterialTheme.colorScheme.primary, + MaterialTheme.colorScheme.onPrimary, + MaterialTheme.colorScheme.primary, + MaterialTheme.colorScheme.onPrimary + ), + ) { + Text("Delete") + } + } + } + HorizontalDivider( + modifier = Modifier.padding(start = 16.dp, end = 16.dp, bottom = 7.dp) + ) + Row( + modifier = Modifier + .padding(start = 16.dp, end = 16.dp, bottom = 7.dp) + .shadow(2.dp, shape = RoundedCornerShape(12.dp)) + .fillMaxWidth() + .height(44.dp) + .background(MaterialTheme.colorScheme.surfaceContainer, shape = RoundedCornerShape(12.dp)) + ) { + Box( + modifier = Modifier + .fillMaxHeight() + .background(MaterialTheme.colorScheme.primary, shape = RoundedCornerShape(topStart = 12.dp, bottomStart = 12.dp)) + .fillMaxWidth(0.38f), + ) { + Text("Category:", color = MaterialTheme.colorScheme.onPrimary, modifier = Modifier.align(Alignment.Center), style = MaterialTheme.typography.titleSmall) + } + Box( + modifier = Modifier + .fillMaxHeight() + .fillMaxWidth(0.62f), + ) { + Text(drug.Category, color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.align(Alignment.Center), style = MaterialTheme.typography.bodyMedium) + } + } + Row( + modifier = Modifier + .padding(start = 16.dp, end = 16.dp, bottom = 7.dp) + .shadow(2.dp, shape = RoundedCornerShape(12.dp)) + .fillMaxWidth() + .height(44.dp) + .background(MaterialTheme.colorScheme.surfaceContainer, shape = RoundedCornerShape(12.dp)) + ) { + Box( + modifier = Modifier + .fillMaxHeight() + .background(MaterialTheme.colorScheme.primary, shape = RoundedCornerShape(topStart = 12.dp, bottomStart = 12.dp)) + .fillMaxWidth(0.38f), + ) { + Text("# of Units:", color = MaterialTheme.colorScheme.onPrimary, modifier = Modifier.align(Alignment.Center), style = MaterialTheme.typography.titleSmall) + } + Box( + modifier = Modifier + .fillMaxHeight() + .fillMaxWidth(0.62f), + ) { + Text(drug.NumberOfUnits.toString(), color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.align(Alignment.Center), style = MaterialTheme.typography.bodyMedium) + } + } + Row( + modifier = Modifier + .padding(start = 16.dp, end = 16.dp, bottom = 40.dp) + .shadow(2.dp, shape = RoundedCornerShape(12.dp)) + .fillMaxWidth() + .height(44.dp) + .background(MaterialTheme.colorScheme.surfaceContainer, shape = RoundedCornerShape(12.dp)) + ) { + Box( + modifier = Modifier + .fillMaxHeight() + .background(MaterialTheme.colorScheme.primary, shape = RoundedCornerShape(topStart = 12.dp, bottomStart = 12.dp)) + .fillMaxWidth(0.38f), + ) { + Text("Price:", color = MaterialTheme.colorScheme.onPrimary, modifier = Modifier.align(Alignment.Center), style = MaterialTheme.typography.titleSmall) + } + Box( + modifier = Modifier + .fillMaxHeight() + .fillMaxWidth(0.62f), + ) { + Text("$%.2f".format(drug.RetailPrice), color = MaterialTheme.colorScheme.onSurfaceVariant, modifier = Modifier.align(Alignment.Center), style = MaterialTheme.typography.bodyMedium) + } + } + + } + } + +} + + +fun GoToUpdate(id: Int, context: Context){ + Log.d("Update", "Update for %d was clicked".format(id)) + val bundle = Bundle() + bundle.putInt("id", id) + val intend = Intent(context, SecondActivity::class.java) + intend.putExtras(bundle) + context.startActivity(intend) +} + +@Composable +fun DeleteDialog(id: Int, onConfirm: () -> Unit, onDismiss: () -> Unit) { + AlertDialog( + onDismissRequest = { + onDismiss() + }, + title = { + Text("Delete Drug") + }, + text = { + Text("Are you sure you want to delete this drug? This action can not be reversed") + }, + confirmButton = { + Button( + onClick = { + onConfirm() + } + ) { + Text("Delete") + } + }, + dismissButton = { + Button( + onClick = { + onDismiss() + } + ) { + Text("Cancel") + } + } + ) +} diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/SecondActivity.kt b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/SecondActivity.kt new file mode 100644 index 0000000..f6e67c5 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/SecondActivity.kt @@ -0,0 +1,273 @@ +package com.example.ma_ui_native + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Clear +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonColors +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextField +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.unit.dp +import com.example.ma_ui_native.ui.theme.MAUINativeTheme + +class SecondActivity : ComponentActivity() { + private var drug = Drug() + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + if(intent.hasExtra("id")) { + val id = intent.getIntExtra("id", -1) + if(id != -1) { + drug = Service.GetDrug(id) + } + } + enableEdgeToEdge() + setContent { + MAUINativeTheme { + Column ( + modifier = Modifier + .background(MaterialTheme.colorScheme.surface) + .padding(top = 63.dp, start = 62.dp, end = 62.dp, bottom = 73.dp) + .fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + ) + { + Row( + modifier = Modifier + .padding(bottom = 25.dp, start = 61.dp, end = 61.dp) + .fillMaxWidth() + .height(49.dp) + .border( + 1.dp, + color = MaterialTheme.colorScheme.outlineVariant, + shape = RoundedCornerShape(8.dp) + ), + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically + ) { + Text(if(drug.Id == -1) "Add Drug" else "Update Drug", color = MaterialTheme.colorScheme.onSurface, style = MaterialTheme.typography.labelLarge) + } + Column( + modifier = Modifier + .padding(bottom = 30.dp) + .fillMaxWidth() + ) { + val drugName = remember { mutableStateOf(drug.Name) } + TextField( + value = drugName.value, + onValueChange = { + drugName.value = it + drug.Name = it + }, + label = {Text("Name")}, + singleLine = true, + trailingIcon = { + IconButton( + onClick = { + drugName.value = "" + drug.Name = "" + } + ) + { + Icon( + Icons.Filled.Clear, + contentDescription = "Clear", + ) + } }, + supportingText = { Text(text = "*required", color = MaterialTheme.colorScheme.error) }, + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + + ) + + val drugManufacturer = remember { mutableStateOf(drug.Manufacturer) } + TextField( + value = drugManufacturer.value, + onValueChange = { + drugManufacturer.value = it + drug.Manufacturer = it + }, + label = {Text("Manufacturer")}, + singleLine = true, + trailingIcon = { + IconButton( + onClick = { + drugManufacturer.value = "" + drug.Manufacturer = "" + } + ) + { + Icon( + Icons.Filled.Clear, + contentDescription = "Clear", + ) + } }, + supportingText = { Text(text = "*required", color = MaterialTheme.colorScheme.error) }, + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + + ) + + val drugCategory = remember { mutableStateOf(drug.Category) } + TextField( + value = drugCategory.value, + onValueChange = { + drugCategory.value = it + drug.Category = it + }, + label = {Text("Category")}, + singleLine = true, + trailingIcon = { + IconButton( + onClick = { + drugCategory.value = "" + drug.Category = "" + } + ) + { + Icon( + Icons.Filled.Clear, + contentDescription = "Clear", + ) + } }, + supportingText = { Text(text = "*required", color = MaterialTheme.colorScheme.error) }, + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + + ) + + val drugNumberOfUnits = remember { mutableStateOf(drug.NumberOfUnits.toString()) } + if (drugNumberOfUnits.value == "0") { + drugNumberOfUnits.value = "" + } + TextField( + value = drugNumberOfUnits.value, + onValueChange = { + drugNumberOfUnits.value = it + drug.NumberOfUnits = it.toIntOrNull() ?: 0 + }, + label = {Text("Number of Units")}, + singleLine = true, + trailingIcon = { + IconButton( + onClick = { + drugNumberOfUnits.value = "" + drug.NumberOfUnits = 0 + } + ) + { + Icon( + Icons.Filled.Clear, + contentDescription = "Clear", + ) + } }, + supportingText = { Text(text = "*required", color = MaterialTheme.colorScheme.error) }, + keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Number), + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + + ) + + val drugRetailPrice = remember { mutableStateOf(drug.RetailPrice.toString()) } + if (drugRetailPrice.value == "0.0") { + drugRetailPrice.value = "" + } + TextField( + value = drugRetailPrice.value, + onValueChange = { + drugRetailPrice.value = it + drug.RetailPrice = (it.toDoubleOrNull() ?: 0.0) + }, + label = {Text("Retail Price")}, + singleLine = true, + trailingIcon = { + IconButton( + onClick = { + drugRetailPrice.value = "" + drug.RetailPrice = 0.0 + } + ) + { + Icon( + Icons.Filled.Clear, + contentDescription = "Clear", + ) + } }, + supportingText = { Text(text = "*required", color = MaterialTheme.colorScheme.error) }, + prefix = { Text("$") }, + keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Number), + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + + ) + + } + Row( + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + Button( + onClick = { finish() }, + colors = ButtonColors( + MaterialTheme.colorScheme.surface, + MaterialTheme.colorScheme.primary, + MaterialTheme.colorScheme.surface, + MaterialTheme.colorScheme.primary + ), + border = BorderStroke(1.dp, MaterialTheme.colorScheme.outline) + ) { + Text("Cancel") + } + Button( + onClick = { + if(drug.Id == -1) { + Service.AddDrug(drug) + } else { + Service.UpdateDrug(drug) + } + finish() + }, + colors = ButtonColors( + MaterialTheme.colorScheme.primary, + MaterialTheme.colorScheme.onPrimary, + MaterialTheme.colorScheme.onSurfaceVariant, + MaterialTheme.colorScheme.onSurface + ), + enabled = drug.Name.isNotEmpty() && drug.Manufacturer.isNotEmpty() && drug.Category.isNotEmpty() && drug.NumberOfUnits > 0 && drug.RetailPrice > 0.0 + ) { + Text(if(drug.Id == -1) "Add" else "Update") + } + } + } + + } + } + } + +} diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/Service.kt b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/Service.kt new file mode 100644 index 0000000..da41bac --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/Service.kt @@ -0,0 +1,49 @@ +package com.example.ma_ui_native + +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.snapshots.SnapshotStateList + +object Service { + private var nextId = 11 + private val DrugRepo = mutableStateListOf>( + mutableStateOf( Drug(1, "Paracetamol", "Analgesic", 100, 2.5, "GSK")), + mutableStateOf(Drug(2, "Amoxicillin", "Antibiotic", 50, 3.5, "Pfizer")), + mutableStateOf(Drug(3, "Omeprazole", "Antacid", 75, 1.5, "AstraZeneca")), + mutableStateOf(Drug(4, "Atorvastatin", "Anticholesterol", 25, 4.5, "Pfizer")), + mutableStateOf(Drug(5, "Metformin", "Antidiabetic", 30, 2.0, "Merck")), + mutableStateOf(Drug(6, "Amlodipine", "Antihypertensive", 40, 3.0, "Novartis")), + mutableStateOf(Drug(7, "Losartan", "Antihypertensive", 35, 3.5, "Merck")), + mutableStateOf(Drug(8, "Simvastatin", "Anticholesterol", 20, 4.0, "AstraZeneca")), + mutableStateOf(Drug(9, "Salbutamol", "Bronchodilator", 45, 2.5, "GSK")), + mutableStateOf(Drug(10, "Levothyroxine", "Hormone", 60, 1.5, "Novartis")) + ) + public fun GetDrugs() : SnapshotStateList> { + return DrugRepo; + } + + public fun GetDrug(id: Int) : Drug { + return DrugRepo.find { it.value.Id == id }?.value ?: Drug() + } + + public fun AddDrug(drug: Drug) { + drug.Id = nextId++ + DrugRepo.add(mutableStateOf( drug)) + } + + public fun UpdateDrug(drug: Drug) { + val index = DrugRepo.indexOfFirst { it.value.Id == drug.Id } + if (index != -1) { + DrugRepo[index] = mutableStateOf( drug) + } + } + + public fun DeleteDrug(id: Int) { + val index = DrugRepo.indexOfFirst { it.value.Id == id } + if (index != -1) { + DrugRepo.removeAt(index) + } + } + +} \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/ui/theme/Color.kt b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/ui/theme/Color.kt new file mode 100644 index 0000000..2ffddfc --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/ui/theme/Color.kt @@ -0,0 +1,14 @@ +package com.example.ma_ui_native.ui.theme + +import androidx.compose.ui.graphics.Color + +var Primary = Color(0xFF675496) +var OnPrimary = Color(0xFFFFFFFF) + +val Purple80 = Color(0xFFD0BCFF) +val PurpleGrey80 = Color(0xFFCCC2DC) +val Pink80 = Color(0xFFEFB8C8) + +val Purple40 = Color(0xFF6650a4) +val PurpleGrey40 = Color(0xFF625b71) +val Pink40 = Color(0xFF7D5260) \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/ui/theme/Theme.kt b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/ui/theme/Theme.kt new file mode 100644 index 0000000..7720743 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/ui/theme/Theme.kt @@ -0,0 +1,58 @@ +package com.example.ma_ui_native.ui.theme + +import android.app.Activity +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext + +private val DarkColorScheme = darkColorScheme( + primary = Purple80, + secondary = PurpleGrey80, + tertiary = Pink80 +) + +private val LightColorScheme = lightColorScheme( + primary = Purple40, + secondary = PurpleGrey40, + tertiary = Pink40 + + /* Other default colors to override + background = Color(0xFFFFFBFE), + surface = Color(0xFFFFFBFE), + onPrimary = Color.White, + onSecondary = Color.White, + onTertiary = Color.White, + onBackground = Color(0xFF1C1B1F), + onSurface = Color(0xFF1C1B1F), + */ +) + +@Composable +fun MAUINativeTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + // Dynamic color is available on Android 12+ + dynamicColor: Boolean = true, + content: @Composable () -> Unit +) { + val colorScheme = when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + + darkTheme -> DarkColorScheme + else -> LightColorScheme + } + + MaterialTheme( + colorScheme = colorScheme, + typography = Typography, + content = content + ) +} \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/ui/theme/Type.kt b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/ui/theme/Type.kt new file mode 100644 index 0000000..adf31f8 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/java/com/example/ma_ui_native/ui/theme/Type.kt @@ -0,0 +1,34 @@ +package com.example.ma_ui_native.ui.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = Typography( + bodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ) + /* Other default text styles to override + titleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp + ), + labelSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ) + */ +) \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/drawable/cancel.xml b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/drawable/cancel.xml new file mode 100644 index 0000000..5b2ab61 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/drawable/cancel.xml @@ -0,0 +1,9 @@ + + + diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/drawable/ic_launcher_background.xml b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/drawable/ic_launcher_foreground.xml b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-anydpi/ic_launcher.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-anydpi/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..c209e78ecd372343283f4157dcfd918ec5165bb3 GIT binary patch literal 1404 zcmV-?1%vuhNk&F=1pok7MM6+kP&il$0000G0000-002h-06|PpNX!5L00Dqw+t%{r zzW2vH!KF=w&cMnnN@{whkTw+#mAh0SV?YL=)3MimFYCWp#fpdtz~8$hD5VPuQgtcN zXl<@<#Cme5f5yr2h%@8TWh?)bSK`O z^Z@d={gn7J{iyxL_y_%J|L>ep{dUxUP8a{byupH&!UNR*OutO~0{*T4q5R6@ApLF! z5{w?Z150gC7#>(VHFJZ-^6O@PYp{t!jH(_Z*nzTK4 zkc{fLE4Q3|mA2`CWQ3{8;gxGizgM!zccbdQoOLZc8hThi-IhN90RFT|zlxh3Ty&VG z?Fe{#9RrRnxzsu|Lg2ddugg7k%>0JeD+{XZ7>Z~{=|M+sh1MF7~ zz>To~`~LVQe1nNoR-gEzkpe{Ak^7{{ZBk2i_<+`Bq<^GB!RYG+z)h;Y3+<{zlMUYd zrd*W4w&jZ0%kBuDZ1EW&KLpyR7r2=}fF2%0VwHM4pUs}ZI2egi#DRMYZPek*^H9YK zay4Iy3WXFG(F14xYsoDA|KXgGc5%2DhmQ1gFCkrgHBm!lXG8I5h*uf{rn48Z!_@ z4Bk6TJAB2CKYqPjiX&mWoW>OPFGd$wqroa($ne7EUK;#3VYkXaew%Kh^3OrMhtjYN?XEoY`tRPQsAkH-DSL^QqyN0>^ zmC>{#F14jz4GeW{pJoRpLFa_*GI{?T93^rX7SPQgT@LbLqpNA}<@2wH;q493)G=1Y z#-sCiRNX~qf3KgiFzB3I>4Z%AfS(3$`-aMIBU+6?gbgDb!)L~A)je+;fR0jWLL-Fu z4)P{c7{B4Hp91&%??2$v9iRSFnuckHUm}or9seH6 z>%NbT+5*@L5(I9j@06@(!{ZI?U0=pKn8uwIg&L{JV14+8s2hnvbRrU|hZCd}IJu7*;;ECgO%8_*W Kmw_-CKmY()leWbG literal 0 HcmV?d00001 diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..b2dfe3d1ba5cf3ee31b3ecc1ced89044a1f3b7a9 GIT binary patch literal 2898 zcmV-Y3$650Nk&FW3jhFDMM6+kP&il$0000G0000-002h-06|PpNWB9900E$G+qN-D z+81ABX7q?;bwx%xBg?kcwr$(C-Tex-ZCkHUw(Y9#+`E5-zuONG5fgw~E2WDng@Bc@ z24xy+R1n%~6xI#u9vJ8zREI)sb<&Il(016}Z~V1n^PU3-_H17A*Bf^o)&{_uBv}Py zulRfeE8g(g6HFhk_?o_;0@tz?1I+l+Y#Q*;RVC?(ud`_cU-~n|AX-b`JHrOIqn(-t&rOg-o`#C zh0LPxmbOAEb;zHTu!R3LDh1QO zZTf-|lJNUxi-PpcbRjw3n~n-pG;$+dIF6eqM5+L();B2O2tQ~|p{PlpNcvDbd1l%c zLtXn%lu(3!aNK!V#+HNn_D3lp z2%l+hK-nsj|Bi9;V*WIcQRTt5j90A<=am+cc`J zTYIN|PsYAhJ|=&h*4wI4ebv-C=Be#u>}%m;a{IGmJDU`0snWS&$9zdrT(z8#{OZ_Y zxwJx!ZClUi%YJjD6Xz@OP8{ieyJB=tn?>zaI-4JN;rr`JQbb%y5h2O-?_V@7pG_+y z(lqAsqYr!NyVb0C^|uclHaeecG)Sz;WV?rtoqOdAAN{j%?Uo%owya(F&qps@Id|Of zo@~Y-(YmfB+chv^%*3g4k3R0WqvuYUIA+8^SGJ{2Bl$X&X&v02>+0$4?di(34{pt* zG=f#yMs@Y|b&=HyH3k4yP&goF2LJ#tBLJNNDo6lG06r}ghC-pC4Q*=x3;|+W04zte zAl>l4kzUBQFYF(E`KJy?ZXd1tnfbH+Z~SMmA21KokJNs#eqcXWKUIC>{TuoKe^vhF z);H)o`t9j~`$h1D`#bxe@E`oE`cM9w(@)5Bp8BNukIwM>wZHfd0S;5bcXA*5KT3bj zc&_~`&{z7u{Et!Z_k78H75gXf4g8<_ul!H$eVspPeU3j&&Au=2R*Zp#M9$9s;fqwgzfiX=E_?BwVcfx3tG9Q-+<5fw z%Hs64z)@Q*%s3_Xd5>S4dg$s>@rN^ixeVj*tqu3ZV)biDcFf&l?lGwsa zWj3rvK}?43c{IruV2L`hUU0t^MemAn3U~x3$4mFDxj=Byowu^Q+#wKRPrWywLjIAp z9*n}eQ9-gZmnd9Y0WHtwi2sn6n~?i#n9VN1B*074_VbZZ=WrpkMYr{RsI ztM_8X1)J*DZejxkjOTRJ&a*lrvMKBQURNP#K)a5wIitfu(CFYV4FT?LUB$jVwJSZz zNBFTWg->Yk0j&h3e*a5>B=-xM7dE`IuOQna!u$OoxLlE;WdrNlN)1 z7**de7-hZ!(%_ZllHBLg`Ir#|t>2$*xVOZ-ADZKTN?{(NUeLU9GbuG-+Axf*AZ-P1 z0ZZ*fx+ck4{XtFsbcc%GRStht@q!m*ImssGwuK+P@%gEK!f5dHymg<9nSCXsB6 zQ*{<`%^bxB($Z@5286^-A(tR;r+p7B%^%$N5h%lb*Vlz-?DL9x;!j<5>~kmXP$E}m zQV|7uv4SwFs0jUervsxVUm>&9Y3DBIzc1XW|CUZrUdb<&{@D5yuLe%Xniw^x&{A2s z0q1+owDSfc3Gs?ht;3jw49c#mmrViUfX-yvc_B*wY|Lo7; zGh!t2R#BHx{1wFXReX*~`NS-LpSX z#TV*miO^~B9PF%O0huw!1Zv>^d0G3$^8dsC6VI!$oKDKiXdJt{mGkyA`+Gwd4D-^1qtNTUK)`N*=NTG-6}=5k6suNfdLt*dt8D| z%H#$k)z#ZRcf|zDWB|pn<3+7Nz>?WW9WdkO5(a^m+D4WRJ9{wc>Y}IN)2Kbgn;_O? zGqdr&9~|$Y0tP=N(k7^Eu;iO*w+f%W`20BNo)=Xa@M_)+o$4LXJyiw{F?a633SC{B zl~9FH%?^Rm*LVz`lkULs)%idDX^O)SxQol(3jDRyBVR!7d`;ar+D7do)jQ}m`g$TevUD5@?*P8)voa?kEe@_hl{_h8j&5eB-5FrYW&*FHVt$ z$kRF9Nstj%KRzpjdd_9wO=4zO8ritN*NPk_9avYrsF(!4))tm{Ga#OY z(r{0buexOzu7+rw8E08Gxd`LTOID{*AC1m*6Nw@osfB%0oBF5sf<~wH1kL;sd zo)k6^VyRFU`)dt*iX^9&QtWbo6yE8XXH?`ztvpiOLgI3R+=MOBQ9=rMVgi<*CU%+d1PQQ0a1U=&b0vkF207%xU0ssI2 literal 0 HcmV?d00001 diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..4f0f1d64e58ba64d180ce43ee13bf9a17835fbca GIT binary patch literal 982 zcmV;{11bDcNk&G_0{{S5MM6+kP&il$0000G0000l001ul06|PpNU8t;00Dqo+t#w^ z^1csucXz7-Qrhzl9HuHB%l>&>1tG2^vb*E&k^T3$FG1eQZ51g$uv4V+kI`0<^1Z@N zk?Jjh$olyC%l>)Xq;7!>{iBj&BjJ`P&$fsCfpve_epJOBkTF?nu-B7D!hO=2ZR}

C%4 zc_9eOXvPbC4kzU8YowIA8cW~Uv|eB&yYwAObSwL2vY~UYI7NXPvf3b+c^?wcs~_t{ ze_m66-0)^{JdOMKPwjpQ@Sna!*?$wTZ~su*tNv7o!gXT!GRgivP}ec?5>l1!7<(rT zds|8x(qGc673zrvYIz;J23FG{9nHMnAuP}NpAED^laz3mAN1sy+NXK)!6v1FxQ;lh zOBLA>$~P3r4b*NcqR;y6pwyhZ3_PiDb|%n1gGjl3ZU}ujInlP{eks-#oA6>rh&g+!f`hv#_%JrgYPu z(U^&XLW^QX7F9Z*SRPpQl{B%x)_AMp^}_v~?j7 zapvHMKxSf*Mtyx8I}-<*UGn3)oHd(nn=)BZ`d$lDBwq_GL($_TPaS{UeevT(AJ`p0 z9%+hQb6z)U9qjbuXjg|dExCLjpS8$VKQ55VsIC%@{N5t{NsW)=hNGI`J=x97_kbz@ E0Of=7!TQj4N+cqN`nQhxvX7dAV-`K|Ub$-q+H-5I?Tx0g9jWxd@A|?POE8`3b8fO$T))xP* z(X?&brZw({`)WU&rdAs1iTa0x6F@PIxJ&&L|dpySV!ID|iUhjCcKz(@mE z!x@~W#3H<)4Ae(4eQJRk`Iz3<1)6^m)0b_4_TRZ+cz#eD3f8V;2r-1fE!F}W zEi0MEkTTx}8i1{`l_6vo0(Vuh0HD$I4SjZ=?^?k82R51bC)2D_{y8mi_?X^=U?2|F{Vr7s!k(AZC$O#ZMyavHhlQ7 zUR~QXuH~#o#>(b$u4?s~HLF*3IcF7023AlwAYudn0FV~|odGH^05AYPEfR)8p`i{n zwg3zPVp{+wOsxKc>)(pMupKF!Y2HoUqQ3|Yu|8lwR=?5zZuhG6J?H`bSNk_wPoM{u zSL{c@pY7+c2kck>`^q1^^gR0QB7Y?KUD{vz-uVX~;V-rW)PDcI)$_UjgVV?S?=oLR zf4}zz{#*R_{LkiJ#0RdQLNC^2Vp%JPEUvG9ra2BVZ92(p9h7Ka@!yf9(lj#}>+|u* z;^_?KWdzkM`6gqPo9;;r6&JEa)}R3X{(CWv?NvgLeOTq$cZXqf7|sPImi-7cS8DCN zGf;DVt3Am`>hH3{4-WzH43Ftx)SofNe^-#|0HdCo<+8Qs!}TZP{HH8~z5n`ExcHuT zDL1m&|DVpIy=xsLO>8k92HcmfSKhflQ0H~9=^-{#!I1g(;+44xw~=* zxvNz35vfsQE)@)Zsp*6_GjYD};Squ83<_?^SbALb{a`j<0Gn%6JY!zhp=Fg}Ga2|8 z52e1WU%^L1}15Ex0fF$e@eCT(()_P zvV?CA%#Sy08_U6VPt4EtmVQraWJX` zh=N|WQ>LgrvF~R&qOfB$!%D3cGv?;Xh_z$z7k&s4N)$WYf*k=|*jCEkO19{h_(%W4 zPuOqbCw`SeAX*R}UUsbVsgtuG?xs(#Ikx9`JZoQFz0n*7ZG@Fv@kZk`gzO$HoA9kN z8U5{-yY zvV{`&WKU2$mZeoBmiJrEdzUZAv1sRxpePdg1)F*X^Y)zp^Y*R;;z~vOv-z&)&G)JQ{m!C9cmziu1^nHA z`#`0c>@PnQ9CJKgC5NjJD8HM3|KC(g5nnCq$n0Gsu_DXk36@ql%npEye|?%RmG)

FJ$wK}0tWNB{uH;AM~i literal 0 HcmV?d00001 diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..948a3070fe34c611c42c0d3ad3013a0dce358be0 GIT binary patch literal 1900 zcmV-y2b1_xNk&Fw2LJ$9MM6+kP&il$0000G0001A003VA06|PpNH75a00DqwTbm-~ zullQTcXxO9ki!OCRx^i?oR|n!<8G0=kI^!JSjFi-LL*`V;ET0H2IXfU0*i>o6o6Gy zRq6Ap5(_{XLdXcL-MzlN`ugSdZY_`jXhcENAu)N_0?GhF))9R;E`!bo9p?g?SRgw_ zEXHhFG$0{qYOqhdX<(wE4N@es3VIo$%il%6xP9gjiBri+2pI6aY4 zJbgh-Ud|V%3O!IcHKQx1FQH(_*TK;1>FQWbt^$K1zNn^cczkBs=QHCYZ8b&l!UV{K z{L0$KCf_&KR^}&2Fe|L&?1I7~pBENnCtCuH3sjcx6$c zwqkNkru);ie``q+_QI;IYLD9OV0ZxkuyBz|5<$1BH|vtey$> z5oto4=l-R-Aaq`Dk0}o9N0VrkqW_#;!u{!bJLDq%0092{Ghe=F;(kn} z+sQ@1=UlX30+2nWjkL$B^b!H2^QYO@iFc0{(-~yXj2TWz?VG{v`Jg zg}WyYnwGgn>{HFaG7E~pt=)sOO}*yd(UU-D(E&x{xKEl6OcU?pl)K%#U$dn1mDF19 zSw@l8G!GNFB3c3VVK0?uyqN&utT-D5%NM4g-3@Sii9tSXKtwce~uF zS&Jn746EW^wV~8zdQ1XC28~kXu8+Yo9p!<8h&(Q({J*4DBglPdpe4M_mD8AguZFn~ ztiuO~{6Bx?SfO~_ZV(GIboeR9~hAym{{fV|VM=77MxDrbW6`ujX z<3HF(>Zr;#*uCvC*bpoSr~C$h?_%nXps@A)=l_;({Fo#6Y1+Zv`!T5HB+)#^-Ud_; zBwftPN=d8Vx)*O1Mj+0oO=mZ+NVH*ptNDC-&zZ7Hwho6UQ#l-yNvc0Cm+2$$6YUk2D2t#vdZX-u3>-Be1u9gtTBiMB^xwWQ_rgvGpZ6(C@e23c!^K=>ai-Rqu zhqT`ZQof;9Bu!AD(i^PCbYV%yha9zuoKMp`U^z;3!+&d@Hud&_iy!O-$b9ZLcSRh? z)R|826w}TU!J#X6P%@Zh=La$I6zXa#h!B;{qfug}O%z@K{EZECu6zl)7CiNi%xti0 zB{OKfAj83~iJvmpTU|&q1^?^cIMn2RQ?jeSB95l}{DrEPTW{_gmU_pqTc)h@4T>~& zluq3)GM=xa(#^VU5}@FNqpc$?#SbVsX!~RH*5p0p@w z;~v{QMX0^bFT1!cXGM8K9FP+=9~-d~#TK#ZE{4umGT=;dfvWi?rYj;^l_Zxywze`W z^Cr{55U@*BalS}K%Czii_80e0#0#Zkhlij4-~I@}`-JFJ7$5{>LnoJSs??J8kWVl6|8A}RCGAu9^rAsfCE=2}tHwl93t0C?#+jMpvr7O3`2=tr{Hg$=HlnjVG^ewm|Js0J*kfPa6*GhtB>`fN!m#9J(sU!?(OSfzY*zS(FJ<-Vb zfAIg+`U)YaXv#sY(c--|X zEB+TVyZ%Ie4L$gi#Fc++`h6%vzsS$pjz9aLt+ZL(g;n$Dzy5=m=_TV(3H8^C{r0xd zp#a%}ht55dOq?yhwYPrtp-m1xXp;4X;)NhxxUpgP%XTLmO zcjaFva^}dP3$&sfFTIR_jC=2pHh9kpI@2(6V*GQo7Ws)`j)hd+tr@P~gR*2gO@+1? zG<`_tB+LJuF|SZ9tIec;h%}}6WClT`L>HSW?E{Hp1h^+mlbf_$9zA>!ug>NALJsO{ mU%z=YwVD?}XMya)Bp;vlyE5&E_6!fzx9pwrdz474!~g(M6R?N? literal 0 HcmV?d00001 diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..1b9a6956b3acdc11f40ce2bb3f6efbd845cc243f GIT binary patch literal 3918 zcmV-U53%r4Nk&FS4*&pHMM6+kP&il$0000G0001A003VA06|PpNSy@$00HoY|G(*G z+qV7x14$dSO^Re!iqt-AAIE9iwr$(CZQJL$blA4B`>;C3fBY6Q8_YSjb2%a=fc}4E zrSzssacq<^nmW|Rs93PJni30R<8w<(bK_$LO4L?!_OxLl$}K$MUEllnMK|rg=f3;y z*?;3j|Nh>)p0JQ3A~rf(MibH2r+)3cyV1qF&;8m{w-S*y+0mM){KTK^M5}ksc`qX3 zy>rf^b>~l>SSHds8(I@hz3&PD@LmEs4&prkT=BjsBCXTMhN$_)+kvnl0bLKW5rEsj z*d#KXGDB4P&>etx0X+`R19yC=LS)j!mgs5M0L~+o-T~Jl!p!AJxnGAhV%~rhYUL4hlWhgES3Kb5oA&X z{}?3OBSS-{!v$nCIGj->(-TAG)8LR{htr41^gxsT8yqt2@DEG6Yl`Uma3Nd4;YUoW zTbkYl3CMU5ypMF3EIkYmWL|*BknM`0+Kq6CpvO(y$#j94e+q{vI{Zp8cV_6RK!`&C zob$*5Q|$IZ09dW=L!V zw@#2wviu|<#3lgGE8GEhcx+zBt`} zOwP8j9X%^f7i_bth4PiJ$LYtFJSCN$3xwDN;8mr*B;CJwBP2G0TMq0uNt7S^DO_wE zepk!Wrn#Z#03j{`c*Rf~y3o7?J}w?tEELRUR2cgxB*Y{LzA#pxHgf}q?u5idu>077 zd^=p)`nA}6e`|@`p?u}YU66PP_MA}Zqqe!c{nK&z%Jwq1N4e_q<#4g^xaz=ao;u|6 zwpRcW2Lax=ZGbx=Q*HhlJ`Ns#Y*r0*%!T?P*TTiX;rb)$CGLz=rSUum$)3Qyv{BL2 zO*=OI2|%(Yz~`pNEOnLp>+?T@glq-DujlIp?hdJeZ7ctP4_OKx|5@EOps3rr(pWzg zK4d3&oN-X2qN(d_MkfwB4I)_)!I_6nj2iA9u^pQ{;GckGLxBGrJUM2Wdda!k)Y>lq zmjws>dVQ*vW9lvEMkiN3wE-__6OWD0txS&Qn0n22cyj4Q*8(nG4!G{6OOwNvsrPIL zCl-$W9UwkEUVuLwyD%|inbOF*xMODZ4VMEVAq_zUxZ+K#Gdqf!DW$5f)?7UNOFMz! zrB~tuu=6X2FE(p^iqgxr+?ZK;=yz`e;C$#_@D9Lj-+TDVOrva>(#*PVbaHO>A)mhl z07OJWCqYC60518$!&c`eNBcBW%GnfaQ*$eazV^2_AW?j)h;J1nUjN(I9=0+!RVx~% z3@Tf!P0TE+98jA?WceK-}A1% zW!K)lyKcGqy#M~})315-A#2NXQ`?6NR#Apo=S!oF=JfpX>iR*49ec{7AN$xxpK{D$ z2d%Fz&rdfSqourN$~Y^NFIMV1CZ?J*bMx~H3k&meGtH@q9ra2vZxmA$S(#jaaj-g4 ztJmxG+DLV<*q<|sDXPp$X>E)#S}Vm&sRaO5P&goh2><}FEdZSXDqsL$06sAkh(e+v zAsBhKSRexgwg6tIy~GFJzaTxXD(}|+0eOwFDA%rn`X;MVwDHT9=4=g%OaJ9s%3b9>9EUTnnp0t;2Zpa{*>mk~hZqItE_!dQ zOtC>8`$l|mV43Jbudf0N6&&X;{=z}Zi}d1`2qmJ}i|0*GsulD3>GgQXHN)pkR6sf1 z?5ZU%&xtL}oH;YiAA)d*^Ndw2T$+Mjuzyzz@-SM`9df7LqTxLuIwC~S0092~+=qYv z@*ja;?Wt!T!{U?c*Z0YtGe)XbI&y-?B&G2$`JDM)(dIV9G`Sc#6?sI60de6kv+)Qb zUW~2|WjvJq3TA8`0+sWA3zRhY9a~ow)O~&StBkG2{*{TGiY~S8ep{V&Vo2l<6LWsu z^#p0-v*t2?3&aA1)ozu|%efSR=XnpX$lvTeRdKlvM!@|pM5p2w3u-6 zU>}t2xiYLS+{|%C65AzX+23Mtlq?BS&YdYcYsVjoiE&rT>;Necn6l^K)T^lmE`5u{ zm1i+-a-gc;Z&v-{;8r)z6NYfBUv+=_L}ef}qa9FX01)+Aaf+;xj(mL6|JUzGJR1|fnanb%?BPPIp>SCjP|8qE5qJ{=n5ZGw?81z3(k;pzH%1CtlX50{E7h)$h{qGKfzC`e2o`*IqA#tjA z`Fz&^%$b9F*N`)U-#6>a)Z`55`$Dd0cfcs0$d13^ONrdCu9xcv_=n#WQo8stcz3jP9|2EvdI-RhJM3%Q%oM&!OlShM|0 z?gz?wHZSnm45njLtsz8PVT1S&jAlbKg5kVam$p16=EK@Sj4EP0OtH zmJDmdc^v)x>56Qg_wmYHz6h)>kl_h$>0@J!ypv%APmjZTAQVLy6Fu50RGY&JAVNhx zrF_qG6`x9MkT;1SFWo$)l{M$;3qUDn9JwE}z zRl#E_bDRJFii61kPgBybIgp8dNW!Cc1b*^YYk-#oWLJvtM_v^hQx~9?8LD4VFFxBF z3MlrsSC%f9Oupn*ctPL0U1fwfX?`tRhPD{PSLFPQOmIt$mDy0SgpNVvHS+f#Do>h1Gn?LZU9(KaN>Q_=Y*_T zvtD7%_u^^+{g`0VGzg(VZrpVQ6Ub5M=tI_p7T93R8@3Zulu3|#{iNcu!oiHxZ4Rf*( zfmiN$$ru(*_Zqn=`Gq#OuHRTSwp7uH_SokR&|)RuW5yo=Z|_4?qU-JU+tpt>!B&Is z@N(=SG;bpVc;AO@zbmMM zScqq1)b-ZQIrs={oD}|?6y{$HNB1U0^LsBh8JI&3!GBZxOXI<}&5-$lgkAaYqhOTb z?2vEnZ$-kk;*M_17(upJF3%+iH*s0-r{vttXVB2OUwI1s^+G(Ft(U8gYFXC}#P&E^ z>T@C^tS`Z7{6HT4_nF~n>JlZtk5&qDBl6r|^kzQYe`wq!C)n@$c>WOPA61NDFj<<6 zGW71NMMhwAl!U-yqrq2xrSFqRCI8acw7?}3j;ynxo*-b7Co;g5r%^j=H@9({PXXBf z@r>U>>N;E)81wx`B4f%{PB~MHka_);%kBCb(d|Jy5!MqJ%2p`t&@L)4$T2j&-WHvG zv3(uyA_gwqNu(k?jQTtv3dgPKRZoH8prxe7>pQBW5L&dpumS&5Ld2?(sCpJjvc4L5 zEnh&?91WVm)ZdTj=fjJ$pPDdgAttLXuke+?KdKxu*;kTC(r!tQk6;gxj4h%FdHAt(^M3YvYj(!tOeN)+Hvj6+< zzyJRG?^lZfWuR#t!tUKP&(?%3v&Zd$R2YN>lB(Lq`OInY48%4%yTv2 zYe1{G`3)(PDEio5Y@-I5tUf`c%%OCJMtSW56g3iEg%3`$7XSJJHyA z<|7&N)5Xrlgv~%BO24eFd;Hd;uiK%D`EdK|quUeRZDqbh9l)%j%J#0lfrZumvA<_w zu&=AVvdChf6}eqh(bUz`(`Ue*p01{fBAcTgKyDYLs_I+YyJEk+rM@avU~>fB$n)HS zM7pfJydu`i%gfS<{PF94kZDv$t>06sAkheDzu40NJ$5CMW%n^Lls?8^p^QGWURbKu3ZduZQZ((s2? zzE`}<{;Zt7<$C|9R8A~DJ~@%x>TfP zF>TX8)@v|t)q4GjRt<}5s6hLHwRel7>V@&r-O|Av(yh;Q1A{E>Ir>p+%dHD|=l+lT zpr(Dg&>#Nu=!)6bCLr-ZS%|;h)Ij$+e@r8_{qO19QvDe=&1tmpY*0lcA^Cc-#{9fQ z<~$*<&P$Q<_jy#<$40PMofM7aQ}C=jphI`4kLg}Z7CIN#26D{-4v-_CA-LiE@(%{y!BzsU%gG`Q?sjLUf%qFSl0y)2#ae*+EI>s|i`d^V$Dn)qmzqRq6VJRY|{4ujsIU%#bnqU6MR&-1I_43=|5(6Jr;Jvert) zE?S|Tmn}Tv<-??sxV5@9t}3D=>YZ0JrQe$CO~|EY=Lj9RM&4svQHPQL6%pV5fPFiH zfXDx;l@~et{*{U*#c#Dvzu)|znDO7$#CRx)Z&yp-}SrD{&|(MQtfUz~n35@RLfUy=aqrhCX0M}J_r5QsK~NmRCR|Nm&L z41UdsLjWxSUlL41r^0K&nCCK>fdR-!MYjFg(z9_mF^C|#ZQw?`)f6uVzF^`bRnVY& zo}@M06J&_+>w9@jpaO4snmU;0t-(zYW1qVBHtuD!d?%?AtN7Plp><-1Y8Rqb20ZaP zTCgn*-Sri4Q8Xn>=gNaWQ57%!D35UkA@ksOlPB*Dvw}t02ENAqw|kFhn%ZyyW%+t{ zNdM!uqEM^;2}f+tECHbwLmH*!nZVrb$-az%t50Y2pg(HqhvY-^-lb}>^6l{$jOI6} zo_kBzj%8aX|6H5M0Y<)7pzz_wLkIpRm!;PzY)9+24wk2&TT{w--phDGDCOz{cN_ca zpnm7`$oDy=HX%0i-`769*0M6(e5j-?(?24%)<)&46y0e&6@HCDZAm9W6Ib#Y#BF6- z=30crHGg+RRTe%VBC>T00OV6F+gQDAK38Ne3N9bm|62tPccBJi)5{B z4zc^Db72XiBd}v$CF|yU{Z=M|DZ%-(XarYNclODlb1Kz1_EKLy(NSLCN`eUl(rBCL zT*jx@wNvze0|TSqgE(QArOZU)_?qH(sj#TwzElLs9q)(0u!_P|R%Cy_0JFQxgGV>1 zz4?_uq<8_gM0`c*Hh|;UMz~vrg1gQXp{ufg`hM_qU;U>+zmvc5blCLSq@PrEBSGR# z&8=2Z4uXN`F3p73ueD1l{s{k$WipAvSh5W7ABe?4)t;r@V?y`bNB5FvBuE|0VRTb< zM1Hn^?DSsJY+sX@T5xW=#>T9VEV|?<(=6|ge$X6Sb05!LFdjDcoq*gM(Zq=t;_)Le&jyt(&9jzR73noru`a# zN*<`KwGa^gZU3-)MSLF0aFag#f0<>E(bYTeHmtdbns#|I)-$)mJ`q9ctQ8g0=ET?| zdO}eZ*b_p>ygRTtR^5Ggdam=Zb5wmd{}np+Jn1d_=M`~P=M67jj})fH4ztb5yQqQW z^C|C&^LHAK-u+ooIK)yM)QM?t;|<{P;;{`p=BclzAN#JzL4jCwXkQB1Dy{=^KR`=~ zTrr)y7eiYBzSNs_DvO=4A6#EgGS-zY%Vi)N*Yb`U;6o}KR}dq{r9pT5wqZ@3NOE8- z9-(}D|Nc5732CSYQbL)!gPQ#RbD8BhK3dl{sUuPvei0tkvnJBxDEAYTesU8H$)g(Plra{VH(v3u^CO1~(+ zU0O7#)jaS4{NcwA+LuSm&VBcX2#Im3xg)W}ySNw%->orn1taZ&+d)}8gJTqA!u|5P z{yv?zol_3|(1(%M(EVU=cp?L`{Pi|ixk{U)*guFML3P!OSlz;zGA#T+E@8@cgQ_mv1o7RSU=Zo_82F?&&2r;WE z@wk}JHYEZ9nYUc(Vv~iTCa3u8e4q(yq<29VoNbKk|`mq%I6u)My=gPIDuUb&lzf4`MEA9^g8u z)vp8|$$HE9m_BTV?lOosIGa4jud=jIbw)O2eCMfyw2*S8?hjWw^nqws$O*M$3I1)x zR0PWFb3$ySOcGTe1dz%N0l;RPc`x%05FtT^f^j{YCP}*Q=lvp4$ZXrTZQHhO+w%wJn3c8j%+5C3UAFD&%8dBl_qi9D5g8fry}6Ev z2_Q~)5^N$!IU`BPh1O|=BxQ#*C5*}`lluC515$lxc-vNC)IgW=K|=z7o%cWFpndn= zX}f{`!VK02_kU+Q5a3m37J;c} zTzbxteE{GNf?yLt5X=Bzc-mio^Up0nunMCgp*ZJ;%MJvPM3QK)BryP(_v@ei4UvHr z6+sbCifQaOkL6-;5fL8$W($zZ_;CZp305C;~$hhRquZr-r)jjd1z z31%ZK{-(`P#|Um_Sivn@p$-vz46uqT>QG0B1w9znfS9A8PB2LaHdzA|_)yjXVR*l{ zkcu3@vEf7bxH0nkh`q?8FmoO_Ucui*>_a~P?qQrlZ9@+D7%MTpSnztpylXrt5!-k8_QPB?YL8Kx_On8WD zgT+111d(Op$^$&KLAN5+@?>f7F4~wFi(8TL8+szgVmcMDTp5l&k6~=rA{Dt}!gb^r zSWY<)M7D|Z2P0cEodj6E42PV>&>DFmQpgt)E-|#sSUU@uKed+F680H@<;-x{p|nuH4!_mn85rx>wz;0mPi2ZkL#k6;sznu?cXh!T0S>{w6 zL^gvR05NY64l*<+_L>On$rjx9!US;l;LX6@z}yi#2XHh)F@Oo+l)h%fq$v}DNmF2> zfs^_t0)3N-W<9-N?uedVv{)-J0W5mh#29QM5R5h&KuiRM=0Zvnf#lF=K#WlCgc#9c zS;qvh(P$!_a8JwyhI^ZJV2k+B6Z^64?w|1?5gyo6y{}923CRZfYVe1#?F% z7h2SUiNO3;T#JUOyovSs@@C1GtwipycA=*x5{BpIZ_#GCMuV8XK=x;qCNy{d7?wA~ zC+=vjls;ci&zW=6$H~4^K%v{p}Ab?U%C6Z4p%eC<3ExqU$XR<}LLF67A$Sr20DR_pJ3yeBa~ z^sw{V0FI5;UpwXsScYuhbqGQ`YQ25;6p6W^+tgL&;Ml;>S3CGpSZ>VrTn0m1$y$HU z&65)I!c?oREz};c=nLCliriqQX->4uivHTgd${GqeAlf*!P^B|jkU|*IdNP(&6C>4 zqOW$)Nw9nvjy^&`?E|gotDV{JmJ9Q~vuhy<`^C4XIUDt|j4o6rK^e8_(=YqC zuaR6TRVf@tUFHB079o4MBIh{M~4>WwnGgesQH*3?w(RA%hCZ*7)b!aNV=yOQ%o_Y=Lt0Sl*(9^jfRnC210Om$=y>*o|3z} zAR&vAdrB#mWoaB0fJSw9xw|Am$fzK>rx-~R#7IFSAwdu_EI|SRfB*yl0w8oX09H^q zAjl2?0I)v*odGJ40FVGaF&2qJq9Gv`>V>2r0|c`GX8h>CX8eHcOy>S0@<;M3<_6UM z7yCEpug5NZL!H_0>Hg_HasQGxR`rY&Z{geOy?N92Z z{lER^um|$*?*G63*njwc(R?NT)Bei*3jVzR>FWUDb^gKhtL4A=kE_1p-%Fo2`!8M} z(0AjuCiS;G{?*^1tB-uY%=)SRx&D)pK4u@>f6@KPe3}2j_har$>HqzH;UCR^ssFD0 z7h+VLO4o@_Yt>>AeaZKUxqyvxWCAjKB>qjQ30UA)#w z&=RmdwlT`7a8J8Yae=7*c8XL|{@%wA8uvCqfsNX^?UZsS>wX}QD{K}ad4y~iO*p%4 z_cS{u7Ek%?WV6em2(U9#d8(&JDirb^u~7wK4+xP$iiI6IlD|a&S)6o=kG;59N|>K1 zn(0mUqbG3YIY7dQd+*4~)`!S9m7H6HP6YcKHhBc#b%1L}VIisp%;TckEkcu0>lo@u995$<*Em;XNodjTiCdC%R+TX|_ZR#|1`RR|`^@Teh zl#w@8fI1FTx2Dy+{blUT{`^kY*V-AZUd?ZZqCS4gW(kY5?retkLbF=>p=59Nl|=sf zo1Pc|{{N4>5nt#627ylGF`3n>X%`w%bw-Y~zWM_{Si$dc82|=YhISal{N7OY?O`C4 zD|qb}6nLWJ`hUyL+E>-;ricg9J@ZNYP(x(Sct&OI$Y!QWr*=^VN;G3#i>^1n4e#Je zOVhbFbLpXVu*16enDM+ic;97@R~u&kh__kgP#!R`*rQEnA+_dLkNP~L`0alC|J;c; zeiK=s8;BsLE)KbG3BD&Br@(Ha@SBT&$?xX`=$;eeel=|R_dIr6-Ro?=HEjnsJ_b`1 zK6Yg^-6;^2aW!xeTK)A~3Rm|L^FCHB_I>jIju7ZGo&N_1*QHkxH2!!%@o4iZ?vntS;&zJdPe1dH#04YD93A44o-MpfD zP{rn_aq>U%RDvC2+bp;xPlsOzauIi3*Lf42`jVKKZCRuKdYhi>FDuL2l=v{$BCN#Q6796s%r-AG$Q^t(3c@ zD?w0UhYr11@feiyl9kY_@H8~|xlmO<8PfQmj1!$@WieW@VxR@Psxfe-v9WCi1+f>F4VL?0O~K7T?m4-u|pSkBpUJZZe*16_wAp zSYZ@;k`3;W3UHKUWc8QeI}0jH5Ly=cGWQPw(Kr2fm=-5L(d`lcXofy8tJY3@Tuadz zYWXR{mW7XT!RF#RVCe%}=tM*O6!AD3^(!8un~opNI%Uko7$5t@<8+?; zTxDys(MyyGsUjtSu9$+|_-t!U3fVb1dkK?l`17<+jfl=hrBHnDSV>^R1=TnQeyqbW z>ov#l%!1|S!1>8UUxIdhQq`_klcHVx0{?#>K3#$4GlXncwldt!g17TcvKq-jo_996 z>oA=tH9CqRl6Yw?Uc`am!V?lHJbizOJaVaScf1UP5e7Dbgabq=b!B~T&_F6?ooU>w%x0A zH~&MHJ=q`fCH{U<7MDXE4SD32cDZA)WJeWkllJ`UspWaS#eDe^kg^oU_A14UE9zG-a^g{xaXf$})Wik>gT zl#dkzGr(;h0JZDuFn(+k8wNq?PZ5grQ<+sM?wBGt@JnH6v0#or-5wBQWKU~(S_> zkE!tc*ZJ1Y&*p(xX84POb3cClRMd!^qJ#CAZfIepEj-<`VURS_yCz0(?*Ixcj4 z-!zV1_QZhpm=0<;*(nm+F>T=)o?ep@CK5I%g^VAA+RB25ab?7)A~z~egru=I1S|@v zH7tXV!0wmGS^qj#e+MY;C5eUjEAp$Y?LDkS^QPZ}8WN85?r$u<-Epi;yZ1|J2J`se z$D6DpH~2F=eI0B&=UFAUnJvZAmClJlK)sutJ?M>xpZiWV&0=G4MZP+x+p>EX=HbCz zxls%Mw?*u^;LbHWIWCyq+yi)`GmFn9J112CZda_u@YIP%i;srFg_paU02Ifij*7}l z&CF-(3|>*a|+vbNR`^RP=9G?ymEJ0Z~)d&c*UE$UMepZ zcITr{0WqhxkjUnM15js_gW=e3Uh|y6ZReaXHIz-=p`x5VvB&rH9y>Amv@^WmXFEw) zQXYrk3feir=a{jMQ+wDIkkFnZ$k{sJakHn*?u za%4b!00ev8NVLM1TY=cl?KB&55BY_MU-sg?c>=Dbz_W{(Z~c?HJi*XpYL)C6Bd8WH zt+v-#0&o~@t4qESi*)+eW%@VD0|o^yF)n0hME$UtXF$*Lvh}7sso{`|pn*JDIy5^Fm3s$5*zEE=?u5<=l8FJc3r%+H} zdfoNl2J0^~!-*mOL5o-x32|e0Im*E!yY7F7E5N)W3>+v_LBydlEx?4$RL5f2oYRD# zaR0wv(-p~wO0eLDl3K=%`{5+0Gd$ktO=W)gWlGZJ0`K z$_RNA=ckrfa;H0KA~dR^p�(p-{x$&=IACIfoAR!za)F-^da-t3#0Dycnp zwO~NVXwXCl;jE<}>%@xz|=8fIJAB?>+E{7)|4l${4ngA3G|=r z2Dyv;VVWSgZx9Wj>qUjleGl3Ei9K4>h!(lPS%8VOG>Xu0%6VDz^O=bjJmuP7>DeUv zrbI}MlHB^^d?{zv6d=@_ZD2lg1&G7UjnVN{1}9WkaM3H~btX0GtSzB+tZ^qRgWo4m z!GmimlG$=wgXCnr6j@m<1gAL46#T~5Bnm=2{^@>|t&`9mkEPddj zAvG~@Tv~TAm2i%VW}R-g(Z0)z-Y|szHr@rk>4MAyG*Ma*7Yh#H7(!-5>DZ@8r;_dx z{prSe<>~099F8vsYd2xff7uAS%7{S)f(|@me3t2$iy&NEc7OUEchp@9A|X;;IA>8!oX+y(BKJ$EzV* znR$z;!L$s7uy@{OT~nG#B!NRraT8(X##Ho!0r_o@gg0CA-9H^;-uE&?$2$nHv_00o z%cbuUc-tCx$Uh&EZ4Nf4Zgqv)Y6>usG3>GeQnxx_Z6+PcbX-+ysbt1hQ`K1LDpOE? zrAhIZhSN9yVIAOa22gn577tbc&i3|3V8NWy&!tw##`}9*x}gtI^h1DzZRA>UuaJG) zaZ7j)dq!O}{?#8Y7~7i6fHh4{`pL?>-18|p!S75Y#^DM>-S3)vuZG+Q7l@ek zQP~#cBpWgg#mApc_sPYjpw8odQuRokmTkzcNl`^CcKB7e&;zViV;{Y{o^Y$%7i0m# z62%#1Lq!RC?}lK>%mp}T!3Xv;L*0v*>USLm``N%>w>@fwC+#T&Tx2bN4w(20JB}oU zuSa6v^kXi0xPs?pbaOHnyiqq6By1EZY9OZ^^QA>{q-Hsd&m`pbQ%8121aWG-F5xf zlZ%;B{;C>X19|`^_?dVyCq>n+41w7|!tUS!{9rHlbhX=SZO5CQ^;!Du_E7*`GiR^Q w)2!4MKjfSAeNo!9>IaV6aUZ*?W>} zs4%E?srLW`CJh0GCIK@hTkrW7A15Iu%N&?Q^$0+!{Tv&|t^Y@u%!L zglTg&?Q5q#ijZ;&HBQ?FNPp;k3J5!&{^+SGq?AX~SiOM9jJMRpyP?RCr@z38AQyy&WRMaC;n4una$~nJKSp?q|s8F00c9?Q! zY_ovvjTFm+DeQM^LXJ#v0}6HRt3R1%5PT*}W!k8BEM;Jrj8dIceFo2fhzTqaB3KKk zGlCLI)gU25(#u6ch6GeB1k@eHq7l{EHXv0n6xE#ws#ri}08kkCf8hUt{|Ejb`2YW* zvg}0nSSX1m=76s?sZhRY$K=3dpJ+y*eDULGnL2}4>4nvW^7_<~wIM_5fjvwt4h1|g z)g0Z6ZFq9j<~9~b8((~TN{Z?ZQfw|is&Xp~AC61sj;xItKyCHdI|tCMC_LbXF>~vR z=w6V3^H=W4CbAgR4#xw}ETTwu2guW~=Crl@SMXv85jQ=%y!s^?m4PI0My7MWICO;- z175jm%&PcPWh8QdOU(#8bp4!N7ET-+)N}N2zk2)8ch|4Q&lPFNQgT-thu053`r*h3 z_8dI@G;`zn;lH$zX3RzIk`E8~`J=BBdR}qD%n@vVG1834)!pS1Y?zVkJGtsa(sB~y zNfMYKsOJb%5J(0ivK8d+l2D2y&5X!cg3BG!AJ}910|_${nF}sC1QF^nLIhzXk-Y#x z0)&1iK!O;Og0Ky!;`b~v%b$`S4E&fB)1NB4v@8wr( z&+NX4e^&o)ecb=)dd~C!{(1e6t?&9j{l8%U*k4)?`(L3;Qjw z#w7FS+U(94MaJKS!J9O8^$)36_J8;thW#2$y9i{bB{?M{QS_inZIJ!jwqAbfXYVd$ zQ5fC$6Nc9hFi8m^;oI-%C#BS|c8vy+@{jx6hFcf^_;2VRgkoN(0h!_VSGmgNPRsxI z8$rTo0LaYq-H5i&gtj81=&xU?H-Y2==G@uQV7E`@+2E9XQW@{&j`?EOktk|Ho{HU>ZqDzvgjwBmdex z&uZNd2C1h{{}2k6Ys9$*nFP3;K%u!MhW`uZy7Sn`1M1zs@Es&;z*Z>Gsh@-3Fe6pE zQD2@cqF((NrRevgvLsvM_8;;iNyJ5nyPyy?e!kvKjGj`6diRFBEe49Oa7wwkJFV7Z z$YT&DWloYu-H?3<0BKn9L&JYDT-SK~*6c5pi18P26$JESKRYj{T7Zk6KiRJcbvOO*{P56Q6s8msbeI3>|j>K9}Q9UBeq*inXKemCm`-<5|-$ZyN4u$(3 z&HcvqehFD%5Yrmykg-^d`=BSa8(i=>ZoC77^mWY{evp(km@aHqhUECBz76YiR+VYK zY_avFC~V3$=`6C4JhfHAQ@DZtUOwH`L;oYX6zK0-uI^?hS$ALfq}A7evR;ohJHij} zHSZdW?EKv9U1s4oD*<(0oQ*;MaQ6@cvGL zuHCPgm_NhVsgp^sfr*ia^Db}swo1?O(_Q2)y+S$CBm+g=9wCOUPbz(x)_GbaKa@A7 zuI&!ynLiZRT#V%_y_-D`0Z5lT*auoe{(U5NylTzFSJW()W-#F6*&A`LNO1bV#Y;QJ zSbLBnp|B^dtK|KIWC|No>JjWBWE@n7O)x{&^E(WMeMvp57#qA8m* zeTow*U@_86B#Fm*rxyYu5PRWaWHx8y> z*qmHEp(AMDl0v)ij(AY8fnH=~ZwwjVAbu*m5;xPfidh@ov6d8g zfJsi&!QyK53Es%sC39ts;54V68koALD4b|%tNHW0bIkZAJKa=W&FomJSEDT>W1xIX z1x%Z>AvNIsSPLcn3RTcHXb@KB?cuM)=x6fcIx>&(GxqZ8w3p#jJ(GVgc*`c0HG}dv zIop&Qim!K1NFwic%07KcjWgHBPUkq7f~lj;TPqVGTiT#cUeim>;nY`>h@a*S{qQex zQ`z62WK|Mj)Y{tfF{;T4P;c8$Q|KU?Joh zIkA^z%X7z|r>4aTh@|StTi!-r1D!g=zb#3d#{{&K3CqE$Iz-UH<%37c zRfkO`&uM%#AD3PHv`g5t0e^O%nVL0d{Xlx^EjEC3#skF@`zl-7PF^0oxW)1!C!JxR zWvuAHH?)61FKA1QeT*_sY7;_Id#!GmV4n`MO{~sv}VLSK` zXRw=Y=Clz*00B(5y^K;gCZMAzjT5+c3IC=)l(9VIDdatpxj3y89WwI|bH&$!ZEvp` zPR!T@#!(|KfI-w?!&+7$N3F6>tD{YO4Qg$d_`nNEdfVCha9vaPn0jI0`)`@*72hq! zpU5ND^P*RoEkbD5o#az(-g=Y)L>HH>Oc%}$ zT3Rs_ih0;4+Lv4Y;@Iv(;fUbQ=i-G(#>vghec~*j(I#r|5mqFiJBpzi&hzEcD{u$< zRsm0BVYn=pT;0>R(itW|*D&;O%bOc7et9ACaH#J>z3A1A~6fdP>pmbM%xzm4>|;c_?B+%sl;Qs2{t!60$^u zH1t@9^6>;?!FuusnISi$f5CL&;z?EqJN$FBuWDA#D5`cy_UvCFIVvf{c?4N0teh;d zET$7aVbj08KTQS!x?Nd1Is8q8qFzs}a=!@nJ;7FSfCY^T@D-gpw`w<6e#X3+;O}1h z$%I!M)0bg|EKUA04Qjn@+x{Rj8vt6Wn!R|3A92z}^$KfF5(#CWr4y#~re1CN4i4w0 z#GsypBR{xA3Er7sgAi(|}1-W?s~n$7?K|9WL8kpVfw-;#b9 z+mn;=ep!162U5R>_t}fOt~tE?s#m( zO-S$7>Ay6*hHdZ)7_oU915WYYCIX;hFI-U2EWYX!pllONr@Q--2o~`!isi6vTPLJ4@(|o=%NHYjo0_S&q*UQIROw@*N-By@PaQ&;YxFZ0aR zX&}LeOEz);#m~Hwm^VAY8DK}b$F4bo{jMN?d!lxKPhNklzr^Cd`0f4oJr^z=I|l`* zm8AHm*fPV`0=lF3Pnnp}&J0N1X@}-D94YvmUabFrLGSnTz7Mu^21F#O5tN#CuY9Vh zUZBH=ez%h*wkf0hBtXJh1SN3d+IF{gzT7lp)j}n?03lt;XSQRAh7qd&v;RwTYDuQ# zbI2*r<>?x-G0@hM{;%{VBD7nLKt~D`T~-HAt5;h%i0_=Ifs=yHma5dhJ+QMG?Ux(a z|E?1CMy1!~oA`FP!k~iG=t&5#>bVdz=peT8HMB6Y)#7PpETtNryT^+Rv3vpJaF^zP z{H}0-LyV9Fu21ID%wO9f1IKlFr1p4c{o-?03vyB-tr5duk^&L$;m_|f$vs`^Sl{j2 z95}oY{LlY+=ZS%J+tZoXCd0*sSU7w^gjovXn+g7uyra5{cU49@yHf#Z^Jl-$9cIfo z+AJuxH$VLb=#+uBbVmUjnx zxb1pZ@-O9=AIk4@S)m6fJ2?{HrNYwwnL3a45muuNjr;6$O`bGEM0T4A2_S$t=86*- zcO+0mywg*j#A4mU}enR_!cGmIYQ;qwfchWtFEXL)AK%*;=j znYne+hS4EMy3S)C*mZ1KI>!+)0V@9!N6H$Y}~MJ{rYuf zz^KljIWvFi-?#?V@LPR&c6Nn{!=XM z>}-h$S76;$H{E{Y%@^zlmOl^efBwa%UU+jJD9UVukQ3ti_kH-?H*RC0?M1W%FCvMB zM_+v6fk$6X2sx)-p~B3&Kl{nscK}pNLM*qjtpaf9>AU{-iPKQZR8yCg!TY}Qg*(;) z)gdvCcB%kppZc$VdvsK@)3l1{&DG!d_6OHOS`y=ITLEVu`unSKA2E%JD*DVX{LJ}K z9l>hMRDqxQh0lnpGHpVYneX}eA3Pt|2v%=q;rt)``R|#bDyB)OXY&vI_@|*}h}G?^ z@aZ4_!7cQPX`!fW_?{oT1NTwHs#l5L-0`E|y@48<3Q^HFf8=Idi zpJYD%1MkII!~|7I^WGo)IF=?{>ACnjJ_WUi39C}!Q{QnheVJqeKKqq5^o5CBde(g9 zvw$X6^jz_^E2$wSw4!q5*RG(C2_^XO$HBn_55vbl44OnTTRwRaePP0vo{K)U1#99& z<>rq7V&V(<&@I%MFoN5zrY}sz=(*-L&}1QQ*a%`u25h{cFj===17eB_uGuzG&byQ< zrm8BJZl4r_E$3k|Wo6FW0-6M7>qac5uFQsQcmkLWGfeH74S3Z_rJ!jgN++!@i=HW8 zkyjI(oPH-+-N#Qc^-mpNO`bc6r=2-<%&Wy5K1vfFJB(L_IkpS6fY^NmuL8qsgj>MD zn~BHH9WM~32_3vd=W&B)k7F9q%stJx+b_L_X-4zr^LVUMCmyCTA3sWtkvsmME?Xiy z?xOSfB=_$oY06~J-HcCq&)qcW{j;uP;?Dm}=hkq?zh&n!;m((-G-u_t|6x399Q;>A zgNpxoJNj{u|MFDH7Rhq@FCAl0dE|ddnl!oh9{Lq?@JDoR6L;C941IK`ISfdE$4S zE0AUQ8+2|Ncl_q5QkSp#AODp~(^mfP&%Au@@|TBQwoP`UU+V{6u8|)6ZA{~uKmQ*M zmrMTDU8S~8Eqi{^v0Ug&5Upcm#y7Z1(RbgZAG8jB$eRwCspQ)>5;U)oGZ&E5aeR*K z8Yt`Y0$G))Yd(Y3KH}tA4`-_QmNke5hU_|nq=xtyjwW(_o?itz>B>WM&^63bNdQ)k@-IgDHW*RW$Xo9#RzrTrCn7L2H{9Amq|qNg@#eZY=|P zCoI?2s+L)zsM%WX(NbVEY^`C>lFjIBYmJ6@DKJ0ZT4&F&WHW!dwa%QzOG!?jY_2(S zDcEzZbz*2Q!43|z))9yOP9X1Xt%DXzwY(3tl-TR=Qb_MbZYRrooh;dYYmS!U_as1(=YVB?Q_A|tNu5Ut&_q3jbfDM zoFxT^uEuH`nX3*sB%K?GuHUkweYReBwnHqh3P)~`+s3+Tj!rDA1e)8vuBv5J*IsxC zkd^~b(aGzArj08{>cnzOuy04C+C`}gb|Yz-1avxeWzev3NzcHbz_&4W@QCr$z3~w=8Ua- z`;vfG1~BP8CyLb=F7t1am~ph_#|O%$khSJ9%Vtcn)YmpgQxF?xM^_Vb+5fnpB^W0I`f%X8gb9#X{Q-yJG0{Z56aWeI&zPxnf5pdJA38bM`cYnS#x)% z`n1tFf$i)W-hGm(f9mde^=X@NcV_lFb=P`4&CI&H=IArijGwdCk&X@uQ$5xmj!~^? z#$ROCI)V-~t%L%GS#wo@U27ddR`4`3)WoB{R-4snfNrfee|kI8^bu#yDgYqOwas9# zmcb`3!kRJ`Cr=_tq)8aMt{aGtUZsqwVlj6DgCGre>AEt&x8H_in!x@uwgExIh|-mA zjdaC(29~CTVSaaF7HPbql&*9Uo8P@f)>LqCXclr}peS7_1BQ28u9PO8Eq1@`l3q9o zkfKCaO2?T?ZyA6loW<#9_c^O=m<&h}CA!ineAD@=(gbq`vyT|tiJ6#^B1$P;;qax` z55k&Q?wEh#87niLo*+n4L@65J(Nz~=Ya%7^(miLb(E>A3B@|Jjl;FU&D>o|9#7PJH z?|ago!o;WC^h=|T7PVBg(DAB}72cyUS zb(f>Bwbr!F1eTCO5fpj<{PqhY5>143p?~5ZA5H40);=@M#MYvrB6gqHbU_!GSY??i z%s=>-ciA4*zOOZHds0a(kWewZ4h(k8h(ua7HX)Au&mY~H8KY6(_cb$_&fA@QjIW-*heP3%$d!m5^AdnT}`12qA^c@!g3DOwZ5WwE2?)-yU z!)Vx#Mtxt?FzFTwK!77sy7)sMzUd->w4^bxtpM2j!b1pjgyk zGKwWGeb4)^zjy{9Es&PU1}gwg?|J#L$KJB7ett9@4M%-nGtIQr0>Fl@8-yh`-+1ed zS6r}(MeSvgSoFmH*_WPu@i?}!AB~2?;i&IxrkNg~cQ9Som98tcq)k^|eeER|Zl77t za-TVUc;DNvzVXJ%w52+#weN?+;i#{f#!Oc&z?81*N>^e~ltRS%ZI@lR{rs()HmqG! zx*}ZrI-EZ}ckJMiy>A^oofwDfC~IH)z8{VHKGT@#E5I(Ll&+MnMCl>~AV7+>Gi%mF zkU1QlKASdR0B80!YhP<$Ywi0?W2Ux45oPfxv9QolWzJPD^weBfvo4SONxP35106sAmh(e+vAs0GboFD@PvNs)jNPvarhW}0YliZEg{Gazv z+JDIpoojRVPr<*C|BTq<`6ga{5q^8^!|0cxe=rZ!zxH3%f5ZO0cQ*Z<^$Yt2{|Ek0 zyT|*F+CO@K;(owBKtGg!S^xj-Z~rga2m6nxKl9J=fBSuNKW_dLKWhJKeg^-Xe`^1? z`TyJj)8E!#>_3Y?uKrwqq3LJ#SGU>AzUO|6`nR^u&3FNN_jGOc zw)Nw`wr3yIKhgcee6IaN=ws>M{6677%)hPwx&HzC(f&u~&)6@b2kNRzBDQAP0*H73 zq%McOmRk{B3i47qRe=DA*$&odrbEJZ*pV9XXa&p@wlW~@Yfs>V{yiTtplMhgM*-Bz zsSnlq&pG;z0OUN%$~$3=g1UF+G*>+17eRbBf3=y79J}KR8owon@$1Z7MIrvvWWH)34nK2SD)GsrJ{l z1Cl#oVo3A8qY3e=aF)qzms~FG#2$LzT=gs&aVMOj>(%{y<&O0cG!nCiESl~x=^dF{ zKvj8F1K8Ng171wwM5Fh4KoQw`_c6#y$(5cAm7e}~nJ#A*fx+c9;y#&W!#VukR)ugk zKp3=+;Ut+IYn%m+r4d*<`L2h%aDnX5}^!5R|H;(34AoVWjRx(msBZvk;rCI*|~ zdOijqI@9Z{Vu!~jvHW{lBa$rnl4+!s_5sfK3bCGk-B%iDe&@-}+%fOKU|(9?V1 zHE8&@4z)Kx!RAvAs z!Wic9=o#(bg?kc-G68-m(jZ`^=XGUXb)}t(%&~sjFnV^sEX%hSy6UKC4iOhgV=BHV z2w`4g7Y=s#Vu2B_?#VQ|hP39@eArgfX>-0S+dd&^mx0*wp}>)x;c4RUgxz%;oNe?& z-7-lJ@Y^2^C;=qJsxx5|xF)*pTGhch2B&kxtn;f!7=gznk}I3}Dh}(CoMXgA5-p&kS202!l?!fT3t|HG*rIP~mS* z$Wjo}jq3}z$Qq!9yrtd3fM0N629ZM?LU$nv@Tv9b7I;D|;0H2dsA~g7Z7zp1| zB)XmrkMgF6OQr|R)HHD^TE{Y#j!~SR?b`Xt3Qs`B+x<hxexYeAjMUWdZ-*n9%(1)Wb(n2U<><7&9dwGJmrob)4%H? zlQ%z+L-^$dFhhH|@u$%97Qz?*Ynh2VG@q|?8vY&L74&fs&_b&3$x&Oyjl~LQDRRap zJU4U*R+(2Dd!G+lh8!V{pT_UJn+^1Qg6$` zqkNm(a#hWyc6SP+p5=C4HL8-m`pO`5o~`-LI?_h5CsH?F_%?nDodmz&pWR20WTpJE z?N|wSzLjMUK8E)a2tI}Lf;+;*M|h3Y(U#>)g1>zk9|Hd}oZAa2 zLYBWBoSW!Ts!RwXr^8h+U*@{9{zqS^iH)Op<;r`Uw~nc}<^$V~_i%$GFjaG?X1@E|M`h)nekvFKt`Dh-f>@|0-`Xoq)o` zx;JmzDfOV9qCx|EVpogEe0LK~tGS?5$$L_i6P$P6wIsCQaP_;d{{N=iV@+8LI}o#( zvo*Ejy=IIn{rdIQh1&q-{EuohpVOjJ^Q3lD*YTp37$^RRgn8ihpdu5{Ct%5-KO!VL zcNB6dUajXI9jkm-P|i3~GB-A(X`P1Oqqb$tcku)UJw0w3GeUijb__#QT4j%64z%EeB7S?jlWwx_7&+EEvB|6N=kV}DwnyAlX=?j`) zmU#!$*^@NIu#n_d7;WoJV@*Fbv9|yJO4;n|BNF2xy(54RyB>t~8lUOUW$&2%Nwi1y zx6JxW88>U2$#qhl^6KUbtmg9}D0o5vYDT7kWJthLGkpGnN4T>{St^_EU>4;DmLF9o zr|LqsA8_MoNLQ=}w?8u!ziSZ@PC#Y<#9uJFo-ozVo6D;<8j^1$c|qAE3ZTE5i~zmE z$BU5lw6l=EWsg^y^;8>r9qH{xfL|~PZYK#md$zZ0?o11gV<*WSW~cgy2GYGQir%wf zt4iW8D+;s*;RGrmd(-T<@2&j(Cb9xhV*l-x`TpK`xq|7p?5R%5*s!69?2c!cC*VY* z2DE^9pvOPLU!1e}wA8S8opcTJ3`NB>hY=JQnL~QFXR4K8A$BqJnoEB$wn-%u@E6Mh zCfMF4kusv3N!(aHC}4)Xs^xoOwXd%e^6pi5|DZo=Q25j+6HlJ^7FodH6y1bMROR^q zGu6)fopS`h%Sw<;ZH%TEPf+#81-#_v+@8nlR0jLcIDKQtLleOC)6yLZgC!D9X3GgS zohwU{v$jl=quD#Go^hB{`@Qw*a%`(^jyT~=q^bWgGzRj;|12J55HWdCWV}EB|K=%N z3Nq-qxJJ`>^|1MNN+q}zTB&ooE3j==AgK@^UW<^oSbeALa2peF)Th6{@sj0KyMNHZ zksk1+MXN2tv+22A%cQOGpS9)77(uP9mh+!5T5ERLvF@b}$+WvXM45Z?-kCa)fb~f1 znVbTD$Gx-0Zxc`0D@YgHakge6SL0H`-vN_x?AP0>iGH0_EE&=v83hMJgaKAI0jJXm zVxVz;X<$v6WW7}fxROO7vr#YLP;;lij5VrX{;>7kK6TtOH&6|Ar^xo>00%+u$C4@# z>!jOt6*3><171+WxoZnKDTzJtDRw+T030;yI}~uV@9fCnei^I*j>Bp&mzP2d=FPb_ zCM*l_+$LDR3B*a!A$g#>xsrZvw0lckxmMg>0aQd7tPyN=t{dgXb;Ie+T8{fZH=gdu zM7Rg9c(kg(Jg0?ARRRl=AONFKrvFj)lTY$KfT%6^6s`mk*ABGhsce*LsoD>K{z_M2 ziPpnu+lw22PfF!CoId^6n*G4H(Ix+#+N{C(da7t1BYMGEaE#PdpOLxsVD5riQXHp@OX;`S`8VnpM~)I920w~<3|mo0 zf8~Az`*?2?H&gZ&*K&bRkV@qzvMlRHXys8*Ze2+1c?5o!^+$&MHxB@4Ee5cke52R! zmn7AZtY6ST%ixgU5)%$%QcwHj7Es-Qu^kLAPwy%7pGBw_4Q9#da^W2$}axNHr03)_nw z5?yuNmXrI5HgS46)c5&}B)Tts49oU92>3xBLLy}FMUW=84DQbVq^;7_e7|(Sdz|&J z73N+M`rc2rt*oSWu#7S{*s~nH6HRHJS1SmzeXk|;CA)FI4bat3<%}nkB%;;?=F>B7ms9QSxv#@+69;@>QaR?REYX4&)=itG>rM{<{A79Rmk)`5ON#GL`*KX%}Ihk3w(RtM-WLt z?f&FLF}4N^yE!(pZ&Yj&Bc`~K0@4_}*0Om?wN|}4WJ>WL;G^H2*QpgEkGA~OET-Km zkwz|5{6dnz1U<2Pe9DNL>3g5FEIvp1jzP&2K#z~j%g6!7B;^zF+o95?fV{3mnB8*RMhCDNp>Am-3e@jNfMj?jHV$MWjk!DDKP zkAz$Y?Sr)!GUOX}qTQ5aMh|wq1uq}~joWyKl=b_LboM#wi{CMuz5x6BKlA-qy++cM01D3b7`uD z#l6M4pI;JCypO8JZ6?U&wNxR!{4oB_ zlV!x9+-&Qy6{%MQ{~yoZGkKiTSC`YS_j22~G;xUV855g2&C(zm^V!(wpcm@zn{%!g z4}JGo(sGZ1O~to-}le

UmY2RIYtNPVDpE$%vda+HD#3m z&VuXJ{BK&Qe+rBa7eq}Q(bq|tn(RrJAk|ztj2(i{d>nmQnM?;HF2k&9sA6up5tmjl z7lySlzMbifH17-m-Lwa_F&e7nOH?ESi3#ckR3tsM+jsck3`oG!uMS}|eAwVXv>}qxwq?QY%QJ0}r@^;fhuUA9W z*BVl>TGo&N004@xSiwDUXUvp51sVmqO3m)=B55aPwf@0=e}cN+$-BdKxY`YrT_4)0 z_d10#i44Q*rFr8MC>*)v$EJvz``(pb{e&*6k+b zsMz%($|1+8hn8c2?P(l@;Rb&CsZeYoCI3?2!LqjbwPXW3z4G$Qfj=cT5Yb%vY0(AX oeb?AaKtwrnc|$|zzw9vfvn^aJJ!zd)XFXqqy0000001=f@-~a#s literal 0 HcmV?d00001 diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/values/colors.xml b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..f8c6127 --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/values/strings.xml b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..c193a1a --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + MA-UI-Native + \ No newline at end of file diff --git a/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/values/themes.xml b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..60c0ebc --- /dev/null +++ b/Anul 3/Semestrul 1/Mobile Applications/MA-Native/app/src/main/res/values/themes.xml @@ -0,0 +1,5 @@ + + + + {code} To reproduce: # Type {{",8 +APSTUD-7686,"NullPointerException when trying to get a UserAgent for JS code assist","An exception occasionally happens when performing a code assist on a JS file: {code} Exception in thread ""Aptana: ContentAssistant.assist_delay_timer_name"" org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NullPointerException) org.eclipse.swt.SWT.error(SWT.java:4282) org.eclipse.swt.SWT.error(SWT.java:4197) org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:196) org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150) org.eclipse.swt.widgets.Display.syncExec(Display.java:4613) com.aptana.editor.common.contentassist.ContentAssistant$AutoAssistListener.showAssist(ContentAssistant.java:456) com.aptana.editor.common.contentassist.ContentAssistant$AutoAssistListener.run(ContentAssistant.java:311) java.lang.Thread.run(Thread.java:680) Caused by: java.lang.NullPointerException com.aptana.core.internal.UserAgentManager.getUserAgentById(UserAgentManager.java:162) com.aptana.editor.common.contentassist.UserAgentManager.getUserAgentById(UserAgentManager.java:368) com.aptana.editor.common.contentassist.UserAgentManager.getUserAgentsByID(UserAgentManager.java:355) com.aptana.editor.common.contentassist.UserAgentManager.getActiveUserAgents(UserAgentManager.java:208) com.aptana.editor.common.contentassist.UserAgentManager.getUserAgentImages(UserAgentManager.java:309) com.aptana.editor.js.contentassist.JSContentAssistProcessor.addProposal(JSContentAssistProcessor.java:360) com.aptana.editor.js.contentassist.JSContentAssistProcessor.addKeywords(JSContentAssistProcessor.java:179) com.aptana.editor.js.contentassist.JSContentAssistProcessor.doComputeCompletionProposals(JSContentAssistProcessor.java:738) com.aptana.editor.common.CommonContentAssistProcessor.computeCompletionProposals(CommonContentAssistProcessor.java:417) com.aptana.editor.common.contentassist.ContentAssistant.computeCompletionProposals(ContentAssistant.java:2221) com.aptana.editor.common.contentassist.CompletionProposalPopup.computeProposals(CompletionProposalPopup.java:394) com.aptana.editor.common.contentassist.CompletionProposalPopup.access$7(CompletionProposalPopup.java:388) com.aptana.editor.common.contentassist.CompletionProposalPopup$1.run(CompletionProposalPopup.java:331) org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) com.aptana.editor.common.contentassist.CompletionProposalPopup.showProposals(CompletionProposalPopup.java:325) com.aptana.editor.common.contentassist.ContentAssistant$AutoAssistListener$1.run(ContentAssistant.java:468) org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135) org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3938) org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3615) org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701) org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665) org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499) org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679) org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668) org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) com.appcelerator.titanium.rcp.IDEApplication.start(IDEApplication.java:125) org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) org.eclipse.equinox.launcher.Main.run(Main.java:1410) org.eclipse.equinox.launcher.Main.main(Main.java:1386) {code}",5 +APSTUD-7812,"First launch of Connection Manager wizard enable all the radio button options ","Precondition: FTP step should be done. Test Steps: 1.Create a Titanium Project. 2.Open Connections node of the project with the FTP connection. 3.Observe the Connection Manager window for DESTINATION radio buttons.",5 +APSTUD-7814,"FTP:""Save as "" button doesn't perfom validation test on connection editor page","Precondition: FTP setup should be done. (http://appcelerator.testlodge.com/projects/1313/test_plans/3057) Connection Manager should have a FTP connection. Test Steps: 1.Create a Titanium Project and link the FTP connection from above. 2.In Project Explorer, open the Connections node of the project with the FTP connection. 3.Launch Connection window by doing double click on the FTP connection listed in the project's connections node (Project > connection > connection site) 4.Select ""save as"" button and make sure to mention same connection name which is opened. (screenshot attached) Expected Result: A validation check should be there which won't allow to save new connection with the existing one by using ""save as"" tab from connection window editor page",5 +APSTUD-7906,"Write script to update version numbers when we bump versions for Aptana Studio","We do a manual search and replace in a handful of files listed on a wiki page. We should automate this into a script.",13 +APSTUD-7721,"Errors break code folding","When using code folding in a ruby file, folded blocks automatically unfold with errors. Try this block of code: class FoldError def folded_function puts ""this unfolds automatically when you type def to create a new function"" end end Fold the folded_function then type ""def"" below, the folded_function automatically unfolds.",8 +APSTUD-7806,"i dont see the browsers compatibility tag in the assist code field",NULL,10 +APSTUD-7820,"php code inline formatting","inline php code will cause the formatter to fail. code: <?php echo """"; ?> Details from troubleshooter: !ENTRY com.aptana.formatter.epl 4 0 2013-04-16 07:49:23.033 !MESSAGE (Build 3.3.2.201302081546) [ERROR] Formatted content differ around position 308 INPUT: Title);?>< ",5 +APSTUD-7825,"Show Preview Window now loads FLUSH RIGHT only","h3. Steps to Reproduce load an HTML document and click on the Show Preview WIndow button from the toolbar. I just was upgraded to Aptana Studio 3 v. 3.4. Prior to this, the rendered HTML was always FLUSH left in the viewing screen. Info: Host OS: Mac OS X OS Version: 10.6.8 OS Arch: x86 JRE Version: 1.6.0_31 JRE Vendor: Apple Inc. JRE Home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home Aptana Studio 3 Version: 3.4.0.201304151603 Install Directory: file:/Applications/Aptana Studio 3/ Workspace Directory: file:/Users/teacher/Desktop/Aptana Studio 3 Workspace/ VM Arguments: -Xms40m -Xmx512m -Declipse.p2.unsignedPolicy=allow -Declipse.log.size.max=10000 -Declipse.log.backup.max=5 -Xdock:icon=../Resources/aptana.icns -XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts -XX:MaxPermSize=256m -Djava.class.path=/Applications/Aptana Studio 3/AptanaStudio3.app/Contents/MacOS//../../../plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar Language: en_US Node.JS Version: Not installed NPM Path: Not installed h3. Actual Result HTML loads FLUSH RIGHT ... see attached screen shot. h3. Expected Result LEFT JUSTIFICATION on the preview.",8 +APSTUD-7848,"Split SVG Editor plugin into core and UI plugins","We've combined core and UI code in the SVG editor plugin. For proper separation we should split the two apart as we did with the JS plugin.",13 +APSTUD-7878,power,"Steps to reproduce: step: Open the mozilla firefox browser step: Enter the url and type the google.com step: Click the gmail step: and open the username and password page step: enter the username step: enter the passwords step: click the passwords step: draw the defect point.",6 +APSTUD-8026,"Update PyDev to 3.0.0","The latest version Fabio has pushed on http://pydev.org is 3.0.0 , and we should include it in Aptana Studio. The source is on https://github.com/fabioz/Pydev. ",8 +APSTUD-8034,"Rad rails plug-in Not installing ","Hi tried to install the *RadRails* plugin option for Eclipse, from: * http://www.aptana.com/downloads/start The message comes along from Eclipse installer about a missing component for Aptana studio. The message doesn't really explain what version, plugin or other dependency is missing. I tried installing RadRails with the Aptana studio3, that wasn't really satisfactory since I want to use the up to date version of Eclipse for other tools. Is RadRails still a going concern? If so then, you really ought to display, prominently, the version(s) and dependencies required to install the plugin. For studio I'd recommend that you show what version of Eclipse the Aptana corresponds to in case I wanted to add a new feature from the market place.",3 +APSTUD-8061,"Javascript format shorthand modulo","// crashes: res['angle'] %= (2 * Math.PI); // works: res['angle'] = res['angle'] % (2 * Math.PI);",3 +APSTUD-8079,"PyDev no longer installed after update","h3. Steps to Reproduce Updated Aptana Studio 3 to new version. Note: Trying to install Pydev using the instructions here: http://download.appcelerator.com/aptana/studio3/pydev/update/stable/ gives the message that 'pydev is already installed'. But Pydev functionality is still not available, and the Preferences menu does not list Pydev. Reverting to Aptana Studio v3.4.1 restores the Pydev functionality. h3. Actual Result Afterward update of Aptana Studio 3, Pydev isn't installed and can't be reinstalled. h3. Expected Result Should be seamless, with no steps needed to reinstall Pydev or make sure it isn't clobbered by update.",8 +APSTUD-8082,"square brackets after round one ","statament like $var = $con->fetch_row()[0] is considered error;auto-format stop working. $var = $con->fetch_row(); $var1 = $var[0] is correct.",1 +APSTUD-8125,"intellisense (code completion)","so I've switched back to Visual Studio because of this issue, and won't be using Aptana until it's updated... when you're dealing with code completion and type ""myclass."", it doesn't specify all the internals until they're referenced at this level (within *this* function or class). VS may not have the very nice auto-completion features this has (which speeds up module development for me about 2x to 3x compaired to VS), but it's about 3x more informative about the code. I'll use this program again when I can be shown and reminded about everything I need to know about my code.",10 +APSTUD-8185," ""Automatically sync my changes with the remote site"" only syncs one way","In the deployment settings, ""Automatically sync my changes with the remote site"" is selected, and ""automatically sync in both directions"" is chosen. Opening a file on the remote connection, making a change and saving the file does not initiate a sync with the local copy of the file. The local copy remains unchanged. (Opening a file locally and saving does initiate a sync and updates the remote copy as expected.)",8 +APSTUD-8188,"Create shell EDT FTPj library","New contributors to Aptana are required to either download and install a trial version of the edtftpj library, or close all the FTP projects. To make it simpler, we should package a shell version of the library that can be replaced with the real version at compile time.",8 +APSTUD-8189,"Categorize core Aptana feature","When installing builds of the core feature, users need to uncheck ""Group items by category"" to see the builds to install.",3 +APSTUD-8217,"Windows: Aptana Studio Installer: Studio does not install JRE and hence fails installation","This is regression issue since earlier studio used to get installed with JRE successfully. *Steps To Replicate*: 1. Download *Aptana Studio RC build* 2. Try installing same on clean windows 7 machine. Actual: {color:red} *Some Prerequisite JRE could not be downloaded error appears. Refer screenshot.* {color} Expected: No error should appear. Installation must be successful. ",5 +APSTUD-8234,"Dialog reports call to nonexistent class in Eclipse 4.4 (Luna)","h3. Steps to Reproduce 1. Start Eclipse 2. See start-up dialog Note: I apparently wasn't the first to experience this bug. See here (especially the final comment): http://stackoverflow.com/a/19672674/2693146 h3. Actual Result A dialog pops up with the following text: An internal error occurred during: 'Enable debugging and flush log cache'. org/eclipse/osgi/framework/internal/core/FrameworkProperties h3. Expected Result No error dialog appears",5 +APSTUD-8254,"Still no CSS Code Assist in SCSS/SASS editor","It would be really great if the CSS Code Assist feature were enable in the SASS Editor. I feel like I'm losing half the speed I gain by using SCSS because I have to type out every single CSS property.",1 +APSTUD-8257,"Can't access connections row from Project Explorer","h3. Steps to Reproduce Create a project and open the Project Explorer window h3. Actual Result Don't show the connections row h3. Expected Result Be able to connect to remote servers via connections",5 +APSTUD-8259,"Aptana Studio 3 Crashes on Startup after Updating","I just installed an update for Aptana Studio and once I did, it would no longer open but would crash while loading, during the splash screen. I then updated my Java version and reinstalled Aptana Studio but still had the same problem. I am on Mac OS X 10.9.4. As suggested, I ran it from the terminal and here is the output: {code} tgmac$ /Applications/Aptana\ Studio\ 3/AptanaStudio3.app/Contents/MacOS/AptanaStudio3 !SESSION 2014-08-01 13:21:32.345 ----------------------------------------------- eclipse.buildId=unknown java.version=1.6.0_65 java.vendor=Apple Inc. BootLoader constants: OS=macosx, ARCH=x86, WS=cocoa, NL=en_US Framework arguments: -keyring /Users/thangrove/.eclipse_keyring -showlocation Command-line arguments: -os macosx -ws cocoa -arch x86 -keyring /Users/thangrove/.eclipse_keyring -consoleLog -showlocation !ENTRY org.eclipse.core.resources 2 10035 2014-08-01 13:21:43.412 !MESSAGE The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes. !ENTRY org.eclipse.core.net 1 0 2014-08-01 13:22:02.129 !MESSAGE System property http.nonProxyHosts has been set to local|*.local|169.254/16|*.169.254/16 by an external source. This value will be overwritten using the values from the preferences !ENTRY org.eclipse.ui.workbench 4 2 2014-08-01 13:22:04.129 !MESSAGE Problems occurred when invoking code from plug-in: ""org.eclipse.ui.workbench"". !STACK 0 java.lang.NullPointerException org.eclipse.ui.plugin.AbstractUIPlugin.imageDescriptorFromPlugin(AbstractUIPlugin.java:671) com.aptana.scripting.ui.ScriptingUIPlugin.getImageDescriptor(ScriptingUIPlugin.java:71) com.aptana.scripting.ui.ScriptingConsole.(ScriptingConsole.java:68) com.aptana.scripting.ui.ScriptingConsole.getInstance(ScriptingConsole.java:42) com.aptana.scripting.ui.ScriptingConsoleStartup.earlyStartup(ScriptingConsoleStartup.java:25) org.eclipse.ui.internal.EarlyStartupRunnable.runEarlyStartup(EarlyStartupRunnable.java:87) org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:66) org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) org.eclipse.ui.internal.Workbench$55.run(Workbench.java:2555) org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) !ENTRY org.eclipse.ui 4 4 2014-08-01 13:22:04.186 !MESSAGE Unhandled Exception !ENTRY com.aptana.scripting.ui 4 0 2014-08-01 13:22:04.186 !MESSAGE Unable to execute early startup code for an extension !STACK 0 java.lang.NullPointerException org.eclipse.ui.plugin.AbstractUIPlugin.imageDescriptorFromPlugin(AbstractUIPlugin.java:671) com.aptana.scripting.ui.ScriptingUIPlugin.getImageDescriptor(ScriptingUIPlugin.java:71) com.aptana.scripting.ui.ScriptingConsole.(ScriptingConsole.java:68) com.aptana.scripting.ui.ScriptingConsole.getInstance(ScriptingConsole.java:42) com.aptana.scripting.ui.ScriptingConsoleStartup.earlyStartup(ScriptingConsoleStartup.java:25) org.eclipse.ui.internal.EarlyStartupRunnable.runEarlyStartup(EarlyStartupRunnable.java:87) org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:66) org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) org.eclipse.ui.internal.Workbench$55.run(Workbench.java:2555) org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) ***WARNING: Display must be created on main thread due to Cocoa restrictions. !ENTRY org.eclipse.core.jobs 4 2 2014-08-01 13:22:04.861 !MESSAGE An internal error occurred during: ""Start Ruble bundle manager"". !STACK 0 java.lang.NullPointerException com.aptana.filewatcher.FileWatcherPlugin.log(FileWatcherPlugin.java:71) com.aptana.filewatcher.FileWatcherPlugin.log(FileWatcherPlugin.java:66) com.aptana.filewatcher.FileWatcher.instance(FileWatcher.java:51) com.aptana.filewatcher.FileWatcher.addWatch(FileWatcher.java:71) com.aptana.filewatcher.FileWatcher.addWatch(FileWatcher.java:65) com.aptana.scripting.internal.model.BundleMonitor.beginMonitoring(BundleMonitor.java:123) com.aptana.scripting.ScriptingActivator$1.run(ScriptingActivator.java:114) org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) !ENTRY org.eclipse.ui 4 0 2014-08-01 13:22:04.895 !MESSAGE Error occurred during status handling !STACK 0 org.eclipse.swt.SWTException: Invalid thread access org.eclipse.swt.SWT.error(SWT.java:4397) org.eclipse.swt.SWT.error(SWT.java:4312) org.eclipse.swt.SWT.error(SWT.java:4283) org.eclipse.swt.widgets.Display.error(Display.java:1076) org.eclipse.swt.widgets.Display.createDisplay(Display.java:833) org.eclipse.swt.widgets.Display.create(Display.java:816) org.eclipse.swt.graphics.Device.(Device.java:130) org.eclipse.swt.widgets.Display.(Display.java:707) org.eclipse.swt.widgets.Display.(Display.java:698) org.eclipse.swt.widgets.Display.getDefault(Display.java:1396) org.eclipse.ui.statushandlers.WorkbenchErrorHandler.handle(WorkbenchErrorHandler.java:67) org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler.handle(IDEWorkbenchErrorHandler.java:108) com.aptana.rcp.IDEWorkbenchAdvisor$5.handle(IDEWorkbenchAdvisor.java:839) org.eclipse.ui.internal.WorkbenchErrorHandlerProxy.handle(WorkbenchErrorHandlerProxy.java:36) org.eclipse.ui.statushandlers.StatusManager.handle(StatusManager.java:189) org.eclipse.ui.internal.progress.ProgressManager$2.done(ProgressManager.java:467) org.eclipse.core.internal.jobs.JobListeners$3.notify(JobListeners.java:39) org.eclipse.core.internal.jobs.JobListeners.doNotify(JobListeners.java:96) org.eclipse.core.internal.jobs.JobListeners.done(JobListeners.java:152) org.eclipse.core.internal.jobs.JobManager.endJob(JobManager.java:647) org.eclipse.core.internal.jobs.WorkerPool.endJob(WorkerPool.java:105) org.eclipse.core.internal.jobs.Worker.run(Worker.java:70) !ENTRY org.eclipse.core.jobs 4 2 2014-08-01 13:22:04.899 !MESSAGE An internal error occurred during: ""Start Ruble bundle manager"". !STACK 0 java.lang.NullPointerException com.aptana.filewatcher.FileWatcherPlugin.log(FileWatcherPlugin.java:71) com.aptana.filewatcher.FileWatcherPlugin.log(FileWatcherPlugin.java:66) com.aptana.filewatcher.FileWatcher.instance(FileWatcher.java:51) com.aptana.filewatcher.FileWatcher.addWatch(FileWatcher.java:71) com.aptana.filewatcher.FileWatcher.addWatch(FileWatcher.java:65) com.aptana.scripting.internal.model.BundleMonitor.beginMonitoring(BundleMonitor.java:123) com.aptana.scripting.ScriptingActivator$1.run(ScriptingActivator.java:114) org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) !ENTRY org.eclipse.core.jobs 2 2 2014-08-01 13:22:05.222 !MESSAGE Job found still running after platform shutdown. Jobs should be canceled by the plugin that scheduled them during shutdown: com.aptana.scripting.model.BundleManager$BundleLoadJob Job found still running after platform shutdown. Jobs should be canceled by the plugin that scheduled them during shutdown: com.aptana.scripting.model.BundleManager$BundleLoadJob !ENTRY org.eclipse.core.jobs 2 2 2014-08-01 13:22:05.223 !MESSAGE Job found still running after platform shutdown. Jobs should be canceled by the plugin that scheduled them during shutdown: org.eclipse.ui.internal.Workbench$55 Job found still running after platform shutdown. Jobs should be canceled by the plugin that scheduled them during shutdown: org.eclipse.ui.internal.Workbench$55 !ENTRY org.eclipse.core.jobs 2 2 2014-08-01 13:22:05.223 !MESSAGE Job found still running after platform shutdown. Jobs should be canceled by the plugin that scheduled them during shutdown: com.aptana.scripting.model.BundleManager$BundleLoadJob Job found still running after platform shutdown. Jobs should be canceled by the plugin that scheduled them during shutdown: com.aptana.scripting.model.BundleManager$BundleLoadJob !ENTRY org.eclipse.ui 4 4 2014-08-01 13:22:05.361 !MESSAGE Unhandled Exception !ENTRY org.eclipse.equinox.p2.ui.sdk.scheduler 4 0 2014-08-01 13:22:05.362 !MESSAGE Unable to execute early startup code for an extension !STACK 1 org.eclipse.core.runtime.CoreException: Plug-in ""org.eclipse.equinox.p2.ui.sdk.scheduler"" was unable to instantiate class ""org.eclipse.equinox.internal.p2.ui.sdk.scheduler.AutomaticUpdateScheduler"". org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.throwException(RegistryStrategyOSGI.java:194) org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:186) org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905) org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243) org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55) org.eclipse.ui.internal.WorkbenchPlugin$1.run(WorkbenchPlugin.java:282) org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:52) org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:278) org.eclipse.ui.internal.EarlyStartupRunnable.getExecutableExtension(EarlyStartupRunnable.java:117) org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:66) org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) org.eclipse.ui.internal.Workbench$55.run(Workbench.java:2555) org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) Caused by: java.lang.NullPointerException org.eclipse.equinox.internal.p2.ui.sdk.scheduler.AutomaticUpdateScheduler.(AutomaticUpdateScheduler.java:73) sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) java.lang.reflect.Constructor.newInstance(Constructor.java:513) java.lang.Class.newInstance0(Class.java:357) java.lang.Class.newInstance(Class.java:310) org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:184) ... 11 more !SUBENTRY 1 org.eclipse.equinox.registry 4 1 2014-08-01 13:22:05.363 !MESSAGE Plug-in ""org.eclipse.equinox.p2.ui.sdk.scheduler"" was unable to instantiate class ""org.eclipse.equinox.internal.p2.ui.sdk.scheduler.AutomaticUpdateScheduler"". !STACK 0 java.lang.NullPointerException org.eclipse.equinox.internal.p2.ui.sdk.scheduler.AutomaticUpdateScheduler.(AutomaticUpdateScheduler.java:73) sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) java.lang.reflect.Constructor.newInstance(Constructor.java:513) java.lang.Class.newInstance0(Class.java:357) java.lang.Class.newInstance(Class.java:310) org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:184) org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905) org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243) org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55) org.eclipse.ui.internal.WorkbenchPlugin$1.run(WorkbenchPlugin.java:282) org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:52) org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:278) org.eclipse.ui.internal.EarlyStartupRunnable.getExecutableExtension(EarlyStartupRunnable.java:117) org.eclipse.ui.internal.EarlyStartupRunnable.run(EarlyStartupRunnable.java:66) org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) org.eclipse.ui.internal.Workbench$55.run(Workbench.java:2555) org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) ***WARNING: Display must be created on main thread due to Cocoa restrictions. !ENTRY org.eclipse.core.jobs 4 2 2014-08-01 13:22:05.376 !MESSAGE An internal error occurred during: ""Loading bundle: /Applications/Aptana Studio 3/configuration/org.eclipse.osgi/bundles/90/1/.cp/bundles/capistrano.ruble"". !STACK 0 java.lang.LinkageError: Error reading class bytes: org.jruby.Ruby org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:558) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:492) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:465) org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216) org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395) org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464) org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421) org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412) org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) java.lang.ClassLoader.loadClass(ClassLoader.java:247) org.jruby.RubyInstanceConfig.(RubyInstanceConfig.java:400) org.jruby.embed.internal.AbstractLocalContextProvider.(AbstractLocalContextProvider.java:42) org.jruby.embed.internal.SingletonLocalContextProvider.(SingletonLocalContextProvider.java:88) org.jruby.embed.ScriptingContainer.getProviderInstance(ScriptingContainer.java:243) org.jruby.embed.ScriptingContainer.(ScriptingContainer.java:221) org.jruby.embed.ScriptingContainer.(ScriptingContainer.java:207) com.aptana.scripting.ScriptingEngine.createScriptingContainer(ScriptingEngine.java:74) com.aptana.scripting.ScriptingEngine.getScriptingContainer(ScriptingEngine.java:230) com.aptana.scripting.ScriptingEngine.getInitializedScriptingContainer(ScriptingEngine.java:289) com.aptana.scripting.model.ScriptLoadJob.run(ScriptLoadJob.java:76) com.aptana.scripting.model.AbstractScriptRunner.run(AbstractScriptRunner.java:144) com.aptana.scripting.model.AbstractScriptRunner.run(AbstractScriptRunner.java:180) com.aptana.scripting.ScriptingEngine.runScript(ScriptingEngine.java:274) com.aptana.scripting.ScriptingEngine.runScript(ScriptingEngine.java:243) com.aptana.scripting.model.BundleManager.loadScript(BundleManager.java:2032) com.aptana.scripting.model.BundleManager$BundleLoadJob.run(BundleManager.java:129) org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) Caused by: java.util.zip.ZipException: ZipFile closed java.util.zip.ZipFile.ensureOpenOrZipException(ZipFile.java:427) java.util.zip.ZipFile.access$1100(ZipFile.java:31) java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:459) java.util.zip.ZipFile$1.fill(ZipFile.java:244) java.util.zip.InflaterInputStream.read(InflaterInputStream.java:141) org.eclipse.osgi.baseadaptor.bundlefile.ZipBundleEntry$ZipBundleEntryInputStream.read(ZipBundleEntry.java:157) org.eclipse.osgi.internal.baseadaptor.AdaptorUtil.getBytes(AdaptorUtil.java:247) org.eclipse.osgi.baseadaptor.bundlefile.BundleEntry.getBytes(BundleEntry.java:96) org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:554) ... 26 more !ENTRY org.eclipse.ui 4 0 2014-08-01 13:22:05.377 !MESSAGE Error occurred during status handling !STACK 0 org.eclipse.swt.SWTException: Invalid thread access org.eclipse.swt.SWT.error(SWT.java:4397) org.eclipse.swt.SWT.error(SWT.java:4312) org.eclipse.swt.SWT.error(SWT.java:4283) org.eclipse.swt.widgets.Display.error(Display.java:1076) org.eclipse.swt.widgets.Display.createDisplay(Display.java:833) org.eclipse.swt.widgets.Display.create(Display.java:816) org.eclipse.swt.graphics.Device.(Device.java:130) org.eclipse.swt.widgets.Display.(Display.java:707) org.eclipse.swt.widgets.Display.(Display.java:698) org.eclipse.swt.widgets.Display.getDefault(Display.java:1396) org.eclipse.ui.statushandlers.WorkbenchErrorHandler.handle(WorkbenchErrorHandler.java:67) org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler.handle(IDEWorkbenchErrorHandler.java:108) com.aptana.rcp.IDEWorkbenchAdvisor$5.handle(IDEWorkbenchAdvisor.java:839) org.eclipse.ui.internal.WorkbenchErrorHandlerProxy.handle(WorkbenchErrorHandlerProxy.java:36) org.eclipse.ui.statushandlers.StatusManager.handle(StatusManager.java:189) org.eclipse.ui.internal.progress.ProgressManager$2.done(ProgressManager.java:467) org.eclipse.core.internal.jobs.JobListeners$3.notify(JobListeners.java:39) org.eclipse.core.internal.jobs.JobListeners.doNotify(JobListeners.java:96) org.eclipse.core.internal.jobs.JobListeners.done(JobListeners.java:152) org.eclipse.core.internal.jobs.JobManager.endJob(JobManager.java:647) org.eclipse.core.internal.jobs.WorkerPool.endJob(WorkerPool.java:105) org.eclipse.core.internal.jobs.Worker.run(Worker.java:70) ***WARNING: Display must be created on main thread due to Cocoa restrictions. !ENTRY org.eclipse.core.jobs 4 2 2014-08-01 13:22:05.379 !MESSAGE An internal error occurred during: ""Loading bundle: /Applications/Aptana Studio 3/configuration/org.eclipse.osgi/bundles/46/1/.cp/bundles/php.ruble"". !STACK 0 java.lang.LinkageError: org/jruby/Ruby org.jruby.RubyInstanceConfig.(RubyInstanceConfig.java:400) org.jruby.embed.internal.AbstractLocalContextProvider.(AbstractLocalContextProvider.java:42) org.jruby.embed.internal.SingletonLocalContextProvider.(SingletonLocalContextProvider.java:88) org.jruby.embed.ScriptingContainer.getProviderInstance(ScriptingContainer.java:243) org.jruby.embed.ScriptingContainer.(ScriptingContainer.java:221) org.jruby.embed.ScriptingContainer.(ScriptingContainer.java:207) com.aptana.scripting.ScriptingEngine.createScriptingContainer(ScriptingEngine.java:74) com.aptana.scripting.ScriptingEngine.getScriptingContainer(ScriptingEngine.java:230) com.aptana.scripting.ScriptingEngine.getInitializedScriptingContainer(ScriptingEngine.java:289) com.aptana.scripting.model.ScriptLoadJob.run(ScriptLoadJob.java:76) com.aptana.scripting.model.AbstractScriptRunner.run(AbstractScriptRunner.java:144) com.aptana.scripting.model.AbstractScriptRunner.run(AbstractScriptRunner.java:180) com.aptana.scripting.ScriptingEngine.runScript(ScriptingEngine.java:274) com.aptana.scripting.ScriptingEngine.runScript(ScriptingEngine.java:243) com.aptana.scripting.model.BundleManager.loadScript(BundleManager.java:2032) com.aptana.scripting.model.BundleManager$BundleLoadJob.run(BundleManager.java:129) org.eclipse.core.internal.jobs.Worker.run(Worker.java:53) !ENTRY org.eclipse.ui 4 0 2014-08-01 13:22:05.379 !MESSAGE Error occurred during status handling !STACK 0 org.eclipse.swt.SWTException: Invalid thread access org.eclipse.swt.SWT.error(SWT.java:4397) org.eclipse.swt.SWT.error(SWT.java:4312) org.eclipse.swt.SWT.error(SWT.java:4283) org.eclipse.swt.widgets.Display.error(Display.java:1076) org.eclipse.swt.widgets.Display.createDisplay(Display.java:833) org.eclipse.swt.widgets.Display.create(Display.java:816) org.eclipse.swt.graphics.Device.(Device.java:130) org.eclipse.swt.widgets.Display.(Display.java:707) org.eclipse.swt.widgets.Display.(Display.java:698) org.eclipse.swt.widgets.Display.getDefault(Display.java:1396) org.eclipse.ui.statushandlers.WorkbenchErrorHandler.handle(WorkbenchErrorHandler.java:67) org.eclipse.ui.internal.ide.IDEWorkbenchErrorHandler.handle(IDEWorkbenchErrorHandler.java:108) com.aptana....",3 +APSTUD-8260,"Editor: Horizontal scroll bar flickers constantly","h3. Steps to Reproduce Open a large file and keep pressing the arrows and/or typing anything, you should see every time a horizonal scroll bar on the bottom of the editor window appearing and disappearing very quickly. h3. Actual Result Everytime I type, this horizonal scrollbar keeps appearing and disappearing. h3. Expected Result No scrollbar appearing and disappearing.",8 +APSTUD-8262,"Web Page Preview Function Missing","h3. Steps to Reproduce 1.update or clean installation Aptana 3.6.0 on Mac 2.Web page preview icon missing from toolbar h3. Actual Result replace by Aptana home page icon h3. Expected Result I need web page preview icon back.",5 +APSTUD-8264,"After upgrade to 3.6 switching workspaces requires forcequit","This has happened every time I needed to switch workspaces. Aptana closes like usual, but never opens up the new workspace. In fact, related perhaps, Aptana does not actually close when I quit either. The only way I can use Aptana again is by force closing through the Mac OS force close interface. It will then open and ask my which workspace I want. I have about 6 workspaces I switch between frequently. Prior to the upgrade I did not have any problems switching spaces. Also noticed that the ""connections"" node is missing as is the App Explorer tab. Developing js, html, css and php (no python, no mobile apps, no mysql). Thanks and let me know what other information might be helpful to you. Brian",5 +APSTUD-8272,"Aptana Windows does not install Git or Java.","The setup page at http://aptana.com/downloads/start says: ""The Windows installer includes a compatible version of Java."" and ""On Windows, we recommend PortableGit from msysgit because we also require its bash shell for executing commands. If you don't have msysgit installed, Studio 3 will offer to install it for its own internal use."" Neither is installed by default or available via the Windows installer. Either they should be added to the installer, or the website should be updated to reflect.",2 +APSTUD-8293,"Aptana Studio crash with exit code 13","When i downloaded and installed Aptana Studio 3.6. I can't launch Aptana Studio 3.6 (see attach image) so i can't code any thing. If I install Aptana Studio 3.4.2 then upgrade to this version, this problem didn't happen. I think JDK not support this aptana version. reproduce 100% on my system.",1 +APSTUD-8296,"No internal HTML Preview Button in Aptana Eclipse Plugin","The internal HTML preview button is not available. See screenshots of 1. GUI and 2. perspective customization dialogue",1 +APSTUD-8362,"Aptana Studio 3 gets killed after scrolling or opening file in RoR application. Assertion from cairo fails.","From centos 6.6 terminal, when an Ruby on rails application is launched, and any file is opened for editing, editor gets closed/killed. Below error is logged on command line/terminal. java: cairo-misc.c:380: _cairo_operator_bounded_by_source: Assertion `NOT_REACHED' failed. ",8 +APSTUD-8368,"Issue configuring Bitnami Django stack with Aptana"," 1 2 3 4 5 6 7 8 9 10 Tried to follow this link http://helpdesk.bitnami.com/entries/21311814-Django-How-to-configure-Django-with-Aptana-or-Eclipse- Copied the AptanaStudio3 to /opt/ folder And got this issue $ source djangostack-1.6.7-1/scripts/setenv.sh $ /opt/Aptana_Studio_3/AptanaStudio3 /opt/Aptana_Studio_3/AptanaStudio3: symbol lookup error: /usr/lib/i386-linux-gnu/libgdk-x11-2.0.so.0: undefined symbol: cairo_xlib_surface_create ",1 +APSTUD-8374,"Syntax Error incorrectly reported","The following line reports as a syntax error but works as expected by php while(msg_stat_queue($seg)['msg_qnum']>0){ msg_receive($seg, $argv[2], $msgtype, 40960, $msg); echo ""Message pulled from queue - id:{$msg->id}, name:{$msg->name} \n""; $msgtype = NULL; $msg = NULL; } the line while(msg_stat_queue($seg)['msg_qnum']>0){ reports as a syntax error, i realise this is a weird error, but it still shows as a syntax error when the syntax is correct ",1 +APSTUD-8406,"Aptana Fails to launch on OS X El Capitan (10.11)","Java SE 6 is no longer supported in OS X El Capitan and there will be no further support added for it, this in turn stops Aptana from starting, i have tried installing the SDK for 8+ and it still doesn't work",1 +APSTUD-8476,Install,"During execution of Aptana_Studio_3_Setup_3.6.1.exe, downloading prerequisite software : ""Failed to correctly acquire installer_nodejs_windows.msi file: CRC error Note that nodejs is already installed on the PC, version 0.10.13.0. Thank's, P. Constans.",1 diff --git a/Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/bamboo.csv b/Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/bamboo.csv new file mode 100644 index 0000000..ed8f4a3 --- /dev/null +++ b/Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/bamboo.csv @@ -0,0 +1,522 @@ +issuekey,title,description,storypoint +BAM-65,"Allows CVS repo to timeout and report on locking issues","Sometimes, when you perform a CVS action you get something like {noformat} cvs update: [01:38:32] waiting for mchai's lock in /cvsroot/atlassian/maven2test/bamboo {noformat} so Bamboo would probably just hang and become not so happy. We should allow Bamboo to timeout, or conditionally stop and tell the user how to dix the problem",3 +BAM-932,"allow a build to be placed at the head of the build queue... (or edit the queue order)",NULL,2 +BAM-3476,"Result not saved when checkout fails","Happened yesterday on our hosted bamboo: https://gdansk.bamboo2.atlassian.com/browse/INT-TST Bamboo was upgraded from 2.0.5 to 2.15 I had build log messages like: {noformat} 29-Jan-2009 03:12:23 Build INT-TST-1067 started building on agent Default Agent 29-Jan-2009 03:12:23 Updating source code to revision: 26986 29-Jan-2009 03:12:23 Source found at '/opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST'. Updating source... 29-Jan-2009 03:12:24 /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST/src/test/java/com/atlassian/theplugin/idea 29-Jan-2009 03:12:24 /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST/src/test/java/com/atlassian/theplugin 29-Jan-2009 03:12:24 /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST/src/test/java/com/atlassian 29-Jan-2009 03:12:24 /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST/src/test/java/com 29-Jan-2009 03:12:24 /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST/src/test/java 29-Jan-2009 03:12:24 /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST/src/test 29-Jan-2009 03:12:24 /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST/src/main/java/com/atlassian/theplugin/idea/jira 29-Jan-2009 03:12:24 /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST/src/main/java/com/atlassian/theplugin/idea/crucible/tree 29-Jan-2009 03:12:24 U /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST/src/main/java/com/atlassian/theplugin/idea/crucible/editor/OpenDiffToolAction.java 29-Jan-2009 03:12:24 U /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST/src/main/java/com/atlassian/theplugin/idea/crucible/editor/CrucibleEditorFactoryListener.java 29-Jan-2009 03:12:25 Error occurred while executing the build for INT-TST-1067 : Unable to retrieve source code to '26986' for 'INT-TST' 29-Jan-2009 03:15:23 Change detection found 11 changes 29-Jan-2009 03:15:23 Build INT-TST-1068 started building on agent Default Agent {noformat} {noformat} 29-Jan-2009 03:30:13 Build INT-TST2-1 started building on agent Default Agent 29-Jan-2009 03:30:13 Updating source code to latest 29-Jan-2009 03:30:13 Working directory '/opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2' is empty. Checking out SVN URL 'https://studio.atlassian.com/svn/PL/trunk/atlassian-intellij-connector' 29-Jan-2009 03:30:15 U /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/LICENSE 29-Jan-2009 03:30:15 U /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/atlassian-idea-plugin.ipr 29-Jan-2009 03:30:15 A /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/doc 29-Jan-2009 03:30:16 Error occurred while executing the build for INT-TST2-1 : Failed to checkout source code to revision 'HEAD' for https://studio.atlassian.com/svn/PL/trunk/atlassian-intellij-connector 29-Jan-2009 03:34:06 Manual build triggered by wseliga 29-Jan-2009 03:34:06 Build INT-TST2-2 started building on agent Default Agent 29-Jan-2009 03:34:06 Updating source code to latest 29-Jan-2009 03:34:06 Source found at '/opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2'. Updating source... 29-Jan-2009 03:34:09 D /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/doc 29-Jan-2009 03:34:09 A /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/src 29-Jan-2009 03:34:09 A /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/src/test 29-Jan-2009 03:34:09 A /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/src/test/java 29-Jan-2009 03:34:09 A /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/src/test/java/docs 29-Jan-2009 03:34:09 A /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/src/test/java/com 29-Jan-2009 03:34:09 A /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/src/test/java/com/atlassian 29-Jan-2009 03:34:09 A /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/src/test/java/com/atlassian/theplugin 29-Jan-2009 03:34:09 A /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/src/test/java/com/atlassian/theplugin/bamboo 29-Jan-2009 03:34:09 A /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/src/test/java/com/atlassian/theplugin/bamboo/api 29-Jan-2009 03:34:09 A /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/src/test/java/com/atlassian/theplugin/idea 29-Jan-2009 03:34:09 U /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/src/test/java/com/atlassian/theplugin/idea/GenericServerConfigurationFormTest.java 29-Jan-2009 03:34:09 A /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-TST2/src/test/java/com/atlassian/theplugin/idea/bamboo 29-Jan-2009 03:34:10 Error occurred while executing the build for INT-TST2-2 : Unable to retrieve source code to 'null' for 'INT-TST2 {noformat} or {noformat} U /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-CS/src/main/java/com/atlassian/theplugin/idea/crucible/CrucibleRevisionsNumber.java 29-Jan-2009 03:37:10 U /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-CS/src/main/java/com/atlassian/theplugin/idea/crucible/tree/ReviewItemTreePanel.java 29-Jan-2009 03:37:10 /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-CS/src/main/java/com/atlassian/theplugin/idea/crucible/tree 29-Jan-2009 03:37:10 U /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-CS/src/main/java/com/atlassian/theplugin/idea/crucible/CrucibleCreatePostCommitReviewForm.java 29-Jan-2009 03:37:10 D /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-CS/src/main/java/com/atlassian/theplugin/idea/crucible/editor/EditorDiffActionImpl.java 29-Jan-2009 03:37:10 D /opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-CS/src/main/java/com/atlassian/theplugin/idea/crucible/editor/EditorUpdateDiffActionImpl.java 29-Jan-2009 03:37:11 Error occurred while executing the build for INT-CS-1177 : Unable to retrieve source code to '26987' for 'INT-CS' 29-Jan-2009 03:38:20 Purging the checked out code from ""/opt/j2ee/domains/bamboo2.atlassian.com/gdansk/webapps/data/bamboo-2.0.2-attempt/xml-data/build-dir/INT-CS"" 29-Jan-2009 03:38:30 Manual build triggered by wseliga 29-Jan-2009 03:38:30 Build INT-CS-1178 started building on agent Default Agent 29-Jan-2009 03:38:30 Updating source code to revision: 26987 {noformat} However executing svn co from command line on exactly the same host where Bamboo was installed (with the same credentials even) worked fine. There were two problems: * Bamboo did bump up build number and this build failed, but nowhere it was really shown. I.e. on dashboard (and via remote API) I still got last build as successful. And although my build number (in above logs) was now greater than 1000, Bamboo claimed on dashboard and via API that the last build is e.g. 500 (which happened to be the last one before these problems started) * Cleaning working dir or full checkout did not help * I solved this problem by full clean and using anonymous SVN access or my private account. Only then Bamboo finally showed new build on dashboard (with number > 1000) and its real status. I suspect the problem may be also somehow connected to our SVN server which could have applied some security policies to avoid DOS attacks from Bamboo (Bamboo every 3 minutes - above 500 hundred times) was trying to checkout from svn the sources without success. ",2 +BAM-3612,"Talkback from elastic agent to bamboo server to include EBS volume mount results","When an elastic instance/agent is configured to mount a ebs volume containing a snapshot during startup the progress/success/fail should be fed back to bamboo server for display. the log in /tmp/setupEbsSnapshot.log could be used to process progress and results.",2 +BAM-3616,"Users can see the maven module (groupid, artifactid, version) against each plan.","* Should respect the sub-working directory. Only look for poms under the sub-working directory * Only read top level pom for modules * Pom is read only when building. * This is only read only * Each plan may have multiple artifacts",5 +BAM-3620,"PostBuildProcessor plugin to kick off the Maven pom.xml parsing","Consider running on remote agents. Can functional test the PostBuilderProcessor plugin behavior. ",2 +BAM-3621,"Get Bamboo functional tests passing in the cloud",NULL,5 +BAM-3626,"Allow gadget server plugin to be incorporated into Bamboo.","Does not include OAuth, nor SAL Read this for more details: http://extranet.atlassian.com/display/BAMBOO/Plugins+2+Estimate ",5 +BAM-3631,"Implement SAL part 1","The goal was Goal to get 100% compatible with the SAL compatibility kit however we are only tackling a subset of SAL implementation. We should figure how much of the compatibility kit we are targeting. NOTE - I changed this from 8 storypoints to 5 given that we are not tackling all of SAL. ",5 +BAM-3633,"Implement SAL part 2","This is the remaining work for SAL. See BAM-3631 for part 1.",8 +BAM-3634,"Alert users of builds which can not be built by any agents","Bamboo should alert the user if a Plan can not be built for a period of time. This should be set by default and overridden or removed by the user if necessary. This will avoid the following: !http://img.skitch.com/20090310-fk3547se8py75u3pr1g2g4mfux.jpg!",1 +BAM-3676,"Reliably Reproduce ""BAM-3244 Fix hanging agents""",NULL,8 +BAM-3679,"Patch ActiveMQ to fix the code problem to fix hanging agent problem","relies on BAM-3676. this is the minimal patch that we could ship to customers. this does NOT imply creating a activeMQ branch that Atlassian maintain, etc, etc.",3 +BAM-3681,"Reproduce BAM-3643 - Extreme CPU spike on BEAC","We have little idea what this could be and have not had much success repro'ing it.",12 +BAM-3683,"BAM-3495 Fixing borked status",NULL,8 +BAM-3685,"Support bundled plugins in Bamboo",NULL,5 +BAM-3693,"Add the ability to sleep before collecting artifacts to a bamboo agent","When the build ends, bamboo sweeps up the artifacts. I'd like a system property on the agent which could introducce a small sleep. This would be to allow the build to settle down and save all its artifacts before the agent comes along to collect them.",2 +BAM-3695,"Bamboo Specfic Functional Tests for SAL Intefaces","All the CTK testing plugin does is generic testing that the interfaces return something. We need to write some Bamboo specific tests which ensure Bamboo is actually doing the right thing underneath those SAL calls. ",3 +BAM-3718,"Implement SAL Interfaces Part 3","Implement the interfaces which didn't make it into the last milestone. See this page for details on which items missed out http://extranet.atlassian.com/display/BAMBOO/Bamboo+SAL+Compatability+-+Work+In+Progress",5 +BAM-3724,"Spike - Deploy gadget server into Bamboo with a Hello world gadget to prove it","Estimates to include infrastructure Assuming plugins 2 is done depends on implement SAL pt 2 No Authentication mechanism yet See where this can be consumed. Not sure if Ref App can consume. Timebox this spike to 1 person iteration ",12 +BAM-3728,"BAM-3674 (Regression) - Incorrect display of faiing since test","Investigation required Keep Sam Berlin Happy To be done on stable branch for 2.2.2 ",5 +BAM-3731,"BAM-3717 (Regression) - :: in test names throws error","Need to escape properly To be done on stable branch for 2.2.2 ",2 +BAM-3733,"Implement Bundled Plugins Part 2","Delivery mechanism for the Gadget server. Try plugin that is known to work (SAL) ",1 +BAM-3735,"REST Module type plugin point","Drop in the plugin ",2 +BAM-3737,"REST endpoint for build status gadget","Requires mockups done ",3 +BAM-3740,"Gadget - User can authenticate through a gadget","This means manual username/password must be inputted. Should use basic auth Not OAuth (will be obselete with OAuth) ",3 +BAM-3742,"Gadget - User can see the status of favourite plans ","interactions are links back to the server only Edwin to get UI teams to give some mock ups ",5 +BAM-3745,"Gadget - User can see the status of the recent 5 builds of favourite plans in the existing status gadget","Just the display. REST should provide info Need mockup for this - story assume that mockup is there already ",3 +BAM-3748,"Gadget - User can select which plans they want to watch","Selection based on read permissions of the authenticated user Can pick between individual plans or their favourite plans Whilst selecting, the favourited should still be indicated (up top) Storage of configuraiton on the gadge consumer ",5 +BAM-3766,"Upgrade default AMI OS to newer version of Fedora Linux - see reduced scope of this issue","For the current default AMI (ami-3c3dda55 in case of 2.2.1) there are many updates pending and it isn't wise to do it on each instance startup - see: {noformat} [root@domU-12-31-39-03-75-B2 bamboo-ebs]# yum update Loading ""fastestmirror"" plugin Loading mirror speeds from cached hostfile * fedora: archive.fedoraproject.org * updates: archive.fedoraproject.org Setting up Update Process Resolving Dependencies --> Running transaction check ---> Package fedora-release.noarch 0:8-6.transition set to be updated --> Finished Dependency Resolution Dependencies Resolved ============================================================================= Package Arch Version Repository Size ============================================================================= Updating: fedora-release noarch 8-6.transition updates 31 k Transaction Summary ============================================================================= Install 0 Package(s) Update 1 Package(s) Remove 0 Package(s) Total download size: 31 k Is this ok [y/N]: y Downloading Packages: (1/1): fedora-release-8-6 100% |=========================| 31 kB 00:00 Running rpm_check_debug Running Transaction Test Finished Transaction Test Transaction Test Succeeded Running Transaction Updating : fedora-release ######################### [1/2] Cleanup : fedora-release ######################### [2/2] Updated: fedora-release.noarch 0:8-6.transition Complete! [root@domU-12-31-39-03-75-B2 bamboo-ebs]# yum update Loading ""fastestmirror"" plugin Loading mirror speeds from cached hostfile * updates-newkey: archive.fedoraproject.org * fedora: archive.fedoraproject.org * updates: archive.fedoraproject.org updates-newkey 100% |=========================| 2.3 kB 00:00 primary.sqlite.bz2 100% |=========================| 3.7 MB 00:07 Setting up Update Process Resolving Dependencies --> Running transaction check ---> Package ntp.i386 0:4.2.4p4-1.fc8 set to be updated ---> Package vim-enhanced.i386 2:7.1.245-1.fc8 set to be updated ---> Package openldap.i386 0:2.3.39-4.fc8 set to be updated ---> Package fuse-devel.i386 0:2.7.4-1.fc8 set to be updated ---> Package bind-utils.i386 32:9.5.0-29.P2.fc8 set to be updated ---> Package python-libs.i386 0:2.5.1-26.fc8.2 set to be updated ---> Package pcre.i386 0:7.3-4.fc8 set to be updated ---> Package yum.noarch 0:3.2.20-5.fc8 set to be updated --> Processing Dependency: pygpgme for package: yum ---> Package ruby.i386 0:1.8.6.287-2.fc8 set to be updated ---> Package logwatch.noarch 0:7.3.6-22.fc8 set to be updated ---> Package kernel-xen.i686 0:2.6.21.7-5.fc8 set to be installed ---> Package util-linux-ng.i386 0:2.13.1-2.fc8 set to be updated ---> Package vim-minimal.i386 2:7.1.245-1.fc8 set to be updated ---> Package vixie-cron.i386 4:4.2-9.fc8 set to be updated ---> Package alsa-lib.i386 0:1.0.16-3.fc8 set to be updated ---> Package iptables.i386 0:1.4.1.1-2.fc8 set to be updated ---> Package libxml2.i386 0:2.7.2-2.fc8 set to be updated ---> Package libpng.i386 2:1.2.33-1.fc8 set to be updated ---> Package nss.i386 0:3.12.2.0-1.1.fc8 set to be updated ---> Package paps-libs.i386 0:0.6.8-8.fc8 set to be updated ---> Package libacl.i386 0:2.2.39-14.fc8 set to be updated ---> Package openobex.i386 0:1.3-12.fc8 set to be updated ---> Package libnfnetlink.i386 0:0.0.39-3.fc8 set to be updated ---> Package acl.i386 0:2.2.39-14.fc8 set to be updated ---> Package microcode_ctl.i386 1:1.17-1.39.fc8 set to be updated ---> Package hal-libs.i386 0:0.5.10-5.fc8 set to be updated ---> Package pygobject2.i386 0:2.14.2-1.fc8 set to be updated ---> Package rsync.i386 0:2.6.9-5.fc8 set to be updated ---> Package ruby-irb.i386 0:1.8.6.287-2.fc8 set to be updated ---> Package bluez-libs.i386 0:3.35-1.fc8 set to be updated ---> Package bind-libs.i386 32:9.5.0-29.P2.fc8 set to be updated ---> Package system-config-network-tui.noarch 0:1.5.10-1.fc8 set to be updated ---> Package beecrypt.i386 0:4.1.2-17.fc8 set to be updated ---> Package gtk2.i386 0:2.12.8-2.fc8 set to be updated ---> Package fuse-libs.i386 0:2.7.4-1.fc8 set to be updated ---> Package libedit.i386 0:2.11-1.20080712cvs.fc8 set to be updated ---> Package ed.i386 0:1.1-1.fc8 set to be updated ---> Package NetworkManager-glib.i386 1:0.7.0-0.12.svn4326.fc8 set to be updated --> Processing Dependency: NetworkManager = 1:0.7.0-0.12.svn4326.fc8 for package: NetworkManager-glib ---> Package db4.i386 0:4.6.21-3.fc8 set to be updated ---> Package dhcpv6-client.i386 0:0.10-52.fc8 set to be updated ---> Package freetype.i386 0:2.3.5-5.fc8 set to be updated ---> Package python-urlgrabber.noarch 0:3.0.0-9.fc8 set to be updated ---> Package coreutils.i386 0:6.9-19.fc8 set to be updated ---> Package e2fsprogs.i386 0:1.40.4-3.fc8 set to be updated ---> Package psmisc.i386 0:22.6-2.1.fc8 set to be updated ---> Package libsysfs.i386 0:2.1.0-4.fc8 set to be updated ---> Package audit-libs.i386 0:1.7.4-1.fc8 set to be updated ---> Package libglade2.i386 0:2.6.2-4.fc8 set to be updated ---> Package quota.i386 1:3.14-2.fc8 set to be updated ---> Package cups-libs.i386 1:1.3.9-2.fc8 set to be updated ---> Package perl-libs.i386 4:5.8.8-41.fc8 set to be updated ---> Package fedora-gnome-theme.noarch 0:8.0.0-2.fc8 set to be updated ---> Package libdhcp6client.i386 0:0.10-52.fc8 set to be updated ---> Package iptables-ipv6.i386 0:1.4.1.1-2.fc8 set to be updated ---> Package libtiff.i386 0:3.8.2-11.fc8 set to be updated ---> Package autofs.i386 1:5.0.2-31 set to be updated ---> Package ypbind.i386 3:1.20.4-4.fc8 set to be updated ---> Package anacron.i386 0:2.3-58.fc8 set to be updated ---> Package control-center-filesystem.i386 1:2.20.3-3.fc8 set to be updated ---> Package nfs-utils.i386 1:1.1.1-2.fc8 set to be updated ---> Package smartmontools.i386 1:5.38-1.fc8 set to be updated ---> Package wget.i386 0:1.11.1-1.fc8 set to be updated ---> Package pm-utils.i386 0:0.99.4-19.fc8 set to be updated ---> Package sudo.i386 0:1.6.9p4-6.fc8 set to be updated ---> Package popt.i386 0:1.13-4.fc8 set to be updated ---> Package shadow-utils.i386 2:4.0.18.1-22.fc8 set to be updated ---> Package dbus-glib.i386 0:0.73-8.fc8 set to be updated ---> Package traceroute.i386 3:2.0.12-1.fc8 set to be updated ---> Package kernel-headers.i386 0:2.6.26.8-57.fc8 set to be updated ---> Package ruby-rdoc.i386 0:1.8.6.287-2.fc8 set to be updated ---> Package info.i386 0:4.11-5.fc8 set to be updated ---> Package pam_krb5.i386 0:2.2.18-2.fc8 set to be updated ---> Package bluez-utils.i386 0:3.35-5.fc8 set to be updated ---> Package curl.i386 0:7.18.2-7.fc8 set to be updated --> Processing Dependency: libssh2.so.1 for package: curl ---> Package gnupg.i386 0:1.4.7-10.fc8 set to be updated ---> Package hal.i386 0:0.5.10-5.fc8 set to be updated ---> Package file-libs.i386 0:4.21-6.fc8 set to be updated ---> Package bzip2-libs.i386 0:1.0.4-13.fc8 set to be updated ---> Package rubygems.noarch 0:1.2.0-2.fc8 set to be updated ---> Package perl.i386 4:5.8.8-41.fc8 set to be updated ---> Package PolicyKit.i386 0:0.6-2.fc8 set to be updated ---> Package aspell.i386 12:0.60.5-4.fc8 set to be updated ---> Package e2fsprogs-libs.i386 0:1.40.4-3.fc8 set to be updated ---> Package ruby-libs.i386 0:1.8.6.287-2.fc8 set to be updated ---> Package shared-mime-info.i386 0:0.23-2.fc8 set to be updated ---> Package yum-fastestmirror.noarch 0:1.1.17-1.fc8 set to be updated ---> Package ntfs-3g.i386 2:1.5012-4.fc8 set to be updated ---> Package iproute.i386 0:2.6.26-2.fc8 set to be updated ---> Package stunnel.i386 0:4.24-0.fc8 set to be updated ---> Package fuse.i386 0:2.7.4-1.fc8 set to be updated ---> Package elfutils-libelf.i386 0:0.137-3.fc8 set to be updated ---> Package libxcb.i386 0:1.1-1.1.fc8 set to be updated ---> Package wpa_supplicant.i386 1:0.5.10-5.fc8 set to be updated ---> Package libxslt.i386 0:1.1.24-2.fc8 set to be updated ---> Package libgnomecanvas.i386 0:2.20.1-3.fc8 set to be updated ---> Package tzdata.noarch 0:2008i-1.fc8 set to be updated ---> Package fuse-sshfs.i386 0:2.2-1.fc8 set to be updated ---> Package gnutls.i386 0:1.6.3-5.fc8 set to be updated ---> Package pciutils.i386 0:2.2.9-2.fc8 set to be updated ---> Package glib2.i386 0:2.14.6-2.fc8 set to be updated ---> Package nss-tools.i386 0:3.12.2.0-1.1.fc8 set to be updated ---> Package mlocate.i386 0:0.21-1.fc8 set to be updated ---> Package bzip2.i386 0:1.0.4-13.fc8 set to be updated ---> Package fuse-encfs.i386 0:1.5-3.fc8 set to be updated --> Processing Dependency: libboost_serialization-mt.so.3 for package: fuse-encfs --> Processing Dependency: libboost_filesystem-mt.so.3 for package: fuse-encfs ---> Package hal-info.noarch 0:20080607-2.fc8 set to be updated ---> Package cups.i386 1:1.3.9-2.fc8 set to be updated ---> Package eject.i386 0:2.1.5-8.fc8 set to be updated ---> Package make.i386 1:3.81-11.fc8 set to be updated ---> Package nspr.i386 0:4.7.3-1.fc8 set to be updated ---> Package vim-common.i386 2:7.1.245-1.fc8 set to be updated ---> Package file.i386 0:4.21-6.fc8 set to be updated ---> Package paps.i386 0:0.6.8-8.fc8 set to be updated ---> Package python.i386 0:2.5.1-26.fc8.2 set to be updated --> Running transaction check ---> Package libssh2.i386 0:0.18-5.fc8 set to be updated ---> Package NetworkManager.i386 1:0.7.0-0.12.svn4326.fc8 set to be updated --> Processing Dependency: ppp >= 2.2.4 for package: NetworkManager --> Processing Dependency: dnsmasq for package: NetworkManager --> Processing Dependency: avahi-autoipd for package: NetworkManager ---> Package pygpgme.i386 0:0.1-6.fc8 set to be updated --> Processing Dependency: libgpgme.so.11(GPGME_1.0) for package: pygpgme --> Processing Dependency: libgpgme.so.11 for package: pygpgme ---> Package boost.i386 0:1.34.1-7.fc8 set to be updated --> Processing Dependency: libicuuc.so.38 for package: boost --> Processing Dependency: libicui18n.so.38 for package: boost --> Running transaction check ---> Package gpgme.i386 0:1.1.5-4.fc8 set to be updated --> Processing Dependency: gnupg2 for package: gpgme --> Processing Dependency: libpth.so.20 for package: gpgme ---> Package avahi-autoipd.i386 0:0.6.21-8.fc8 set to be updated ---> Package libicu.i386 0:3.8-6.fc8 set to be updated ---> Package ppp.i386 0:2.4.4-2 set to be updated ---> Package dnsmasq.i386 0:2.40-1.fc8 set to be updated --> Running transaction check ---> Package gnupg2.i386 0:2.0.9-2.fc8 set to be updated --> Processing Dependency: libksba.so.8(KSBA_0.9) for package: gnupg2 --> Processing Dependency: dirmngr for package: gnupg2 --> Processing Dependency: libksba.so.8 for package: gnupg2 --> Processing Dependency: pinentry for package: gnupg2 ---> Package pth.i386 0:2.0.7-3 set to be updated --> Running transaction check ---> Package dirmngr.i386 0:1.0.0-6.fc8 set to be updated ---> Package libksba.i386 0:1.0.2-3.fc8 set to be updated ---> Package pinentry.i386 0:0.7.4-1.fc8 set to be updated --> Finished Dependency Resolution Dependencies Resolved ============================================================================= Package Arch Version Repository Size ============================================================================= Installing: NetworkManager-glib i386 1:0.7.0-0.12.svn4326.fc8 updates-newkey 167 k replacing NetworkManager.i386 1:0.7.0-0.6.7.svn3235.fc8 kernel-xen i686 2.6.21.7-5.fc8 updates-newkey 17 M Updating: PolicyKit i386 0.6-2.fc8 updates-newkey 76 k acl i386 2.2.39-14.fc8 updates-newkey 69 k alsa-lib i386 1.0.16-3.fc8 updates-newkey 402 k anacron i386 2.3-58.fc8 updates-newkey 39 k aspell i386 12:0.60.5-4.fc8 updates-newkey 969 k audit-libs i386 1.7.4-1.fc8 updates-newkey 73 k autofs i386 1:5.0.2-31 updates-newkey 865 k beecrypt i386 4.1.2-17.fc8 updates-newkey 144 k bind-libs i386 32:9.5.0-29.P2.fc8 updates-newkey 951 k bind-utils i386 32:9.5.0-29.P2.fc8 updates-newkey 187 k bluez-libs i386 3.35-1.fc8 updates-newkey 59 k bluez-utils i386 3.35-5.fc8 updates-newkey 469 k bzip2 i386 1.0.4-13.fc8 updates-newkey 49 k bzip2-libs i386 1.0.4-13.fc8 updates-newkey 37 k control-center-filesystem i386 1:2.20.3-3.fc8 updates-newkey 34 k coreutils i386 6.9-19.fc8 updates-newkey 3.3 M cups i386 1:1.3.9-2.fc8 updates-newkey 3.5 M cups-libs i386 1:1.3.9-2.fc8 updates-newkey 197 k curl i386 7.18.2-7.fc8 updates-newkey 293 k db4 i386 4.6.21-3.fc8 updates-newkey 587 k dbus-glib i386 0.73-8.fc8 updates-newkey 160 k dhcpv6-client i386 0.10-52.fc8 updates-newkey 85 k e2fsprogs i386 1.40.4-3.fc8 updates-newkey 610 k e2fsprogs-libs i386 1.40.4-3.fc8 updates-newkey 138 k ed i386 1.1-1.fc8 updates-newkey 71 k eject i386 2.1.5-8.fc8 updates-newkey 51 k elfutils-libelf i386 0.137-3.fc8 updates-newkey 58 k fedora-gnome-theme noarch 8.0.0-2.fc8 updates-newkey 10 k file i386 4.21-6.fc8 updates-newkey 29 k file-libs i386 4.21-6.fc8 updates-newkey 309 k freetype i386 2.3.5-5.fc8 updates-newkey 331 k fuse i386 2.7.4-1.fc8 updates-newkey 83 k fuse-devel i386 2.7.4-1.fc8 updates-newkey 27 k fuse-encfs i386 1.5-3.fc8 updates-newkey 373 k fuse-libs i386 2.7.4-1.fc8 updates-newkey 71 k fuse-sshfs i386 2.2-1.fc8 updates-newkey 49 k glib2 i386 2.14.6-2.fc8 updates-newkey 850 k gnupg i386 1.4.7-10.fc8 updates-newkey 1.9 M gnutls i386 1.6.3-5.fc8 updates-newkey 397 k gtk2 i386 2.12.8-2.fc8 updates-newkey 6.8 M hal i386 0.5.10-5.fc8 updates-newkey 461 k hal-info noarch 20080607-2.fc8 updates-newkey 118 k hal-libs i386 0.5.10-5.fc8 updates-newkey 61 k info i386 4.11-5.fc8 updates-newkey 166 k iproute i386 2.6.26-2.fc8 updates-newkey 843 k iptables i386 1.4.1.1-2.fc8 updates-newkey 309 k iptables-ipv6 i386 1.4.1.1-2.fc8 updates-newkey 192 k kernel-headers i386 2.6.26.8-57.fc8 updates-newkey 753 k libacl i386 2.2.39-14.fc8 updates-newkey 20 k libdhcp6client i386 0.10-52.fc8 updates-newkey 79 k libedit i386 2.11-1.20080712cvs.fc8 updates-newkey 79 k libglade2 i386 2.6.2-4.fc8 updates-newkey 64 k libgnomecanvas i386 2.20.1-3.fc8 updates-newkey 228 k libnfnetlink i386 0.0.39-3.fc8 updates-newkey 23 k libpng i386 2:1.2.33-1.fc8 updates-newkey 249 k libsysfs i386 2.1.0-4.fc8 updates-newkey 47 k libtiff i386 3.8.2-11.fc8 updates-newkey 307 k libxcb i386 1.1-1.1.fc8 updates-newkey 124 k libxml2 i386 2.7.2-2.fc8 updates-newkey 828 k libxslt i386 1.1.24-2.fc8 updates-newkey 526 k logwatch noarch 7.3.6-22.fc8 updates-newkey 319 k make i386 1:3.81-11.fc8 updates-newkey 477 k microcode_ctl i386 1:1.17-1.39.fc8 updates-newkey 437 k mlocate i386 0.21-1.fc8 updates-newkey 75 k nfs-utils i386 1:1.1.1-2.fc8 updates-newkey 281 k nspr i386 4.7.3-1.fc8 updates-newkey 119 k nss i386 3.12.2.0-1.1.fc8 updates-newkey 1.2 M nss-tools i386 3.12.2.0-1.1.fc8 updates-newkey 1.2 M ntfs-3g i386 2:1.5012-4.fc8 updates-newkey 192 k ntp i386 4.2.4p4-1.fc8 updates-newkey 1.4 M openldap i386 2.3.39-4.fc8 updates-newkey 294 k openobex i386 1.3-12.fc8 updates-newkey 37 k pam_krb5 i386 2.2.18-2.fc8 updates-newkey 128 k paps i386 0.6.8-8.fc8 updates-newkey 32 k paps-libs i386 0.6.8-8.fc8 updates-newkey 23 k pciutils i386 2.2.9-2.fc8 updates-newkey 93 k pcre i386 7.3-4.fc8 updates-newkey 137 k perl i386 4:5.8.8-41.fc8 updates-newkey 12 M perl-libs i386 4:5.8.8-41.fc8 updates-newkey 570 k pm-utils i386 0.99.4-19.fc8 updates-newkey 44 k popt i386 1.13-4.fc8 updates-newkey 39 k psmisc i386 22.6-2.1.fc8 updates-newkey 72 k pygobject2 i386 2.14.2-1.fc8 updates-newkey 104 k python i386 2.5.1-26.fc8.2 updates-newkey 4.8 M python-libs i386 2.5.1-26.fc8.2 updates-newkey 568 k python-urlgrabber noarch 3.0.0-9.fc8 updates-newkey 112 k quota i386 1:3.14-2.fc8 updates-newkey 357 k rsync i386 2.6.9-5.fc8 updates-newkey 232 k ruby i386 1.8.6.287-2.fc8 updates-newkey 525 k ruby-irb i386 1.8.6.287-2.fc8 updates-newkey 285 k ruby-libs i386 1.8.6.287-2.fc8 updates-newkey 1.7 M ruby-rdoc i386 1.8.6.287-2.fc8 updates-newkey 353 k rubygems noarch 1.2.0-2.fc8 updates-newkey 598 k shadow-utils i386 2:4.0.18.1-22.fc8 updates-newkey 1.1 M shared-mime-info i386 0.23-2.fc8 updates-newkey 166 k smartmontools i386 1:5.38-1.fc8 updates-newkey 323 k stunnel i386 4.24-0.fc8 updates-newkey 125 k sudo i386 1.6.9p4-6.fc8 updates-newkey 235 k system-config-network-tui noarch 1.5.10-1.fc8 updates-newkey 1.8 M traceroute i386 3:2.0.12-1.fc8 updates-newkey 50 k tzdata noarch 2008i-1.fc8 updates-newkey 756 k util-linux-ng i386 2.13.1-2.fc8 updates-newkey 2.0 M vim-common i386 2:7.1.245-1.fc8 updates-newkey 6.6 M vim-enhanced i386 2:7.1.245-1.fc8 updates-newkey 862 k vim-minimal i386 2:7.1.245-1.fc8 updates-newkey 346 k vixie-cron i386 4:4.2...",1 +BAM-3801,"Gadget - User can view a chart of recent percentage of builds successful","Select plans Grouped by time period, configurable. Can filter by time period (Last 7 days, Last 30 days, Last 90 days, Last 25 builds, Show all builds) ",3 +BAM-3804,"Prevent a build from running if its ancestors are in queue or running","E.g. B depends on A if B is triggered whilst A building, B trigger is ignored. This will mean that further checkins against B won't run. Have to be optional. Must only block if the parent is the same revision as the child that is about to build, otherwise, the child might never build. ",3 +BAM-3805,"User can configure dependency blocking","Applicable per child plan User can configure whether dependency children are blocked from building when ancestors are running.",2 +BAM-3806,"Check ancestors of a build when it is triggered and prevent building if changes found (in ancestors) Ancestors are kicked off","E.g. B triggered, whilst A is not building. Check A, if changes found in A, build A, don't build B. What if A is a manual and dependent builds only? or a schedule build? Ignore the trigger for now. Later optimizations needed. ",12 +BAM-3807,"Detect infinte cycles in dependent builds.","Should not allow users to input cyclic dependency configurations If customers have already done cyclic dependencies, we don't do anything in the upgrade task. We show an error when we try to show the tree. ",2 +BAM-3808,"User can see in text its ancestors and children for the build result","See all parents See all children ",5 +BAM-3809,"Get a gadget to authenticate end to end via Oauth","Takes away the need to manually input username/password ",5 +BAM-3864,"Enable user configuraiton of OAuth in Bamboo.",NULL,5 +BAM-3871,"Gadget - chart of queued time",NULL,2 +BAM-3890,"Notfication when a build has been in the queue for x minutes","Similar to a build hung notification but for builds in the queue",3 +BAM-3905,"""Test failing since"" doesn't properly consider builds without test results","h3. Case A Consider a series of builds: BUILD-1 Test X passed BUILD-2 Test X failed BUILD-3 Build failure, no test results BUILD-4 Test X failed BUILD-5 Test X failed In the results of BUILD-4 and BUILD-5, Bamboo reports that test X has been failing since BUILD-4. From this, developers incorrectly infer that the test passed in BUILD-3 and the change that caused this failure was introduced in BUILD-4. In this case, it would be better to report that the test has been failing since BUILD-2. h3. Case B There's another interesting case that needs to be considered: BUILD-6 Test X passed BUILD-7 Build failure, no test results BUILD-8 Build failure, no test results BUILD-9 Test X failed Here, the failure of test X could have been introduced in BUILD-7, BUILD-8 or BUILD-9. In this case, perhaps it's best to report that Test X has been failing since BUILD-7?",3 +BAM-3912,"Bandana import/export",NULL,3 +BAM-3917,"Fix i18n for gadgets",NULL,5 +BAM-3918,"Provide feedback in UI about builds being blocked (build dependencies)",NULL,3 +BAM-3922,"Tests for REST",NULL,3 +BAM-3923,"Selenium tests (with Hamish)",NULL,3 +BAM-3961,"Bucket - Gadget issues",NULL,8 +BAM-3981,"Dependency blocking for polling builds",NULL,2 +BAM-4000,"Configure agent capabilities for each Elastic Configuration",NULL,5 +BAM-4003,"Allow ""at least"" and ""maximum #"" of agent on schedule",NULL,2 +BAM-4030,"Make it possible (via instructions) for a customer to 'Bamboo enable' an AMI","As per Krystian's comments - http://jira.atlassian.com/browse/BAM-3766?focusedCommentId=160191&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_160191 we want to make it possible for a customer to follow instructions/install software so that an instances of an AMI can be spawned by Bamboo server and have elastic agents start up on them. This is will get us out of the endless cycle of upgrading the default AMI.",5 +BAM-4037,"Add support for EC2 Availability Zones","See here for what we are talking about - http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1347 Availability zone support is a pre-requisite for [Reserved Instance|http://aws.amazon.com/ec2/faqs/#What_is_a_Reserved_Instance] support. We should have a default availability zone (for the Bamboo install) and be able to specify the avail zone per Elastic Configuration.",5 +BAM-4088,"Rename ElasticAgentSchedule to ElasticInstanceSchedule","Also rework associated UI text",1 +BAM-4341,"Roundtrip error w/ input validation during EC2 instance startup","Round trip errors occur on the EC2/instance screen when an invalid number of instances are requested",1 +BAM-4360,"Ensure that all commands when mounting EBS volumes handle failure recursively","EBS volume creation, attachment & mounting is still depending on various variable timing from Amazon (especially when multiple volumes are stared simultaneously). We should ensure that we cater for failure and perform retries for all commands.",2 +BAM-4367,"Please make a Maven 2.1.0 builder available on the EC2 image","Confluence need Maven 2.1.0 specifically to build confluence.",2 +BAM-4378,"Set the ""Last Modified"" header for artifacts, so browsers can cache static resources","Since most (all?) build artifacts are static, and probably never change once they are created, Bamboo should set the ""Last Modified"" header when serving any artifact. The timestamp from the file stored on disk could be used, or if that is unavailable - the time stamp of when the build finished? !http://img.skitch.com/20090819-me3phuunma1um3acd6jpdddkxt.jpg! Large artifacts such as the JSON needed for Clover's new Tree Map could greatly benefit from browsers doing the needful caching.",1 +BAM-4386,"The ""no more than"" instance schedule seems to shut down more instances than it should","Having a schedule configured as ""no more than"" e.g. ""no more than 4"" seems to kill all available instances, since it seems that it looks if the instance is on list (even if already scheduled to be shut down - agent stopped, but the instance is still on the list) instead of checking if given instance to be shut down has agent present or not.",1 +BAM-4416,"Failed EBS volume creaion should start as disabled","If startup of EBS volume fails for an instance, the Agent should start as disabled. ",2 +BAM-4418,"Rename ""Bamboo Builds"" tab in JIRA Bamboo plugin to be ""Builds""",NULL,1 +BAM-4424,"Allow a clover license to be entered via the Bamboo admin (ie a global license). License can be overridden at the plan config level","* on the build config screen if a ""global"" license exists then we display a message indicating that a license is already configured. * on the build config screen if a ""global"" license exists AND the license is valid then we display a message indicating that a license is valid. * on the build config screen if a ""global"" license exists AND the license is invalid then we display a message indicating that a license is NOT valid * on the build config screen if NO ""global"" license exists then a text entry field should be available and a message indicating that a license is required should be displayed. * a text entry field should be available on the build config screen to allow the license to be overridden at the plan level. * If _any_ license is defined at a plan level, it takes precedence * Check interaction with clover.license in the settings.xml* Validation of lic. is optional nice to have iff extras supports decoding. ",3 +BAM-4484,"Add path to clover gadget to the list of gadgets available",NULL,1 +BAM-4497,"Update Dependencies to match jira's (again)","once jira has finalised its own dependencies... To ensure gadgets actually work we will probably need to ensure that our oauth, atlasian-plugins and atlassian-gadgets libraries are updated to the same version as jira 4.0 and then double check that all the gadgets work.",2 +BAM-4503,"ship version 2.1.15 of nant builder plugin with bamboo 2.3.x","Changes in the plugin api for bamboo 2.3x have broken the nant builder plugin http://developer.atlassian.com/jira/browse/NANT-24 A new version of the plugin is [available|http://confluence.atlassian.com/download/attachments/47448218/nant_builder-2.1.15.jar?version=1&modificationDate=1251978264907]",1 +BAM-4534,"Spike: Concurrent chains running",NULL,20 +BAM-4535,"Quick and dirty way to add a plan to a stage in a chain","Suggestion here is to have a ""chain and stage"" selector just on the plan edit page. No need to hide anything on the plan edit page.",3 +BAM-4536,"Spike: Extract common behaviour from Plan and Chain",NULL,20 +BAM-4537,"Quick and dirty list of chains",NULL,2 +BAM-4574,"Package http://datejs.googlecode.com/files/date.js for gadgets","The gadgets should not use http://datejs.googlecode.com/files/date.js directly",1 +BAM-4576,"Faster Setup: Minimize screens for setup wizard - express vs custom installs",NULL,5 +BAM-4579,"Faster Setup: Immediately login as admin user after setup wizard",NULL,1 +BAM-4580,"Faster Setup: Make it obvious where to go next after login",NULL,3 +BAM-4581,"Faster Setup: Remove/Reword supportability wording of HSQLDB",NULL,1 +BAM-4583,"External DB: Bundle database drivers",NULL,3 +BAM-4593,"WIP Creation: Allow Save after builders entry",NULL,5 +BAM-4594,"WIP Creation: Option to not build immediately after plan create",NULL,2 +BAM-4605,"Faster Wizard: Setting up Builders/JDKs inline",NULL,3 +BAM-4627,"Inline adding of IM",NULL,2 +BAM-4628,"Faster Wizard: Inline create mail sever",NULL,2 +BAM-4645,"Faster Setup: Visual indication for long running tasks in Setup Wizard",NULL,3 +BAM-4664,"Re-enable the maven tab to see if it still works on single module projects.",NULL,2 +BAM-4665,"Show the snapshot dependencies at the top of the maven tab, ie update the maven dependency parser so that it can just provide snapshot dependencies.",NULL,2 +BAM-4666,"introduce a ""generated"" type of dependency (as opposed to a manually created).",NULL,8 +BAM-4667,"generated dependencies are created after builds complete based on maven dependency info.",NULL,8 +BAM-4673,"Check and make the maven tab work on multi module projects.",NULL,5 +BAM-4690,"Clean up chain level Repo information",NULL,5 +BAM-4704,"Installer not setting bamboo home","after installing bamboo using the 2.5 M2 windows installer bamboo does not start because bamboo.home is not set. I checked bamboo-init.properties and it has not been updated at all. See install4j logs",1 +BAM-4718,"Provide persistence to abstract ""artifacts/particles"" consumed and produced by plan.",NULL,2 +BAM-4724,"Allow user to specify location of pom file",NULL,2 +BAM-4725,"Spiking read pom before build occurs using maven 3 embedder - svn only",NULL,8 +BAM-4729,"Unchecking use maven dependencies option should actually clear maven depedencies data. Confirmation for this should happen.",NULL,3 +BAM-4731,"Miscellaneous UI ugliness","Remembering which tab you're on for configuraiton Tooltips broken Styling for tabs for build configuration Dropdown build menu is too narrow. Build Configuration tabs no longer check if there is data not saved before navigating away from the tab.",3 +BAM-4732,"View a build that didn't run because of a failed prior stage in the chain",NULL,2 +BAM-4734,"Clicking the run page should go to the live results page.",NULL,1 +BAM-4735,"Redirect to last result of the chain if no chains currently running",NULL,1 +BAM-4736,"Build blocking for chain dependencies",NULL,2 +BAM-4737,"Automatically turn on build blocking when turning on maven dependencies with warning",NULL,2 +BAM-4780,"Spike backend support up to 100 remote agents","Acceptance criteria: * 100 remote agents can concurrently connect to one server. * The 100 remote agents include both remote and elastic agents. * 100 builds can concurrently run",20 +BAM-4790,"Make mail server template more compact",NULL,1 +BAM-4791,"update page inline rather than reload after adding builder/jdk/mail/im",NULL,5 +BAM-4793,"User can specify a pom.xml for plans to be created from",NULL,3 +BAM-4794,"Resolve concurrent chains issue with hack",NULL,3 +BAM-4795,"Bamboo can parse the pom.xml plan details",NULL,5 +BAM-4806,"Upgrade to AUI 2.0.3","AUI 2.0 has changes that are not currently compatible with Bamboo's js, especially the restrictions they have imposed where the selector $ is no longer allowed This is needed for 2009-11 Upgrade Pack.",2 +BAM-4841,"Dependency block should block on parents as well",NULL,5 +BAM-4845,"Styling for tabs for build configuration",NULL,5 +BAM-4849,"Maven dependency on by default(?)",NULL,1 +BAM-4850,"Maven dependency tab clean up",NULL,3 +BAM-4857,"Show REST & Gadgets URLs from within the UI","* REST URL should appear where we enable the Remote API part of the description) * Add new section with page ""List of Gadget URLs"" & OAuth * Minimal req. URLS & descriptions, other stuff would be cool ",3 +BAM-4869,"Add a function to remove OAuth tokens in Bamboo","Please add a function to remove OAuth tokens from Bamboo. This is already implemented in JIRA, if that's a helpful reference. http://confluence.atlassian.com/display/JIRA/Configuring+OAuth+Consumers#ConfiguringOAuthConsumers-RemovinganOAuthconsumer ",5 +BAM-4871,"REST: Incorrect representation of JSON data","JSON data which is returned from the builds rest api service is incorrect. Please see screenshots. Example: https://bamboo.extranet.atlassian.com/rest/api/latest/build/CRUC.json?expand=builds.build",3 +BAM-4905,"Plan requirements are not updated after builder JDK has been updated.","An update in a plan's builder spec is not reflected in the plan's requirements. For example after changing the JDK from 1.5 to 1.6 in the builder spec the requirements tab will still show JDK 1.5 ",2 +BAM-4922,"Removing build results from a menu should have a confirmation screen","* Deleting from list page currently uses JS popup * Prefer JS popup but fine to add confirmation screen (just be consistent with each other) * Should work with the class=""confirmationRequired"" * Fix wording o be conssitent",1 +BAM-4923,"The contact administrators link should not be available is the setup footer",NULL,1 +BAM-4924,"When editing plans ""Done"" button in artifacts doesn't work","* Should go to view version of the artifacts screen",2 +BAM-4925,"Artifact ""Clover Report (System)"" is added even if the Clover is not enabled",NULL,1 +BAM-4932,"Problem when importing a plan from Maven for a second time","* Not sure if both plans were the same URL. {noformat} 2009-11-29 18:45:41,330 INFO [1085098145@qtp-1013059835-7] [AccessLogFilter] admin http://xxxxgold.local:8085/bamboo/admin/importMavenPlanCreatePlan.action 64565kb 2009-11-29 18:45:41,363 WARN [1085098145@qtp-1013059835-7] [JDBCExceptionReporter] SQL Error: -104, SQLState: 23000 2009-11-29 18:45:41,364 ERROR [1085098145@qtp-1013059835-7] [JDBCExceptionReporter] Violation of unique constraint $$: duplicate value(s) for column(s) $$: SYS_CT_108 in statement [insert into BUILD_DEFINITION (BUILD_ID, CREATED_DATE, UPDATED_DATE, XML_DEFINITION_DATA, BUILD_DEFINITION_TYPE, BUILD_DEFINITION_ID) values (?, ?, ?, ?, 'BUILD', ?)] 2009-11-29 18:45:41,364 ERROR [1085098145@qtp-1013059835-7] [SessionImpl] Could not synchronize database state with session 2009-11-29 18:45:41,364 WARN [1085098145@qtp-1013059835-7] [HibernateObjectDao] Problems getting build by key net.sf.hibernate.exception.GenericJDBCException: could not insert: [com.atlassian.bamboo.build.DefaultBuildDefinitionForBuild#819203] net.sf.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:90) net.sf.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:79) net.sf.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29) net.sf.hibernate.persister.AbstractEntityPersister.convert(AbstractEntityPersister.java:1331) net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:472) net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:436) net.sf.hibernate.impl.ScheduledInsertion.execute(ScheduledInsertion.java:37) net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2449) net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2435) net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2392) net.sf.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1821) net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:3652) net.sf.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:238) net.sf.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:385) com.atlassian.bamboo.build.BuildHibernateDao.getBuildByKey(BuildHibernateDao.java:40) sun.reflect.GeneratedMethodAccessor116.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy7.getBuildByKey(Unknown Source) com.atlassian.bamboo.build.HibernateBuildManager.getBuildByKey(HibernateBuildManager.java:77) com.atlassian.bamboo.build.HibernateBuildManager.createBuild(HibernateBuildManager.java:248) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) com.atlassian.bamboo.security.acegi.intercept.aopalliance.AuthorityOverrideMethodSecurityInterceptor.invoke(AuthorityOverrideMethodSecurityInterceptor.java:30) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) com.atlassian.bamboo.security.acegi.intercept.aopalliance.AuthorityOverrideMethodSecurityInterceptor.invoke(AuthorityOverrideMethodSecurityInterceptor.java:30) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy13.createBuild(Unknown Source) com.atlassian.bamboo.build.creation.BuildPlanCreationServiceImpl.createBuild(BuildPlanCreationServiceImpl.java:235) com.atlassian.bamboo.build.creation.BuildPlanCreationServiceImpl.createBuild(BuildPlanCreationServiceImpl.java:207) com.atlassian.bamboo.ww2.actions.admin.ImportMavenPlanCreatePlanAction.doExecute(ImportMavenPlanCreatePlanAction.java:120) com.atlassian.bamboo.ww2.BambooActionSupport.execute(BambooActionSupport.java:705) ... Caused by: java.sql.SQLException: Violation of unique constraint $$: duplicate value(s) for column(s) $$: SYS_CT_108 in statement [insert into BUILD_DEFINITION (BUILD_ID, CREATED_DATE, UPDATED_DATE, XML_DEFINITION_DATA, BUILD_DEFINITION_TYPE, BUILD_DEFINITION_ID) values (?, ?, ?, ?, 'BUILD', ?)] org.hsqldb.jdbc.Util.throwError(Unknown Source) org.hsqldb.jdbc.jdbcPreparedStatement.executeUpdate(Unknown Source) com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeUpdate(NewProxyPreparedStatement.java:105) net.sf.hibernate.impl.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:22) net.sf.hibernate.persister.EntityPersister.insert(EntityPersister.java:462) ... 178 more java.lang.IllegalArgumentException: object cannot be null org.springframework.util.Assert.notNull(Assert.java:112) com.atlassian.bamboo.security.acegi.acls.HibernateObjectIdentityImpl.(HibernateObjectIdentityImpl.java:58) com.atlassian.bamboo.build.HibernateBuildManager.createBuild(HibernateBuildManager.java:249) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) com.atlassian.bamboo.security.acegi.intercept.aopalliance.AuthorityOverrideMethodSecurityInterceptor.invoke(AuthorityOverrideMethodSecurityInterceptor.java:30) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) com.atlassian.bamboo.security.acegi.intercept.aopalliance.AuthorityOverrideMethodSecurityInterceptor.invoke(AuthorityOverrideMethodSecurityInterceptor.java:30) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy13.createBuild(Unknown Source) com.atlassian.bamboo.build.creation.BuildPlanCreationServiceImpl.createBuild(BuildPlanCreationServiceImpl.java:235) com.atlassian.bamboo.build.creation.BuildPlanCreationServiceImpl.createBuild(BuildPlanCreationServiceImpl.java:207) com.atlassian.bamboo.ww2.actions.admin.ImportMavenPlanCreatePlanAction.doExecute(ImportMavenPlanCreatePlanAction.java:120) {noformat} ",3 +BAM-4933,"System property to enable the ""unsupported database"" option in setup","{{-Dbamboo.enable.unsupported.db=true}} or something like that. * Only affects UI on setup wizard * Need to add to upgrade guide for people doing import export",3 +BAM-4935,"Import from Maven should redirect the user to the builder configuration in edit mode and prevent the initial build","* Should not build immediately (current way is to Disable plan) * Redirect to Builder config. section in Edit mode * (Some risk with tabs recently broken) * Q: re how to set tab from param ** Should be a param that sets the cookied & the selectedTab",3 +BAM-4937,"Upgrade to AUI 1.2.5 to resolve dialog size issues in ie7","See https://studio.atlassian.com/browse/AJS-202 Under IE7 the buttons pane will over-run the size of the dialog (affects add JDK / add Builder) * Need to test in all supported browsers. * Inline JDK, Builder, Mail, IM * Ping Anton for VM",3 +BAM-4939,"OAuth Consumer tab should not be visible","Test in all supported browsers !http://img.skitch.com/20091201-xsixujr2hfjfhpq8dkc86dwhq8.png!",2 +BAM-4940,"Make ""Enable Plan"" link more prominent on the config screen","* Above (or below if that looks better) * Use your judgement & trial it out! ",2 +BAM-4941,"Link to Maven plan import from the first page of the create plan wizard","* Don't bother with the dashboard",1 +BAM-4942,"should append pom.xml if not specified","* Check repo if the SVN URL is a file or a directory first {{svn info}} and then append pom.xml if directory * Does SVN kit have APIs to do SVN info? ** Oui oui, but SVN does have it, but never done in Bamboo",3 +BAM-4943,"Retest all new gadget work in Test IE7 IE8 Safari","* Make sure we test all gadgets in JIRA & Connie * In all supported browsers * No IE6",4 +BAM-5008,"Build process not shutting down EC2 instances",NULL,3 +BAM-5057,"Changing from a JDK Label that's been deleted will not remove old Requirement","# Create a plan with a JDK # Go to admin section and remove the JDK # Edit the plan, changing the JDK # The old JDK should be removed but it's not !http://img.skitch.com/20091211-m297tdrx9j28n3hisgjttgftfm.png! ",2 +BAM-5070,"Test the tagger plugin","http://confluence.atlassian.com/display/BAMEXT/Bamboo+Tagger+plugin ",2 +BAM-5076,"Ensure Clover gadget is working","Nothing's changed in the gadget itself, just the config screen... We'll hold the Poles to it :) ",2 +BAM-5102,"Write developer docs for backend plan creation",NULL,2 +BAM-5124,"StopBuildManager with abandon result does not abandon result","StopBuildManager with abandon result does not abandon result in 3.0. In 2.0 it just stopped the result from being persisted but that now happens at the start of the build.",5 +BAM-5127,"Improve the Bamboo startup script","There are several things wrong with the bamboo.sh startup script: 1) an option to specify which user to run Bamboo under 2) The startup script takes no care of CWD. Depending on which directory you're in the startup behaves differently. 3) if Bamboo stops abruptly or startup fails, it leaves a bamboo.pid file and this file causes future startup attempts to fail. 4) make use of the JAVA_HOME in bamboo.sh script, Bamboo defaults to the java executable in the System Path - we ask users to set JAVA_HOME, but we never use it in the script 5) Parameterize each of the startup option in RUN_CMD variable or read the options from wrapper.conf file. ",2 +BAM-5135,"SASL support with bundled svnkit","The version of svnkit we bundle with bamboo doesn't have SASL support: {noformat}[amyers@erdinger:svnkit]$ jar tf svnkit-1.3.0.5847.jar | grep Sasl [amyers@erdinger:svnkit]$ {noformat} If I download it from the website it does (this is a newer version, but apparently older ones have it too): {noformat} [amyers@erdinger:svnkit-1.3.2.6267]$ jar tf svnkit.jar | grep Sasl org/tmatesoft/svn/core/internal/io/svn/sasl/SVNSaslAuthenticator$SVNCallbackHandler.class org/tmatesoft/svn/core/internal/io/svn/sasl/SVNSaslAuthenticator.class org/tmatesoft/svn/core/internal/io/svn/sasl/SaslInputStream.class org/tmatesoft/svn/core/internal/io/svn/sasl/SaslOutputStream.class [amyers@erdinger:svnkit-1.3.2.6267]$ {noformat} Is there any technical reason we don't bundle the support for SASL authentication? ",2 +BAM-5140,"Importing without restart runs all upgrade tasks, if run after initial install.","* All upgrades are run rather than just the ones that are needed. * This is only a problem if run after the initial install (where the upgrade task collections in UpgradeManagerImpl are already prepopulated with all upgrade tasks.) This is fixed/avoided by: * Do not do the import without restart. * Stop and start Bamboo before the import. * If it gets into a screwed state, delete your bamboo home and start again (don't accidentally delete the import!).",3 +BAM-5142,"Upgrade atlassian template renderer to 1.0.5","Needed by an upgrade pack",1 +BAM-5143,"Exception in macro buildResult","I've gotten this exception several times now: 2009-12-31 10:36:49,916 INFO [1300187729@qtp-380183900-10] [AccessLogFilter] bteh http://bteh.sydney.atlassian.com:8085/bamboo/api/rest/getLatestUserBuilds.action?auth=OmdvT9Cj0M 115615kb 2009-12-31 10:36:49,963 INFO [1300187729@qtp-380183900-10] [AccessLogFilter] bteh http://bteh.sydney.atlassian.com:8085/bamboo/api/rest/getLatestBuildResults.action?auth=OmdvT9Cj0M&buildKey=TEST-DEF 112273kb 2009-12-31 10:36:49,982 INFO [1300187729@qtp-380183900-10] [AccessLogFilter] bteh http://bteh.sydney.atlassian.com:8085/bamboo/api/rest/getLatestBuildResults.action?auth=OmdvT9Cj0M&buildKey=TEST-DEF2 111418kb 2009-12-31 10:36:50,013 INFO [1300187729@qtp-380183900-10] [AccessLogFilter] bteh http://bteh.sydney.atlassian.com:8085/bamboo/api/rest/getLatestBuildResults.action?auth=OmdvT9Cj0M&buildKey=TEST-DEF3 110540kb 2009-12-31 10:36:50,117 INFO [1300187729@qtp-380183900-10] [AccessLogFilter] bteh http://bteh.sydney.atlassian.com:8085/bamboo/api/rest/getRecentlyCompletedBuildResultsForBuild.action?auth=OmdvT9Cj0M&buildKey=TEST-DEF3 109878kb 2009-12-31 10:26:52,088 ERROR [543021934@qtp-380183900-0] [runtime] Error executing macro: buildResult required parameter: buildSummary is not specified. The problematic instruction: ---------- ==> macro buildResult [on line 1, column 1 in api/rest/macros.ftl] in user-directive api.buildResult [on line 4, column 9 in api/rest/recentlyCompletedBuildResultsForBuild.ftl] ---------- Java backtrace for programmers: ---------- freemarker.template.TemplateException: Error executing macro: buildResult required parameter: buildSummary is not specified. freemarker.core.Macro$Context.sanityCheck(Macro.java:207) freemarker.core.Macro$Context.runMacro(Macro.java:165) freemarker.core.Environment.visit(Environment.java:602) freemarker.core.UnifiedCall.accept(UnifiedCall.java:106) freemarker.core.Environment.visit(Environment.java:209) freemarker.core.MixedContent.accept(MixedContent.java:92) freemarker.core.Environment.visit(Environment.java:209) freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:167) freemarker.core.Environment.visit(Environment.java:416) freemarker.core.IteratorBlock.accept(IteratorBlock.java:102) freemarker.core.Environment.visit(Environment.java:209) freemarker.core.MixedContent.accept(MixedContent.java:92) freemarker.core.Environment.visit(Environment.java:209) freemarker.core.Environment.process(Environment.java:189) freemarker.template.Template.process(Template.java:237) com.opensymphony.webwork.views.freemarker.FreemarkerResult.doExecute(FreemarkerResult.java:214) com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WebWorkResultSupport.java:143) com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:313) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:208) com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:175) com.atlassian.bamboo.ww2.interceptors.BambooWorkflowInterceptor.doIntercept(BambooWorkflowInterceptor.java:33) com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:116) com.atlassian.bamboo.ww2.interceptors.BambooValidationInterceptor.doIntercept(BambooValidationInterceptor.java:33) com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:174) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:151) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptor.intercept(WebworkSecurityInterceptor.java:55) com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptorProxy.intercept(WebworkSecurityInterceptorProxy.java:30) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.PaginationAwareInterceptor.intercept(PaginationAwareInterceptor.java:68) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.StatisticsAwareInterceptor.intercept(StatisticsAwareInterceptor.java:41) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.ResultsListAwareInterceptor.intercept(ResultsListAwareInterceptor.java:48) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.TestCaseAwareInterceptor.intercept(TestCaseAwareInterceptor.java:44) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.BuildResultsSummaryAwareInteceptor.intercept(BuildResultsSummaryAwareInteceptor.java:66) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.BuildAwareInterceptor.intercept(BuildAwareInterceptor.java:47) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.RemoteApiExceptionInterceptor.intercept(RemoteApiExceptionInterceptor.java:21) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.RemoteApiLoginInterceptor.intercept(RemoteApiLoginInterceptor.java:57) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116) com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:274) com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:202) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.opensymphony.webwork.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:88) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.bamboo.filter.AccessLogFilter.doFilter(AccessLogFilter.java:61) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265) org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) com.atlassian.bamboo.filter.SeraphLoginFilter.doFilter(SeraphLoginFilter.java:61) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) com.atlassian.bamboo.filter.BambooAcegiProxyFilter.doFilter(BambooAcegiProxyFilter.java:25) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.bamboo.filter.LicenseFilter.doFilter(LicenseFilter.java:73) com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.johnson.filters.AbstractJohnsonFilter.doFilter(AbstractJohnsonFilter.java:72) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:206) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.seraph.filter.BaseLoginFilter.doFilter(BaseLoginFilter.java:133) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) com.atlassian.oauth.serviceprovider.internal.servlet.OAuthFilter.doFilter(OAuthFilter.java:69) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:170) com.atlassian.spring.filter.FlushingSpringSessionInViewFilter.doFilterInternal(FlushingSpringSessionInViewFilter.java:29) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.planetj.servlet.filter.compression.CompressingFilter.handleDoFilter(CompressingFilter.java:203) com.planetj.servlet.filter.compression.CompressingFilter.doFilter(CompressingFilter.java:174) com.atlassian.bamboo.filter.CompressingFilter.doFilter(CompressingFilter.java:65) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.bamboo.filter.RequestCacheThreadLocalFilter.doFilter(RequestCacheThreadLocalFilter.java:26) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:378) org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) org.mortbay.jetty.Server.handle(Server.java:324) org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:535) org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:865) org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539) org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520)",2 +BAM-5153,"Running a chain from the actions menu runs the chain twice",NULL,3 +BAM-5172,"CVS deletes working copy when using tag/branch and ampersand modules after initial build","When using cvs ampersand modules on a tag/branch bamboo checks out the _initial_ working copy just fine. For subsequent builds bamboo *deletes* all files in the working copy when updating. https://support.atlassian.com/browse/BSP-2452 ",5 +BAM-5182,"Agent upload of artifacts fails to set Content-Length in HTTP/1.1 (on lighthttpd or nginx)"," Bamboo Agent upload of artifacts fails to set Content-Length:, causes problems when using a proxy that implements strict HTTP/1.1 Our preferred reverse proxy solution is Lighttpd. However, use of Lighttpd resulted in failure of Bamboo Agents to upload artifacts to the Bamboo Server. Upon investigation, we discovered the following error in the Lighttpd error logs: 2010-01-08 13:50:26: (request.c.1115) POST-request, but content-length missing -> 411 HTTP/1.1 - http://www.ietf.org/rfc/rfc2616.txt - Section 4.4: ... For compatibility with HTTP/1.0 applications, HTTP/1.1 requests containing a message-body MUST include a valid Content-Length header field unless the server is known to be HTTP/1.1 compliant. If a request contains a message-body and a Content-Length is not given, the server SHOULD respond with 400 (bad request) if it cannot determine the length of the message, or with 411 (length required) if it wishes to insist on receiving a valid Content-Length. And below in section 10.4.12: 10.4.12 411 Length Required The server refuses to accept the request without a defined Content- Length. The client MAY repeat the request if it adds a valid Content-Length header field containing the length of the message-body in the request message. And further below in section : 14.13 Content-Length The Content-Length entity-header field indicates the size of the entity-body, in decimal number of OCTETs, sent to the recipient or, in the case of the HEAD method, the size of the entity-body that would have been sent had the request been a GET. Content-Length = ""Content-Length"" "":"" 1*DIGIT An example is Content-Length: 3495 Applications SHOULD use this field to indicate the transfer-length of the message-body, unless this is prohibited by the rules in section 4.4. Any Content-Length greater than or equal to zero is a valid value. Section 4.4 describes how to determine the length of a message-body if a Content-Length is not given. Note that the meaning of this field is significantly different from the corresponding definition in MIME, where it is an optional field used within the ""message/external-body"" content-type. In HTTP, it SHOULD be sent whenever the message's length can be determined prior to being transferred, unless this is prohibited by the rules in section 4.4. According to my research, both Microsoft IIS and Lighttpd are strict on this. I have confirmed that Lighttpd does not have a configuration option to disable this level of strictness. Apache, however, is lax about enforcing this rule. As a result, Apache works and Lighttpd fails. Please correct the Bamboo Agent upload of artifacts to specify a Content-Length according to the specification defined above so we can switch back to Lighttpd.",2 +BAM-5184,"Can't create Plan from POM if the only Builder detected was the Elastic Agent","To reproduce, make sure that the ""Maven 2"" Builder has only the Elastic Agent Builder in its list (Bamboo Console >> Administration >> Builders). Therefore, Bamboo has not detected any local or remote Maven installation. When trying to create the Plan from a POM, after detecting the Repository and Providing the ProjectName and ProjectKey, the following stacktrace is displayed: Version: 2.5 Build: 1711 Build Date: 29 Dec 2009 system.error.request.information: * Request URL: http://localhost:8085/admin/importMavenPlanCreatePlan.action * Scheme: http * Server: localhost * Port: 8085 * URI: /admin/importMavenPlanCreatePlan.action * Context Path: * Servlet Path: /admin/importMavenPlanCreatePlan.action * Path Info: * Query String: Stack Trace: com.atlassian.bamboo.build.PlanCreationException: No Maven 2 builder found, should not occur com.atlassian.bamboo.ww2.actions.admin.ImportMavenPlanCreatePlanAction.createBuilder(ImportMavenPlanCreatePlanAction.java:184) com.atlassian.bamboo.ww2.actions.admin.ImportMavenPlanCreatePlanAction.doExecute(ImportMavenPlanCreatePlanAction.java:123) com.atlassian.bamboo.ww2.BambooActionSupport.execute(BambooActionSupport.java:705) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:592) com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:358) com.opensymphony.xwork.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:218) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:192) com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:175) com.atlassian.bamboo.ww2.interceptors.BambooWorkflowInterceptor.doIntercept(BambooWorkflowInterceptor.java:33) com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:116) com.atlassian.bamboo.ww2.interceptors.BambooValidationInterceptor.doIntercept(BambooValidationInterceptor.java:33) com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.JSONValidationInterceptor.intercept(JSONValidationInterceptor.java:78) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:174) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:151) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.GlobalAdminInterceptor.intercept(GlobalAdminInterceptor.java:21) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptor.intercept(WebworkSecurityInterceptor.java:55) com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptorProxy.intercept(WebworkSecurityInterceptorProxy.java:30) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.PaginationAwareInterceptor.intercept(PaginationAwareInterceptor.java:68) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.StatisticsAwareInterceptor.intercept(StatisticsAwareInterceptor.java:41) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.ResultsListAwareInterceptor.intercept(ResultsListAwareInterceptor.java:48) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.TestCaseAwareInterceptor.intercept(TestCaseAwareInterceptor.java:44) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.BuildResultsSummaryAwareInteceptor.intercept(BuildResultsSummaryAwareInteceptor.java:66) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.BuildAwareInterceptor.intercept(BuildAwareInterceptor.java:47) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:186) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.BuildConfigurationInterceptor.intercept(BuildConfigurationInterceptor.java:52) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.BuildConfigurationFromSessionInterceptor.intercept(BuildConfigurationFromSessionInterceptor.java:50) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116) com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:274) com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:202) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.opensymphony.webwork.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:88) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.bamboo.filter.AccessLogFilter.doFilter(AccessLogFilter.java:61) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265) org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) com.atlassian.bamboo.filter.SeraphLoginFilter.doFilter(SeraphLoginFilter.java:61) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) com.atlassian.bamboo.filter.BambooAcegiProxyFilter.doFilter(BambooAcegiProxyFilter.java:25) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.bamboo.filter.LicenseFilter.doFilter(LicenseFilter.java:73) com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.johnson.filters.AbstractJohnsonFilter.doFilter(AbstractJohnsonFilter.java:72) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:204) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.seraph.filter.BaseLoginFilter.doFilter(BaseLoginFilter.java:138) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) com.atlassian.oauth.serviceprovider.internal.servlet.OAuthFilter.doFilter(OAuthFilter.java:69) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:170) com.atlassian.spring.filter.FlushingSpringSessionInViewFilter.doFilterInternal(FlushingSpringSessionInViewFilter.java:29) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.planetj.servlet.filter.compression.CompressingFilter.handleDoFilter(CompressingFilter.java:203) com.planetj.servlet.filter.compression.CompressingFilter.doFilter(CompressingFilter.java:193) com.atlassian.bamboo.filter.CompressingFilter.doFilter(CompressingFilter.java:65) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.bamboo.filter.RequestCacheThreadLocalFilter.doFilter(RequestCacheThreadLocalFilter.java:26) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:378) org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) org.mortbay.jetty.Server.handle(Server.java:324) org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:535) org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:880) org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:747) org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520)",3 +BAM-5187,"Update Builders and Jdk's to allow for > 25 agents","This view JDKs and view builders page needs rewriting. A mock up can be found here: https://extranet.atlassian.com/display/BAMBOO/Supporting+more+than+25+remote+agents We are trying to condense this information. There is a bug on this page which also needs to be fixed, see screenshot: http://skitch.com/brydiemccoy/n8fbq/jdks-atlassian-bamboo Investigate surrounding/similar pages and identify if any other work needs doing.",5 +BAM-5189,"${system.bamboo.agent.home} should be defined for all agents, not just remote ones","${system.bamboo.agent.home} needs to be defined for all agents, otherwise it makes running pre and post build scripts break.",2 +BAM-5192,"Ability to delete build working directory after a suceessful build","Add a checkbox to delete the builds working directory after the build to control the amount of disk space in use It would be excellent if this https://extranet.atlassian.com/display/IT/2010/01/11/Pre+and+Post+scripts+on+BEAC+agents+to+clean+up+builds was incorporated into the product at a per plan level",5 +BAM-5197,"Bamboo Rest calls cannot find resources directly after install","I started a brand new Bamboo Home (2.5). After running the setup wizard in Bamboo and running a few builds, I added a new plan status gadget to jira (4.0) and got the error below (see screen shot also). The error could also be seen when hitting the straight rest urls: http://localhost:8085/bamboo/rest/api/latest/build/SVN/DEF?expand=builds[0%3A9].build&max-results=10 I then stopped and started Bamboo and the resources were found happily and everything worked. Notifications are not affected (runs through similar code) just the REST calls. --------------- 2010-01-12 13:51:45,070 INFO [10084294@qtp-11642082-31] [AccessLogFilter] admin http://172.20.7.225:8085/bamboo/rest/api/latest/build/SVN/DEF2.json?expand=builds%5B0%3A9%5D.build&max-results=10&nocache=1263264704955 174430kb 2010-01-12 13:51:45,132 ERROR [9682830@qtp-11642082-30] [BambooFreemarkerManager] Error resolving template java.io.FileNotFoundException: Template freemarker-lib/ui.ftl not found. freemarker.template.Configuration.getTemplate(Configuration.java:489) freemarker.core.Environment.getTemplateForInclusion(Environment.java:1464) freemarker.core.Environment.getTemplateForImporting(Environment.java:1518) freemarker.core.Environment.importLib(Environment.java:1503) freemarker.template.Configuration.doAutoImportsAndIncludes(Configuration.java:843) freemarker.core.Configurable.doAutoImportsAndIncludes(Configurable.java:835) freemarker.core.Configurable.doAutoImportsAndIncludes(Configurable.java:835) freemarker.core.Environment.process(Environment.java:188) freemarker.template.Template.process(Template.java:237) com.atlassian.bamboo.ww2.BambooFreemarkerManager.renderPageWithNoContext(BambooFreemarkerManager.java:419) com.atlassian.bamboo.ww2.BambooFreemarkerManager.renderPage(BambooFreemarkerManager.java:260) com.atlassian.bamboo.ww2.BambooFreemarkerManager.renderPage(BambooFreemarkerManager.java:236) com.atlassian.bamboo.ww2.BambooFreemarkerManager.render(BambooFreemarkerManager.java:305) com.atlassian.bamboo.v2.build.trigger.DefaultTriggerReasonRenderer.getShortDescriptionHtml(DefaultTriggerReasonRenderer.java:40) com.atlassian.bamboo.resultsummary.AbstractBuildResultsSummary.getReasonSummary(AbstractBuildResultsSummary.java:135) com.atlassian.bamboo.plugins.rest.model.build.AbstractRestBuild.expand(AbstractRestBuild.java:145) com.atlassian.bamboo.plugins.rest.model.build.RestBuild.expand(RestBuild.java:68) com.atlassian.bamboo.plugins.rest.model.build.RestBuildExpander.expandInternal(RestBuildExpander.java:14) com.atlassian.bamboo.plugins.rest.model.build.RestBuildExpander.expandInternal(RestBuildExpander.java:8) com.atlassian.plugins.rest.common.expand.AbstractRecursiveEntityExpander.expand(AbstractRecursiveEntityExpander.java:9) com.atlassian.plugins.rest.common.expand.resolver.CollectionEntityExpanderResolver$ListExpander.expand(CollectionEntityExpanderResolver.java:65) com.atlassian.plugins.rest.common.expand.resolver.CollectionEntityExpanderResolver$ListExpander.expand(CollectionEntityExpanderResolver.java:56) com.atlassian.plugins.rest.common.expand.EntityCrawler.expandFields(EntityCrawler.java:94) com.atlassian.plugins.rest.common.expand.EntityCrawler.crawl(EntityCrawler.java:35) com.atlassian.plugins.rest.common.expand.resolver.ListWrapperEntityExpanderResolver$ListWrapperEntityExpander.expand(ListWrapperEntityExpanderResolver.java:58) com.atlassian.plugins.rest.common.expand.resolver.ListWrapperEntityExpanderResolver$ListWrapperEntityExpander.expand(ListWrapperEntityExpanderResolver.java:32) com.atlassian.plugins.rest.common.expand.EntityCrawler.expandFields(EntityCrawler.java:94) com.atlassian.plugins.rest.common.expand.EntityCrawler.crawl(EntityCrawler.java:35) com.atlassian.plugins.rest.common.expand.jersey.ExpandResponseFilter.filter(ExpandResponseFilter.java:39) com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:675) com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:612) com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:603) com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:309) com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:425) com.atlassian.plugins.rest.module.RestDelegatingServletFilter$JerseyOsgiServletContainer.doFilter(RestDelegatingServletFilter.java:198) com.sun.jersey.spi.container.servlet.ServletContainer.doFilter(ServletContainer.java:689) com.atlassian.plugins.rest.module.RestDelegatingServletFilter.doFilter(RestDelegatingServletFilter.java:112) ",3 +BAM-5213,"Editing user and setting Source Repository Alias causes null pointer exception","assigning a repository alias to an external (ldap) user throws NPE 2010-01-14 14:41:36,093 ERROR [4844447@qtp-6659511-0] [FiveOhOh] 500 Exception was thrown. java.lang.NullPointerException java.util.AbstractCollection.addAll(AbstractCollection.java:316) com.atlassian.bamboo.ww2.actions.admin.user.ConfigureUser.execute(ConfigureUser.java:88) com.atlassian.bamboo.ww2.actions.admin.user.ConfigureUser.doUpdateExternalUser(ConfigureUser.java:153) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:592) ",3 +BAM-5218,"When downsizing a license plans users are directed to delete on the _old_ server ","When a user has to downsize bamboo instance the use is directed to a delete plans screen. The link points to the bamboo server the last export was made from. Plans on the _previous_ server are deleted _not_ on the current. The previous server may still be active and eligible to run unlimited plans. On that screen a neon warning should be displayed and the base url should be questioned (if not the same as the current hostname/ip address)",3 +BAM-5230,"CVS module field doesn't store changes when cloning an existing build plan","First: create a build plan using CVS as source repository and specify a module to be used. Second: create another build plan and select ""Clone an existing build plan?"" then select the other plan. Click ""Next >>"" and change the CVS module to be used. Click ""Next >>"" until the new plan can be saved and tries to do it's initial build... you will notice that it uses the CVS module specified in the initial build plan instead of the new one specified. Workaround: Abort the initial build and change the module again in the new plan's configuration... afterwards the module is set correctly.",2 +BAM-5244,"Cannot undo Maven POM dependency management","We have 200+ Maven plans configured on one Bamboo instance and some of them are nightly plans with a once-a-day trigger. On upgrading to 2.5 I set all plans to use the Maven2 dependency management. The problem is that I don't want regular CI plans to trigger nightly plans(as they are resource intensive). When I remove POM dependency management from the nightly builds, it doesn't stop them from being triggered by regular CI plans. I have no choice now but to take the Maven 2 dep management off all plans. Oh well, it was nice while it lasted. So - any way to stop the Maven 2 dependencies from crossing from plans of one build strategy (polling) to plans of another (single daily build)?",3 +BAM-5261,"Fix up UI for builders/jdks admin pages",NULL,3 +BAM-5263,"Return URL should be restricted to current server",NULL,3 +BAM-5277,"Session timeout and refreshing of Latest Status bar causes decorated login screen to appear inside page rather than taking up whole page","Attached is a screenshot of what happens when your session has timed out and you go back then forward - appears after about 5-10 seconds",3 +BAM-5281,"JIRA Bamboo Plugin creates deadlock in JIRA and Bamboo applications when starting them up in the same Tomcat server","Steps to reproduce: # Deploy JIRA 4.0.1 WAR into Tomcat 5.5.26 # Deploy Bamboo 2.5.1 WAR into same Tomcat # Configure everything normally # Start up JIRA. Default configuration. Create TST project. # Start up Bamboo. Express Installation. # In JIRA, configure a Bamboo Server for the Bamboo app # Shutdown Tomcat # Restart Tomcat Bamboo gets this far: {quote} 2010-02-04 16:06:03,522 INFO [main] [BambooSmackClient] No IM server specified. Bambo Smack client not initiated. 2010-02-04 16:06:03,573 INFO [main] [BambooContainer] Registered Event Listener: completedBuildNotificationEventListener 2010-02-04 16:06:03,591 INFO [main] [BambooContainer] Registered Event Listener: afterXFailedNotificationListener 2010-02-04 16:06:03,597 INFO [main] [BambooContainer] Registered Event Listener: buildCommentedNotificationListener 2010-02-04 16:06:03,601 INFO [main] [BambooContainer] Registered Event Listener: buildHungNotificationListener 2010-02-04 16:06:03,605 INFO [main] [BambooContainer] Registered Event Listener: buildQueueTimeoutNotificationListener 2010-02-04 16:06:03,608 INFO [main] [BambooContainer] Registered Event Listener: legacyNotificationEventListener 2010-02-04 16:06:03,612 INFO [main] [BambooContainer] Registered Event Listener: buildErrorNotificationListener 2010-02-04 16:06:03,616 INFO [main] [BambooContainer] Registered Event Listener: buildMissingCapableAgentNotificationListener 2010-02-04 16:06:03,620 INFO [main] [BambooContainer] Registered Event Listener: serverStartedEventListener 2010-02-04 16:06:03,620 INFO [main] [BambooContainer] Initialising builds... 2010-02-04 16:06:03,630 INFO [main] [BambooContainer] Checking build repository configurations... 2010-02-04 16:06:03,634 INFO [main] [BambooContainer] Bamboo version 2.5.1 initialised OK 2010-02-04 16:06:03,634 INFO [main] [BambooContainer] Using bamboo.home: /Users/mtokar/support/JSP-51856/bamboohome 2010-02-04 16:06:03,636 INFO [main] [AccessLogFilter] AccessLogFilter initialized. Format is: +- 2010-02-04 16:06:03,642 INFO [main] [[/bamboo]] org.tuckey.web.filters.urlrewrite.utils.Log ERROR: logLevelConf: null 2010-02-04 16:06:03,665 INFO [main] [[/bamboo]] org.tuckey.web.filters.urlrewrite.UrlRewriteFilter INFO: loaded (conf ok) 2010-02-04 16:06:03,748 INFO [main] [[/bamboo]] [CompressingFilter/1.4] CompressingFilter has initialized {quote} JIRA initialisation gets this far: {quote} Database configuration OK ___ Database Configuration _______ Loading entityengine.xml from : file:/Users/mtokar/support/JSP-51856/apache-tomcat-5.5.26/webapps/jira/WEB-INF/classes/entityengine.xml Entity model data source name : defaultDS Entity model field type name : hsql Entity model schema name : PUBLIC Database Version : HSQL Database Engine - 1.8.0 Database Driver : HSQL Database Engine Driver - 1.8.0 Database URL : jdbc:hsqldb:/Users/mtokar/support/JSP-51856/atlassian-jira-enterprise-4.0.1/database/jiradb Database JNDI address : java:comp/env/jdbc/JiraDS {quote} Tomcat logs show that Tomcat has hung after the plugins system has been initialised: {quote} 4/02/2010 16:06:17 com.atlassian.plugin.osgi.factory.UnrecognizedModuleDescriptorServiceTrackerCustomizer addingService INFO: Turned plugin module com.atlassian.streams.streams-jira-plugin:streamsActivityProvider into module com.atlassian.streams.streams-jira-plugin:streamsActivityProvider (null) 4/02/2010 16:06:26 com.atlassian.plugin.loaders.ScanningPluginLoader loadAllPlugins INFO: No plugins found to be deployed 4/02/2010 16:06:26 com.atlassian.plugin.manager.DefaultPluginManager init INFO: Plugin system started in 0:00:19.183 {quote} Neither JIRA or Bamboo webapps can be accessed through the browser. Thread dump of Tomcat shows the following stack trace: {quote} Thread t@81667: (state = IN_NATIVE) - java.net.SocketInputStream.socketRead0(java.io.FileDescriptor, byte[], int, int, int) @bci=0 (Interpreted frame) - java.net.SocketInputStream.read(byte[], int, int) @bci=84, line=129 (Interpreted frame) - java.io.BufferedInputStream.fill() @bci=175, line=218 (Compiled frame) - java.io.BufferedInputStream.read() @bci=12, line=235 (Compiled frame) - org.apache.commons.httpclient.HttpParser.readRawLine(java.io.InputStream) @bci=36, line=77 (Interpreted frame) - org.apache.commons.httpclient.HttpParser.readLine(java.io.InputStream, java.lang.String) @bci=11, line=105 (Interpreted frame) - org.apache.commons.httpclient.HttpConnection.readLine(java.lang.String) @bci=19, line=1115 (Interpreted frame) - org.apache.commons.httpclient.MultiThreadedHttpConnectionManager$HttpConnectionAdapter.readLine(java.lang.String) @bci=12, line=1373 (Interpreted frame) - org.apache.commons.httpclient.HttpMethodBase.readStatusLine(org.apache.commons.httpclient.HttpState, org.apache.commons.httpclient.HttpConnection) @bci=36, line=1832 (Interpreted frame) - org.apache.commons.httpclient.HttpMethodBase.readResponse(org.apache.commons.httpclient.HttpState, org.apache.commons.httpclient.HttpConnection) @bci=16, line=1590 (Interpreted frame) - org.apache.commons.httpclient.HttpMethodBase.execute(org.apache.commons.httpclient.HttpState, org.apache.commons.httpclient.HttpConnection) @bci=68, line=995 (Interpreted frame) - org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(org.apache.commons.httpclient.HttpMethod) @bci=138, line=397 (Interpreted frame) - org.apache.commons.httpclient.HttpMethodDirector.executeMethod(org.apache.commons.httpclient.HttpMethod) @bci=291, line=170 (Interpreted frame) - org.apache.commons.httpclient.HttpClient.executeMethod(org.apache.commons.httpclient.HostConfiguration, org.apache.commons.httpclient.HttpMethod, org.apache.commons.httpclient.HttpState) @bci=115, line=396 (Interpreted frame) - org.apache.commons.httpclient.HttpClient.executeMethod(org.apache.commons.httpclient.HttpMethod) @bci=14, line=324 (Interpreted frame) - com.atlassian.jira.plugin.ext.bamboo.BambooServerManagerImpl.isGadgetAvailable(java.net.URI) @bci=17, line=413 (Interpreted frame) - com.atlassian.jira.plugin.ext.bamboo.BambooServerManagerImpl.addGadgetsForServer(com.atlassian.jira.plugin.ext.bamboo.service.BambooServer) @bci=63, line=376 (Interpreted frame) - com.atlassian.jira.plugin.ext.bamboo.BambooServerManagerImpl.start() @bci=36, line=117 (Interpreted frame) - com.atlassian.sal.jira.lifecycle.JiraLifecycleManager.notifyOnStart() @bci=99, line=83 (Interpreted frame) - com.atlassian.sal.core.lifecycle.DefaultLifecycleManager.start() @bci=15, line=50 (Interpreted frame) - com.atlassian.sal.jira.lifecycle.JiraLifecycleManager.onJiraStart(com.atlassian.jira.extension.JiraStartedEvent) @bci=9, line=60 (Interpreted frame) {quote} So what we have is a deadlock. Bamboo is somewhat started up but not responding to HTTP requests. JIRA has started its plugins, and in the starting of the JIRA Bamboo Plugin, some code tries to eagerly instantiate something in {{BambooServerManagerImpl.java}}: {code} protected boolean isGadgetAvailable(URI uri) { HeadMethod method = new HeadMethod(uri.toString()); try { httpClient.executeMethod(method); return method.getStatusCode() < HTTP_STATUS_CODE_ERRORS; } catch(IOException e) { return false; } finally { method.releaseConnection(); } } {code} i.e. JIRA is waiting on Bamboo to respond. This should be fixed so that the attempted HTTP connection at least has a sensible timeout (60seconds?) before it gives up and moves along. That, or instantiate things not on the startup of a plugin but at a different point in the lifecycle.",5 +BAM-5287,"Name change from Build to Plan security aware broke nant plugin","2010-02-04 13:40:32,839 ERROR [main] [DefaultPluginManager] There was an error loading the descriptor 'View NCover Result' of plugin 'com.atlassian.bamboo.plugin.builder.nant'. Disabling. java.lang.NoClassDefFoundError: com/atlassian/bamboo/ww2/aware/permissions/BuildReadSecurityAware java.lang.ClassLoader.defineClass1(Native Method) java.lang.ClassLoader.defineClass(ClassLoader.java:620) java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1629) org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:850) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1299) org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1181) com.opensymphony.util.ClassLoaderUtil.loadClass(ClassLoaderUtil.java:96) com.opensymphony.xwork.ObjectFactory.getClassInstance(ObjectFactory.java:88) com.opensymphony.xwork.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.java:177) com.opensymphony.xwork.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:117) com.opensymphony.xwork.ObjectFactory.buildAction(ObjectFactory.java:101) com.atlassian.bamboo.plugin.xwork.PluginAwareObjectFactory.buildAction(PluginAwareObjectFactory.java:34) com.atlassian.bamboo.plugin.xwork.XWorkModuleDescriptor.addAction(XWorkModuleDescriptor.java:282) com.atlassian.bamboo.plugin.xwork.XWorkModuleDescriptor.getPackages(XWorkModuleDescriptor.java:115) com.atlassian.bamboo.plugin.xwork.XWorkModuleDescriptor.getPackages(XWorkModuleDescriptor.java:500) com.atlassian.bamboo.plugin.xwork.XWorkModuleDescriptor.init(XWorkModuleDescriptor.java:479) com.opensymphony.xwork.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:159) com.atlassian.bamboo.plugin.xwork.XWorkModuleDescriptor.enabled(XWorkModuleDescriptor.java:65) com.atlassian.plugin.manager.DefaultPluginManager.notifyModuleEnabled(DefaultPluginManager.java:1168) com.atlassian.plugin.manager.DefaultPluginManager.enablePluginModules(DefaultPluginManager.java:988) com.atlassian.plugin.manager.DefaultPluginManager.addPlugins(DefaultPluginManager.java:558) com.atlassian.plugin.manager.DefaultPluginManager.init(DefaultPluginManager.java:153) com.atlassian.bamboo.container.BambooContainer.init(BambooContainer.java:181) com.atlassian.bamboo.container.BambooContainer.initialise(BambooContainer.java:148) com.atlassian.bamboo.upgrade.UpgradeLauncher.initialiseBambooContainer(UpgradeLauncher.java:140) com.atlassian.bamboo.upgrade.UpgradeLauncher.upgradeAndStartBamboo(UpgradeLauncher.java:86) com.atlassian.bamboo.upgrade.UpgradeLauncher.contextInitialized(UpgradeLauncher.java:32) org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3669) org.apache.catalina.core.StandardContext.start(StandardContext.java:4104) org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759) org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739) org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524) org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:894) org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:857) org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:475) org.apache.catalina.startup.HostConfig.start(HostConfig.java:1102) org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1020) org.apache.catalina.core.StandardHost.start(StandardHost.java:718) org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012) org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442) org.apache.catalina.core.StandardService.start(StandardService.java:450) org.apache.catalina.core.StandardServer.start(StandardServer.java:683) org.apache.catalina.startup.Catalina.start(Catalina.java:537) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:585) org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271) org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)",1 +BAM-5296,"Differences in the implementation of a BuildResultsSummary cause labels to be duplicated on the 'Related builds by date' tab of the Jira Bamboo Plugin","See BuildResultsSummaryDocument vs BuildResultsSummaryImpl for getLabelNames()",3 +BAM-5317,"Delete multiple agents simultaneously","The lab manager plugin pollutes the agent space will thousands of agents that do no deregister properly. This ruins performance as the ui is affected by the product of plans * agent capabilities. Please implement a way to delete inactive agents.",5 +BAM-5328,"Large number of exceptions being thrown on JBAC","ssh atlassian20.private nice tail -F /service/j2ee_jira.bamboo.atlassian.com/log/main/current Sample: @400000004b74ceb62c1587b4 2010-02-11 21:44:44,737 ERROR [TP-Processor29] [runtime] @400000004b74ceb62c159754 @400000004b74ceb62c159b3c Error executing macro: displayReorderQueueActions @400000004b74ceb62c159f24 required parameter: returnUrl is not specified. @400000004b74ceb62c15a30c The problematic instruction: @400000004b74ceb62c15a6f4 ---------- @400000004b74ceb62c15aadc ==> macro displayReorderQueueActions [on line 3, column 1 in fragments/showBuildQueue.ftl] @400000004b74ceb62c15b2ac in user-directive displayReorderQueueActions [on line 166, column 33 in fragments/showBuildQueue.ftl] @400000004b74ceb62c1652d4 ---------- @400000004b74ceb62c1652d4 @400000004b74ceb62c1656bc Java backtrace for programmers: @400000004b74ceb62c165aa4 ---------- @400000004b74ceb62c165e8c freemarker.template.TemplateException: Error executing macro: displayReorderQueueActions @400000004b74ceb62c16665c required parameter: returnUrl is not specified. @400000004b74ceb62c166a44 freemarker.core.Macro$Context.sanityCheck(Macro.java:207) @400000004b74ceb62c167dcc freemarker.core.Macro$Context.runMacro(Macro.java:165) @400000004b74ceb62c16859c freemarker.core.Environment.visit(Environment.java:602) @400000004b74ceb62c168984 freemarker.core.UnifiedCall.accept(UnifiedCall.java:106) @400000004b74ceb62c168d6c freemarker.core.Environment.visit(Environment.java:209) @400000004b74ceb62c169154 freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:79) @400000004b74ceb62c16a4dc freemarker.core.Environment.visit(Environment.java:209) @400000004b74ceb62c16a8c4 freemarker.core.MixedContent.accept(MixedContent.java:92) @400000004b74ceb62c16d3bc freemarker.core.Environment.visit(Environment.java:209) @400000004b74ceb62c16d7a4 freemarker.core.IfBlock.accept(IfBlock.java:82) @400000004b74ceb62c16df74 freemarker.core.Environment.visit(Environment.java:209) @400000004b74ceb62c16e35c freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:167) @400000004b74ceb62c16e744 freemarker.core.Environment.visit(Environment.java:416) @400000004b74ceb62c16facc freemarker.core.IteratorBlock.accept(IteratorBlock.java:102) @400000004b74ceb62c16feb4 freemarker.core.Environment.visit(Environment.java:209) @400000004b74ceb62c170684 freemarker.core.IfBlock.accept(IfBlock.java:82) @400000004b74ceb62c170a6c freemarker.core.Environment.visit(Environment.java:209) @400000004b74ceb62c170e54 freemarker.core.MixedContent.accept(MixedContent.java:92) @400000004b74ceb62c1721dc freemarker.core.Environment.visit(Environment.java:209) @400000004b74ceb62c1725c4 freemarker.core.Environment.process(Environment.java:189) @400000004b74ceb62c1729ac freemarker.template.Template.process(Template.java:237) @400000004b74ceb62c17317c com.opensymphony.webwork.views.freemarker.FreemarkerResult.doExecute(FreemarkerResult.java:214) @400000004b74ceb62c173564 com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WebWorkResultSupport.java:143) @400000004b74ceb62c180c3c com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:313) @400000004b74ceb62c18140c com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:208) @400000004b74ceb62c181bdc com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:175) @400000004b74ceb62c1823ac com.atlassian.bamboo.ww2.interceptors.BambooWorkflowInterceptor.doIntercept(BambooWorkflowInterceptor.java:33) @400000004b74ceb62c183734 com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) @400000004b74ceb62c183f04 com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c1842ec com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:116) @400000004b74ceb62c185a5c com.atlassian.bamboo.ww2.interceptors.BambooValidationInterceptor.doIntercept(BambooValidationInterceptor.java:33) @400000004b74ceb62c18622c com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) @400000004b74ceb62c1869fc com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c188d24 com.atlassian.bamboo.ww2.interceptors.JSONValidationInterceptor.intercept(JSONValidationInterceptor.java:78) @400000004b74ceb62c1894f4 com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c189cc4 com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) @400000004b74ceb62c18a0ac com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c18bc04 com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) @400000004b74ceb62c18c3d4 com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c18c7bc com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) @400000004b74ceb62c18cf8c com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c18e314 com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:174) @400000004b74ceb62c18eae4 com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c18eecc com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) @400000004b74ceb62c1915dc com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c191dac com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) @400000004b74ceb62c192194 com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c192964 com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) @400000004b74ceb62c1940d4 com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c1944bc com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:151) @400000004b74ceb62c194c8c com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c195074 com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) @400000004b74ceb62c196bcc com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c196fb4 com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptor.intercept(WebworkSecurityInterceptor.java:55) @400000004b74ceb62c197784 com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptorProxy.intercept(WebworkSecurityInterceptorProxy.java:30) @400000004b74ceb62c19e4e4 com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c19ecb4 com.atlassian.bamboo.ww2.interceptors.PaginationAwareInterceptor.intercept(PaginationAwareInterceptor.java:68) @400000004b74ceb62c19f09c com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c1a0fdc com.atlassian.bamboo.ww2.interceptors.StatisticsAwareInterceptor.intercept(StatisticsAwareInterceptor.java:41) @400000004b74ceb62c1a17ac com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c1a1b94 com.atlassian.bamboo.ww2.interceptors.ResultsListAwareInterceptor.intercept(ResultsListAwareInterceptor.java:48) @400000004b74ceb62c1a3304 com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c1a36ec com.atlassian.bamboo.ww2.interceptors.TestCaseAwareInterceptor.intercept(TestCaseAwareInterceptor.java:44) @400000004b74ceb62c1a3ebc com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c1a61e4 com.atlassian.bamboo.ww2.interceptors.BuildResultsSummaryAwareInteceptor.intercept(BuildResultsSummaryAwareInteceptor.java:66) @400000004b74ceb62c1a69b4 com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c1a6d9c com.atlassian.bamboo.ww2.interceptors.BuildAwareInterceptor.intercept(BuildAwareInterceptor.java:47) @400000004b74ceb62c1a8124 com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c1a88f4 com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) @400000004b74ceb62c1a8cdc com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c1a94ac com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) @400000004b74ceb62c1ab004 com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c1ab3ec com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) @400000004b74ceb62c1abbbc com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c1ac38c com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:186) @400000004b74ceb62c1aee84 com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) @400000004b74ceb62c1af654 com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116) @400000004b74ceb62c1afe24 com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:274) @400000004b74ceb62c1b020c com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:202) @400000004b74ceb62c1b214c org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1b2534 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1b2d04 com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) @400000004b74ceb62c1b34d4 com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) @400000004b74ceb62c1b4c44 com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) @400000004b74ceb62c1b5414 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1b7f0c org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1b86dc com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) @400000004b74ceb62c1b8ac4 com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) @400000004b74ceb62c1b9294 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1bf824 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1bfff4 com.opensymphony.webwork.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:88) @400000004b74ceb62c1c07c4 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1c0bac org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1c1f34 com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) @400000004b74ceb62c1c2704 com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) @400000004b74ceb62c1c4a2c com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) @400000004b74ceb62c1c51fc org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1c59cc org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1c6d54 com.atlassian.bamboo.filter.AccessLogFilter.doFilter(AccessLogFilter.java:76) @400000004b74ceb62c1c7524 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1c790c org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1c80dc org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265) @400000004b74ceb62c1c9464 org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) @400000004b74ceb62c1c9c34 org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) @400000004b74ceb62c1ca01c com.atlassian.bamboo.filter.SeraphLoginFilter.doFilter(SeraphLoginFilter.java:61) @400000004b74ceb62c1cc344 org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) @400000004b74ceb62c1cc72c org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) @400000004b74ceb62c1ccefc org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) @400000004b74ceb62c1cd6cc com.atlassian.bamboo.filter.BambooAcegiProxyFilter.doFilter(BambooAcegiProxyFilter.java:25) @400000004b74ceb62c1ce66c org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1cee3c org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1cf60c com.atlassian.bamboo.filter.LicenseFilter.doFilter(LicenseFilter.java:73) @400000004b74ceb62c1cf9f4 com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31) @400000004b74ceb62c1d0d7c org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1d154c org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1d1934 com.atlassian.johnson.filters.AbstractJohnsonFilter.doFilter(AbstractJohnsonFilter.java:72) @400000004b74ceb62c1d4044 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1d442c org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1d4bfc com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:204) @400000004b74ceb62c1d4fe4 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1da9bc org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1db18c com.atlassian.seraph.filter.BaseLoginFilter.doFilter(BaseLoginFilter.java:138) @400000004b74ceb62c1db574 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1dbd44 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1dd0cc com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) @400000004b74ceb62c1dd89c com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) @400000004b74ceb62c1de06c com.atlassian.oauth.serviceprovider.internal.servlet.OAuthFilter.doFilter(OAuthFilter.java:69) @400000004b74ceb62c1e0394 com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) @400000004b74ceb62c1e0b64 com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) @400000004b74ceb62c1e1334 com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) @400000004b74ceb62c1e26bc com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) @400000004b74ceb62c1e2e8c org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1e3274 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1e45fc org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:170) @400000004b74ceb62c1e4dcc com.atlassian.spring.filter.FlushingSpringSessionInViewFilter.doFilterInternal(FlushingSpringSessionInViewFilter.java:29) @400000004b74ceb62c1e559c org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) @400000004b74ceb62c1e7cac org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1e8094 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1e8864 com.planetj.servlet.filter.compression.CompressingFilter.handleDoFilter(CompressingFilter.java:203) @400000004b74ceb62c1e9034 com.planetj.servlet.filter.compression.CompressingFilter.doFilter(CompressingFilter.java:193) @400000004b74ceb62c1e9fd4 com.atlassian.bamboo.filter.CompressingFilter.doFilter(CompressingFilter.java:65) @400000004b74ceb62c1ea7a4 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1eaf74 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1eb35c com.atlassian.bamboo.filter.NonCachingHeaderFilter.doFilter(NonCachingHeaderFilter.java:22) @400000004b74ceb62c1ec6e4 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1eceb4 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1ed684 com.atlassian.bamboo.filter.RequestCacheThreadLocalFilter.doFilter(RequestCacheThreadLocalFilter.java:26) @400000004b74ceb62c1ef5c4 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1efd94 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1f0564 com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) @400000004b74ceb62c1f094c com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) @400000004b74ceb62c1f5384 com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) @400000004b74ceb62c1f5b54 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1f6324 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @400000004b74ceb62c1f76ac org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) @400000004b74ceb62c1f7e7c org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) @400000004b74ceb62c1fa1a4 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) @400000004b74ceb62c1fa974 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) @40...",1 +BAM-5358,"Persist some calculated data for ArtifactLink","From: https://atlaseye.atlassian.com/cru/CR-BAM-997#c17472 Chai: Is there any reason why we wouldn't simply store the calculated values? One of the things was that size was not calculated for directories in fear that it was going to be too expensive (which it can be if artifacts are big). Thoughts? Krystian: If we decide to persist the url then we shall remember to update it once the buildKey will get changed (build move) which in my opinion adds complexity. We can however store a path with some kind of token to be replaced by planKey while property is being read (""/browse/%s/artifacts/build-123/whatever"") If you want to persist artifact size as well, then we might calculate directory size (as it would be done once). Chai: Yeah for URL we could just store the calculated suffix (ie the thing that requires us to browse for an index.html etc) and leave out the prefix (that can just be apended, it's not expensive) + we should store the full size for the directory, though it'd be good to do some testing to see if how much more time it adds (say for a Clover report over JIRA is a good test)",2 +BAM-5376,"Dynamic EC2 agents"," Related to BAM-3344",8 +BAM-5425,"Adding correct AWS account credentials gives a stack trace if the account does not have an EC2 subscription","It should instead give a regular error message informing the user of the problem. The stack trace is: {noformat} A communication error occurred while trying to validate the AWS account credentials. com.atlassian.aws.AWSException: Failed to determine validity of AWS credentials. com.atlassian.aws.AWSAccountImpl.validate(AWSAccountImpl.java:79) com.atlassian.bamboo.agent.elastic.server.ElasticInstanceManagerImpl.validateAwsCredentials(ElasticInstanceManagerImpl.java:167) com.atlassian.bamboo.ww2.actions.admin.elastic.ConfigureElasticCloudAction.testAWSCredentials(ConfigureElasticCloudAction.java:215) com.atlassian.bamboo.ww2.actions.admin.elastic.ConfigureElasticCloudAction.validate(ConfigureElasticCloudAction.java:129) com.atlassian.bamboo.ww2.actions.admin.elastic.ConfigureElasticCloudAction.doSave(ConfigureElasticCloudAction.java:167) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:592) com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:358) com.opensymphony.xwork.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:218) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:192) com.atlassian.bamboo.ww2.interceptors.BambooWorkflowInterceptor.doIntercept(BambooWorkflowInterceptor.java:30) com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.BambooValidationInterceptor.doIntercept(BambooValidationInterceptor.java:30) com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.JSONValidationInterceptor.intercept(JSONValidationInterceptor.java:83) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:174) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:151) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptor.intercept(WebworkSecurityInterceptor.java:63) com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptorProxy.intercept(WebworkSecurityInterceptorProxy.java:30) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.PaginationAwareInterceptor.intercept(PaginationAwareInterceptor.java:68) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.StatisticsAwareInterceptor.intercept(StatisticsAwareInterceptor.java:41) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.ResultsListAwareInterceptor.intercept(ResultsListAwareInterceptor.java:48) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.TestCaseAwareInterceptor.intercept(TestCaseAwareInterceptor.java:44) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.BuildResultsSummaryAwareInteceptor.intercept(BuildResultsSummaryAwareInteceptor.java:66) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.BuildAwareInterceptor.intercept(BuildAwareInterceptor.java:47) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:186) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116) com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:274) com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:202) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.opensymphony.webwork.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:88) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.bamboo.filter.AccessLogFilter.doFilter(AccessLogFilter.java:61) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265) org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) com.atlassian.bamboo.filter.SeraphLoginFilter.doFilter(SeraphLoginFilter.java:61) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) com.atlassian.bamboo.filter.BambooAcegiProxyFilter.doFilter(BambooAcegiProxyFilter.java:25) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.bamboo.filter.LicenseFilter.doFilter(LicenseFilter.java:73) com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.johnson.filters.AbstractJohnsonFilter.doFilter(AbstractJohnsonFilter.java:72) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:204) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.seraph.filter.BaseLoginFilter.doFilter(BaseLoginFilter.java:138) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) com.atlassian.security.auth.trustedapps.filter.TrustedApplicationsFilter.doFilter(TrustedApplicationsFilter.java:100) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) com.atlassian.oauth.serviceprovider.internal.servlet.OAuthFilter.doFilter(OAuthFilter.java:69) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:170) com.atlassian.spring.filter.FlushingSpringSessionInViewFilter.doFilterInternal(FlushingSpringSessionInViewFilter.java:29) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.bamboo.filter.CompressingFilter.doFilter(CompressingFilter.java:69) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.bamboo.filter.RequestCacheThreadLocalFilter.doFilter(RequestCacheThreadLocalFilter.java:26) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:444) org.apache.coyote.ajp.AjpAprProtocol$AjpConnectionHandler.process(AjpAprProtocol.java:472) org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286) java.lang.Thread.run(Thread.java:595) Caused by: com.xerox.amazonws.ec2.EC2Exception: Client error : You are not subscribed to this service. Please go to http://aws.amazon.com to subscribe. com.xerox.amazonws.ec2.Jec2.makeRequestInt(Jec2.java:1680) com.xerox.amazonws.ec2.Jec2.describeAvailabilityZones(Jec2.java:1284) com.atlassian.aws.AWSAccountImpl.validate(AWSAccountImpl.java:69) ... 151 more {noformat} This bug was actually found on Studio 2.1 which is running Bamboo 2.5-m5 (long story).",2 +BAM-5431,"REST API missing / in url for build log artifact ","Problem is only with the *Build Log*, normal artifacts have the correct URL. https://bamboo.community.atlassian.com/rest/api/latest/build/CONFTRIGGER-TRUNK?expand=builds[0].build.artifacts Note missing / before *download*: {code:xml} Build log {code}",2 +BAM-5433,"Elastic Images for Windows 2003 with IE7 and IE8 for Selenium","It would be excellent to have EC2 Images with IE7 and IE8 for Selenium testing. A few concerns: * Build system changes * Security on the Windows hosts ** Need some way to RDP to the host without the ec2 images having the same user/pass * Windows 2003 Server security needs to be tuned to Windows XP level (Selenium will break if the Security Zones are not configured correctly) * Windows software updates * Should we install Firefox 2/3 and Google Chrome?",5 +BAM-5442,"Expire build logs",NULL,3 +BAM-5456,"CAPABILITY and NOTIFICATIONS table access with Empty values causes (Oracle) Deadlock in larger instances","Frequent deadlocks are reported by (Oracle) DB when accessing the capability table. Databases wait to actually write (flush) data until someone wants to read it. The hibernate session is being flushed and for some reason the capability object is marked as dirty. Hibernate issues an update to persist the capability. Not usually a big deal but with a large number of plans and the fact that this is invoked from an event, we could have events that try to lock competing resources. ",3 +BAM-5510,"Broken link to the dashboard on the /error/error.action","In case there're no errors the /error/error.action contains following: {code} There are no errors accessing Bamboo at present. Return to dashboard. {code}",1 +BAM-5519,"Ensure all reports work with new test infrastructure","Reports = those on the reports page. * Some of the reports relied on the test count information being available on the buildresult * The tests report relied on the test data being indexed. Now it is not. * We should index the testsummary object Reports that use it * Test report In the build data table, it may need test summary ",3 +BAM-5569,"'view' a plan config tab and click 'edit' - you land on a tab that you've last edited (and not the one you just viewed)","annoying cookie crumble here. If I view a config tab and click edit - where do I want to land? -- exactly you got it - I want to edit the tab that I just viewed and not some random tab that I might have edited in the past. ",3 +BAM-5644,"Upgrade task fails on MS SQL Server due to deadlock","Upgrade task 1825 reports deadlock and fails. It works correctly only if run as single thread.",8 +BAM-5645,"Deadlocks reported during change detection on MS SQL Server","Observed on installation created from J2BAC export.",13 +BAM-5651,"Brute force protection","Login access needs to present a captcha",5 +BAM-5674,"invalid backup cron expression leads to NPE when trying to edit.","there is no remedy other than manually editing /xml-data/configuration/administration.xml If an invalid cron expression is detected the edit screen should be accessible with the default cron expression. ",1 +BAM-5675,"JCaptcha throwing occasional exception on OS X","{noformat} 2010-04-22 12:02:26,281 ERROR [1173503085@qtp-1259610518-2] [FiveOhOh:46] 500 Exception was thrown. com.octo.captcha.CaptchaException: word is too tall: try to use less letters, smaller font or bigger background: text bounds = {text=stoden java.awt.geom.Rectangle2D$Float[x=0.0,y=-32.871094,w=19.22461,h=40.04297] ascent=32.871094 descent=7.171875 leading=0.0 java.awt.geom.Rectangle2D$Float[x=39.22461,y=-29.357,w=7.9051514,h=38.409] ascent=29.357 descent=9.052 leading=0.0 java.awt.geom.Rectangle2D$Float[x=67.12976,y=-21.811523,w=15.0,h=30.703125] ascent=21.811523 descent=8.891602 leading=0.0 java.awt.geom.Rectangle2D$Float[x=102.12976,y=-25.410645,w=20.157715,h=33.0] ascent=25.410645 descent=7.5893555 leading=0.0 java.awt.geom.Rectangle2D$Float[x=142.28748,y=-60.0,w=16.399902,h=108.08] ascent=60.0 descent=48.08 leading=0.0 java.awt.geom.Rectangle2D$Float[x=178.68738,y=-60.0,w=20.879883,h=108.08] ascent=60.0 descent=48.08 leading=0.0 } with fonts {java.awt.Font[family=PMingLiU,name=PMingLiU,style=plain,size=32] java.awt.Font[family=Dialog,name=BrushScriptMT,style=bold,size=34] java.awt.Font[family=Bodoni SvtyTwo OS ITC TT,name=BodoniSvtyTwoOSITCTT-BookIt,style=italic,size=31] java.awt.Font[family=New Peninim MT,name=NewPeninimMT-Bold,style=bolditalic,size=30] java.awt.Font[family=Helvetica,name=Helvetica-Bold,style=bolditalic,size=33] java.awt.Font[family=Zapfino,name=Zapfino,style=bolditalic,size=32] } versus image width = 200, height = 100 com.octo.captcha.image.gimpy.GimpyFactory.getImageCaptcha(GimpyFactory.java:79) com.octo.captcha.engine.image.ListImageCaptchaEngine.getNextImageCaptcha(ListImageCaptchaEngine.java:128) com.octo.captcha.engine.image.ImageCaptchaEngine.getNextCaptcha(ImageCaptchaEngine.java:52) com.octo.captcha.service.AbstractCaptchaService.generateAndStoreCaptcha(AbstractCaptchaService.java:148) com.octo.captcha.service.AbstractManageableCaptchaService.generateCountTimeStampAndStoreCaptcha(AbstractManageableCaptchaService.java:340) com.octo.captcha.service.AbstractManageableCaptchaService.generateAndStoreCaptcha(AbstractManageableCaptchaService.java:329) com.octo.captcha.service.AbstractCaptchaService.getChallengeForID(AbstractCaptchaService.java:74) com.octo.captcha.service.image.AbstractManageableImageCaptchaService.getImageChallengeForID(AbstractManageableImageCaptchaService.java:62) com.atlassian.bamboo.servlet.BambooCaptchaServlet.doGet(BambooCaptchaServlet.java:38) {noformat} http://jcaptcha.octo.com/jira/browse/FWK-58",1 +BAM-5701,"Column AUTHOR_NAME in AUTHOR table should be unique",NULL,3 +BAM-5713,"Link is escaped on Elastic Bamboo Configuration scrren","see screenshot (link to the enable remote agents page inside the error box is escaped)",1 +BAM-5778,"After installing Bamboo (on Windows), Bamboo automatically detects and assigns the JRE executables of a JDK installation rather than the JDK executables.","When you install a JDK on windows, it usually installs a JDK and JRE component to the following paths: * {{C:\Java\jdk1.6.0_10}} * {{C:\Java\jre6}} When Bamboo automatically detects the presence of local JDKs (after having installed a JDK and Bamboo on Windows), Bamboo appears to assign these locally detected JDKs the path to the JRE executables of the JDK installation (for example, {{C:\Java\jre6}}), rather than the path to the JDK executables instead (i.e. {{C:\Java\jdk1.6.0_10}}). I'm not sure if this happens on other operating systems. ",1 +BAM-5833,"Labmanager should remove agents properly","From https://studio.atlassian.com/browse/LABMAN-26",5 +BAM-5860,"Incorrect state shown on remote agent page","After a remote agent is stopped the state shown in the page cycles between Disabled (correct) and ""will be disabled when the build finishes"" (incorrect as agent process is long dead) ",1 +BAM-5862,"Support MSSQL with Unicode","[Confluence supports MSSQL Unicode|http://confluence.atlassian.com/display/DOC/Known+Issues+For+SQL+Server#KnownIssuesForSQLServer-UnicodeCharactersNotSupportedByDefault] Bamboo should do as well. Include net/sf/hibernate/dialect/SQLServerIntlDialect.java (we can steal it from confluence) I have verified that it works. ",3 +BAM-5870,"SaveBuildTask & LocalBuildProcessor should be run as a single tranasactional call","SaveBuildTask needs some refactoring: 1. It should not be a task, instead, it should be a service. 2. At least database access for BRS and test classes should be made in a single transaction. 3. Consider moving updateBuildSummaryFromBuildResults from BRSManager to the newly created service.",5 +BAM-5943,"Elastic bamboo agent (bamboo-agent-home) uses small 10G root partition of elastic instance.","the elastic agent home is located in the small (10G) root partition of the el instance. the rest of the disk space is available on /mnt which is not used at all!!! bamboo-agent-home should be linked to use /mnt/bamboo/bamboo-agent-home for bamboo data /home/bamboo _could_ be linked to /mnt/bamboo/. for agent logs etc. but this is not urgent, This issue occurs if no ebs volumes are used. ",1 +BAM-6010,"Create reusable progress bar component",NULL,3 +BAM-6017,"Hibernate Exception when hitting dashboard","2010-06-10 11:08:45,082 ERROR [304703545@qtp-46675819-10] [LazyInitializer] Exception initializing proxy net.sf.hibernate.HibernateException: Could not initialize proxy - the owning Session was closed net.sf.hibernate.proxy.LazyInitializer.initialize(LazyInitializer.java:47) net.sf.hibernate.proxy.LazyInitializer.initializeWrapExceptions(LazyInitializer.java:60) net.sf.hibernate.proxy.LazyInitializer.getImplementation(LazyInitializer.java:164) net.sf.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:108) com.atlassian.bamboo.project.DefaultProject$$EnhancerByCGLIB$$ed17e412.getKey() com.atlassian.bamboo.project.ProjectStatusHelperImpl.(ProjectStatusHelperImpl.java:39) com.atlassian.bamboo.webwork.StarterAction.getProjectStatusHelper(StarterAction.java:146) sun.reflect.GeneratedMethodAccessor358.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:778) ognl.OgnlRuntime.getMethodValue(OgnlRuntime.java:1297) ognl.ObjectPropertyAccessor.getPossibleProperty(ObjectPropertyAccessor.java:60) ognl.ObjectPropertyAccessor.getProperty(ObjectPropertyAccessor.java:147) com.opensymphony.xwork.util.OgnlValueStack$ObjectAccessor.getProperty(OgnlValueStack.java:57) ognl.OgnlRuntime.getProperty(OgnlRuntime.java:1940) com.opensymphony.xwork.util.CompoundRootAccessor.getProperty(CompoundRootAccessor.java:334) ognl.OgnlRuntime.getProperty(OgnlRuntime.java:1940) ognl.ASTProperty.getValueBody(ASTProperty.java:114) ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) ognl.SimpleNode.getValue(SimpleNode.java:258) ognl.Ognl.getValue(Ognl.java:494) ognl.Ognl.getValue(Ognl.java:458) com.opensymphony.xwork.util.OgnlUtil.getValue(OgnlUtil.java:287) com.opensymphony.xwork.util.OgnlValueStack.findValue(OgnlValueStack.java:224) com.opensymphony.webwork.views.freemarker.ScopesHashModel.get(ScopesHashModel.java:51) freemarker.core.Environment.getGlobalVariable(Environment.java:1063) freemarker.core.Environment.getVariable(Environment.java:1049) freemarker.core.Identifier._getAsTemplateModel(Identifier.java:70) freemarker.core.Expression.getAsTemplateModel(Expression.java:89) freemarker.core.Dot._getAsTemplateModel(Dot.java:74) freemarker.core.Expression.getAsTemplateModel(Expression.java:89) freemarker.core.MethodCall._getAsTemplateModel(MethodCall.java:86) freemarker.core.Expression.getAsTemplateModel(Expression.java:89) freemarker.core.Expression.getStringValue(Expression.java:93) freemarker.core.DollarVariable.accept(DollarVariable.java:76) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.MixedContent.accept(MixedContent.java:92) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.IfBlock.accept(IfBlock.java:82) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.MixedContent.accept(MixedContent.java:92) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.IfBlock.accept(IfBlock.java:82) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.MixedContent.accept(MixedContent.java:92) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:167) freemarker.core.Environment.visit(Environment.java:417) freemarker.core.IteratorBlock.accept(IteratorBlock.java:102) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.MixedContent.accept(MixedContent.java:92) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.Macro$Context.runMacro(Macro.java:172) freemarker.core.Environment.visit(Environment.java:603) freemarker.core.UnifiedCall.accept(UnifiedCall.java:106) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.MixedContent.accept(MixedContent.java:92) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.Environment.process(Environment.java:190) freemarker.template.Template.process(Template.java:237) com.opensymphony.webwork.views.freemarker.FreemarkerResult.doExecute(FreemarkerResult.java:214) com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WebWorkResultSupport.java:143) com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:313) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:208) com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:175) com.atlassian.bamboo.ww2.interceptors.BambooWorkflowInterceptor.doIntercept(BambooWorkflowInterceptor.java:33) com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:116) com.atlassian.bamboo.ww2.interceptors.BambooValidationInterceptor.doIntercept(BambooValidationInterceptor.java:33) com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.JSONValidationInterceptor.intercept(JSONValidationInterceptor.java:78) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:174) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:151) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptor.intercept(WebworkSecurityInterceptor.java:55) com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptorProxy.intercept(WebworkSecurityInterceptorProxy.java:30) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.PaginationAwareInterceptor.intercept(PaginationAwareInterceptor.java:84) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.StatisticsAwareInterceptor.intercept(StatisticsAwareInterceptor.java:41) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.ResultsListAwareInterceptor.intercept(ResultsListAwareInterceptor.java:49) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.BuildResultsSummaryAwareInteceptor.intercept(BuildResultsSummaryAwareInteceptor.java:66) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.ChainAwareInterceptor.intercept(ChainAwareInterceptor.java:93) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.BuildAwareInterceptor.intercept(BuildAwareInterceptor.java:46) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.PlanAwareInterceptor.intercept(PlanAwareInterceptor.java:53) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:186) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116) com.opensymphony.webwork.components.ActionComponent.executeAction(ActionComponent.java:229) com.opensymphony.webwork.components.ActionComponent.end(ActionComponent.java:127) com.opensymphony.webwork.views.freemarker.tags.CallbackWriter.afterBody(CallbackWriter.java:65) freemarker.core.Environment.visit(Environment.java:301) freemarker.core.UnifiedCall.accept(UnifiedCall.java:130) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.MixedContent.accept(MixedContent.java:92) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.Environment.process(Environment.java:190) freemarker.template.Template.process(Template.java:237) com.opensymphony.webwork.views.freemarker.FreemarkerResult.doExecute(FreemarkerResult.java:214) com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WebWorkResultSupport.java:143) com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:313) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:208) com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:175) com.atlassian.bamboo.ww2.interceptors.BambooWorkflowInterceptor.doIntercept(BambooWorkflowInterceptor.java:33) com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:116) com.atlassian.bamboo.ww2.interceptors.BambooValidationInterceptor.doIntercept(BambooValidationInterceptor.java:33) com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.JSONValidationInterceptor.intercept(JSONValidationInterceptor.java:78) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:174) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:151) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptor.intercept(WebworkSecurityInterceptor.java:55) com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptorProxy.intercept(WebworkSecurityInterceptorProxy.java:30) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.PaginationAwareInterceptor.intercept(PaginationAwareInterceptor.java:84) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.StatisticsAwareInterceptor.intercept(StatisticsAwareInterceptor.java:41) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.ResultsListAwareInterceptor.intercept(ResultsListAwareInterceptor.java:49) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.BuildResultsSummaryAwareInteceptor.intercept(BuildResultsSummaryAwareInteceptor.java:66) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.ChainAwareInterceptor.intercept(ChainAwareInterceptor.java:93) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.BuildAwareInterceptor.intercept(BuildAwareInterceptor.java:46) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.PlanAwareInterceptor.intercept(PlanAwareInterceptor.java:53) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:186) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116) com.opensymphony.webwork.components.ActionComponent.executeAction(ActionComponent.java:229) com.opensymphony.webwork.components.ActionComponent.end(ActionComponent.java:127) com.opensymphony.webwork.views.freemarker.tags.CallbackWriter.afterBody(CallbackWriter.java:65) freemarker.core.Environment.visit(Environment.java:301) freemarker.core.UnifiedCall.accept(UnifiedCall.java:130) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.IfBlock.accept(IfBlock.java:82) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.MixedContent.accept(MixedContent.java:92) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.IfBlock.accept(IfBlock.java:82) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.IfBlock.accept(IfBlock.java:82) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.MixedContent.accept(MixedContent.java:92) freemarker.core.Environment.visit(Environment.java:210) freemarker.core.Environment.process(Environment.java:190) freemarker.template.Template.process(Template.java:237) com.opensymphony.webwork.views.freemarker.FreemarkerResult.doExecute(FreemarkerResult.java:214) com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WebWorkResultSupport.java:143) com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:313) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:208) com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:175) com.atlassian.bamboo.ww2.interceptors.BambooWorkflowInterceptor.doIntercept(BambooWorkflowInterceptor.java:33) com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:116) com.atlassian.bamboo.ww2.interceptors.BambooValidationInterceptor.doIntercept(BambooValidationInterceptor.java:33) com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.atlassian.bamboo.ww2.interceptors.JSONValidationInterceptor.intercept(JSONValidationInterceptor.java:78) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:174) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) com.opensymphony.xwork.DefaultActionI...",3 +BAM-6018,"Implicit 'Build Requirements' from 'Builders' are not removed when changing 'Builders', causes builds to not execute","When creating/copying a plan, there are implicit build requirements derived from the selected builder. These requirements can not be managed by the user, but are added and deleted on their behalf by Bamboo when selecting a builder. In 2.6 build 1901 - 27 May 10, when one changed the builder for a plan; the old builder requirement is not removed from the plan: !Build Requirements.png! This causes the build to no be able to schedule on desired agents, leaving it in the build queue. Once saved, the requirements can not be removed; cloning the build plan doesn't work around this issue. This will only affect plans that change builders.",2 +BAM-6038,"Label of test cases are incorrect",NULL,2 +BAM-6087,"Fail producer job if required chain artifacts do not get produced"," https://extranet.atlassian.com/display/BAMBOO/Copy+in+place+artifact+subscriptions",2 +BAM-6119,"""Block build if parent plans have unbuilt changes"" doesn't block when parent builds are queued","I have multiple component builds set up in bamboo, with the actual dependencies indicated in the build dependencies for those builds. Set with a blocking strategy of ""Block build if parent plans have unbuilt changes"" - but I don't think this affects the issue. Because of the graph of dependencies, and the current methodology of triggering builds in bamboo, the components at the end of the dependency tree can get build multiple times for the same root reason/submission. Consider the builds: || Build || Parent Plans || | parent | | | child-A | parent | | grandchild-B | parent \\ child-A | If a change is submitted to parent source, then on a successful build, both child-A and grandchild-B builds are queued. Once child-A successfully builds, grandchild-B is queued. Grandchild-b gets built twice (with non-deterministic results on the first build since it uses the current parent results and the previous child-A results).",2 +BAM-6122,"phpunit --log-xml option deprecated in phpunit 3.4.3+","When configuring the PhpUnit Builder, under the option: ""Log test execution to XML file Relative path to file where PHPUnit will store log test execution in XML format (option --log-xml)."" fails in PhpUnit 3.4.3+ since --log-xml is now deprecated option in PhpUnit. Message: The --log-xml option is deprecated, please use --log-junit instead Therefore the only way to successfully build with PhpUnit 3.4.3+ is to have ""Log test execution to XML file"" disabled.",2 +BAM-6133,"custom.svn.lastchange.revision.number is omitted in build result metadata when reprository advanced option 'quiet period' is enabled","reproduce: enable quiet period in plan (advanced repository options) trigger build via commit or manual.",1 +BAM-6140,"PHPUnit builder fails by default on Windows","I installed Babmoo 2.6.1. It found PHPUnit and added PHPUnit builder correctly without any user action. However when I created and started a plan using the PHPUnit builder it fails with following error: {code} Failed to execute build: Cannot run program ""C:\Program Files (x86)\PHP\phpunit"" (in directory ""C:\Users\Jacek Jaroczynski\bamboo-home\xml-data\build-dir\TEST-TEST""): CreateProcess error=193, %1 is not a valid Win32 application {code} The solution was to explicitly configure PHPUnit builder to point at *phpunit.bat* instead of *phpunit*",1 +BAM-6144,"Amazon EC2 commands do not timeout"," {noformat} QuartzScheduler_Worker-2 [RUNNABLE, IN_NATIVE] CPU time: 0:12 java.net.SocketInputStream.read(byte[], int, int) com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputStream, byte[], int, int) com.sun.net.ssl.internal.ssl.InputRecord.readV3Record(InputStream, OutputStream) com.sun.net.ssl.internal.ssl.InputRecord.read(InputStream, OutputStream) com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(InputRecord, boolean) com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(InputRecord) com.sun.net.ssl.internal.ssl.AppInputStream.read(byte[], int, int) org.apache.commons.httpclient.HttpClient.executeMethod(HttpMethod) com.xerox.amazonws.common.AWSQueryConnection.makeRequest(HttpMethodBase, String, Map, Class) com.xerox.amazonws.ec2.Jec2.makeRequestInt(HttpMethodBase, String, Map, Class) com.xerox.amazonws.ec2.Jec2.describeSecurityGroups(List) com.atlassian.aws.AWSAccountImpl.getEC2SecurityGroups() com.atlassian.bamboo.agent.elastic.server.ElasticFunctionalityFacadeImpl.ensureSecurityGroupExists(AWSAccount) com.atlassian.bamboo.agent.elastic.server.ElasticFunctionalityFacadeImpl.startupAgents(Collection) com.atlassian.bamboo.agent.elastic.schedule.ElasticInstancesMonitorJob.execute(JobExecutionContext) org.quartz.core.JobRunShell.run() com.atlassian.bamboo.quartz.SystemAuthorizedThreadPool$1.run() org.quartz.simpl.SimpleThreadPool$WorkerThread.run() {noformat} this can lead to some fairly serious thread starvation issues like http://skitch.com/markchai/dknaw/bootstrap-yourkit-java-profiler-8.0.24",3 +BAM-6215,"Maven Import doesn't work if the Maven builder isn't labelled 'Maven 2'","Bamboo doesn't seem to pick up the Maven builder if its using a non-default label, it complains about {{Bamboo is currently not configured to build Maven 2 projects. Proceed to builder configuration before importing Maven plan. }} ",2 +BAM-6216,"Cannot import Maven POM from repositories requiring authentication","When I try to import a Maven POM from my CVS repository I get the error ""Cannot connect to CVS root: Wrong Password."" (see attachment) However the password specified is exactly the same than the one I specify in another plan to retrieve files from my CVS, and in this case it can connect succesfully to the CVS server. Furthermore the error generates the following stacktrace in bamboo.log : INFO | jvm 1 | 2010/07/09 15:13:11 | 2010-07-09 15:13:11,079 INFO [1619340@qtp-6161922-7] [AccessLogFilter] system http://vbsbuiltin.ivb.victor-buck.com:8085/admin/importMavenPlanExecutePomCheckout.action 136127kb INFO | jvm 1 | 2010/07/09 15:13:11 | 2010-07-09 15:13:11,094 INFO [1619340@qtp-6161922-7] [PlanAwareInterceptor] /admin/importMavenPlanExecutePomCheckout.action INFO | jvm 1 | 2010/07/09 15:13:11 | 2010-07-09 15:13:11,735 ERROR [1619340@qtp-6161922-7] [runtime] Expression repository.p4Executable is undefined on line 4, column 26 in templates/plugins/repository/p4RepositoryMavenPomCheckoutAccessEdit.ftl. INFO | jvm 1 | 2010/07/09 15:13:11 | INFO | jvm 1 | 2010/07/09 15:13:11 | Expression repository.p4Executable is undefined on line 4, column 26 in templates/plugins/repository/p4RepositoryMavenPomCheckoutAccessEdit.ftl. INFO | jvm 1 | 2010/07/09 15:13:11 | The problematic instruction: INFO | jvm 1 | 2010/07/09 15:13:11 | ---------- INFO | jvm 1 | 2010/07/09 15:13:11 | ==> ${repository.p4Executable} [on line 4, column 24 in templates/plugins/repository/p4RepositoryMavenPomCheckoutAccessEdit.ftl] INFO | jvm 1 | 2010/07/09 15:13:11 | in user-directive ww.param [on line 4, column 13 in templates/plugins/repository/p4RepositoryMavenPomCheckoutAccessEdit.ftl] INFO | jvm 1 | 2010/07/09 15:13:11 | in user-directive ww.text [on line 3, column 9 in templates/plugins/repository/p4RepositoryMavenPomCheckoutAccessEdit.ftl] INFO | jvm 1 | 2010/07/09 15:13:11 | ---------- INFO | jvm 1 | 2010/07/09 15:13:11 | INFO | jvm 1 | 2010/07/09 15:13:11 | Java backtrace for programmers: INFO | jvm 1 | 2010/07/09 15:13:11 | ---------- INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.InvalidReferenceException: Expression repository.p4Executable is undefined on line 4, column 26 in templates/plugins/repository/p4RepositoryMavenPomCheckoutAccessEdit.ftl. INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Expression.getStringValue(Expression.java:118) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Expression.getStringValue(Expression.java:93) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.DollarVariable.accept(DollarVariable.java:76) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:299) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.UnifiedCall.accept(UnifiedCall.java:130) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.MixedContent.accept(MixedContent.java:92) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:299) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.UnifiedCall.accept(UnifiedCall.java:130) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.MixedContent.accept(MixedContent.java:92) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.IfBlock.accept(IfBlock.java:82) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.MixedContent.accept(MixedContent.java:92) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.process(Environment.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.template.Template.process(Template.java:237) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.ww2.BambooFreemarkerManager.renderPage(BambooFreemarkerManager.java:310) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.ww2.BambooFreemarkerManager.renderPage(BambooFreemarkerManager.java:250) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.ww2.BambooFreemarkerManager.render(BambooFreemarkerManager.java:319) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.repository.MavenPomAccessorAbstract.getMavenPomCheckoutAccessEditHtml(MavenPomAccessorAbstract.java:36) INFO | jvm 1 | 2010/07/09 15:13:11 | sun.reflect.GeneratedMethodAccessor612.invoke(Unknown Source) INFO | jvm 1 | 2010/07/09 15:13:11 | sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) INFO | jvm 1 | 2010/07/09 15:13:11 | java.lang.reflect.Method.invoke(Unknown Source) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:841) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:106) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.MethodCall._getAsTemplateModel(MethodCall.java:93) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Expression.getAsTemplateModel(Expression.java:89) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.DefaultToExpression._getAsTemplateModel(DefaultToExpression.java:100) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Expression.getAsTemplateModel(Expression.java:89) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Expression.getStringValue(Expression.java:93) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.DollarVariable.accept(DollarVariable.java:76) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.MixedContent.accept(MixedContent.java:92) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:395) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.BodyInstruction.accept(BodyInstruction.java:93) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.MixedContent.accept(MixedContent.java:92) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Macro$Context.runMacro(Macro.java:172) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:603) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.UnifiedCall.accept(UnifiedCall.java:106) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:167) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:417) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.IteratorBlock.accept(IteratorBlock.java:102) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.MixedContent.accept(MixedContent.java:92) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:299) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.UnifiedCall.accept(UnifiedCall.java:130) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.MixedContent.accept(MixedContent.java:92) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.IfBlock.accept(IfBlock.java:82) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.MixedContent.accept(MixedContent.java:92) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.visit(Environment.java:210) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.core.Environment.process(Environment.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | freemarker.template.Template.process(Template.java:237) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.webwork.views.freemarker.FreemarkerResult.doExecute(FreemarkerResult.java:214) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WebWorkResultSupport.java:143) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:313) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:208) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:116) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.ww2.interceptors.BambooValidationInterceptor.doIntercept(BambooValidationInterceptor.java:33) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.ww2.interceptors.JSONValidationInterceptor.intercept(JSONValidationInterceptor.java:78) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:174) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:151) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.ww2.interceptors.GlobalAdminInterceptor.intercept(GlobalAdminInterceptor.java:21) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptor.intercept(WebworkSecurityInterceptor.java:55) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptorProxy.intercept(WebworkSecurityInterceptorProxy.java:30) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.ww2.interceptors.PaginationAwareInterceptor.intercept(PaginationAwareInterceptor.java:84) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.ww2.interceptors.StatisticsAwareInterceptor.intercept(StatisticsAwareInterceptor.java:41) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.ww2.interceptors.ResultsListAwareInterceptor.intercept(ResultsListAwareInterceptor.java:49) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.ww2.interceptors.BuildResultsSummaryAwareInteceptor.intercept(BuildResultsSummaryAwareInteceptor.java:66) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.ww2.interceptors.ChainAwareInterceptor.intercept(ChainAwareInterceptor.java:93) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.ww2.interceptors.BuildAwareInterceptor.intercept(BuildAwareInterceptor.java:46) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.ww2.interceptors.PlanAwareInterceptor.intercept(PlanAwareInterceptor.java:53) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:186) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.ww2.interceptors.BuildConfigurationInterceptor.intercept(BuildConfigurationInterceptor.java:54) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:274) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:202) INFO | jvm 1 | 2010/07/09 15:13:11 | org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) INFO | jvm 1 | 2010/07/09 15:13:11 | org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) INFO | jvm 1 | 2010/07/09 15:13:11 | org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) INFO | jvm 1 | 2010/07/09 15:13:11 | com.opensymphony.webwork.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:88) INFO | jvm 1 | 2010/07/09 15:13:11 | org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) INFO | jvm 1 | 2010/07/09 15:13:11 | org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) INFO | jvm 1 | 2010/07/09 15:13:11 | com.atlassian.bamboo.filter.AccessLogFilter.doFilter(AccessLogFilter.java:66) INFO | jvm 1 | 2010/07/09 15:13:11 | org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) INFO | jvm 1 | 2010/07/09 15:13:11 | ...",1 +BAM-6226,"Activity Stream atom feed throws NPE","{noformat} 2010-07-12 11:58:12,434 ERROR [http-8085-22] [BambooFreemarkerManager] Error resolving template java.lang.NullPointerException org.apache.catalina.connector.Request.setAttribute(Request.java:1424) org.apache.catalina.connector.RequestFacade.setAttribute(RequestFacade.java:503) org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:279) javax.servlet.ServletRequestWrapper.setAttribute(ServletRequestWrapper.java:284) com.opensymphony.webwork.views.freemarker.FreemarkerManager.buildScopesHashModel(FreemarkerManager.java:192) com.opensymphony.webwork.views.freemarker.FreemarkerManager.buildTemplateModel(FreemarkerManager.java:324) com.atlassian.bamboo.ww2.BambooFreemarkerManager.renderPage(BambooFreemarkerManager.java:324) com.atlassian.bamboo.ww2.BambooFreemarkerManager.renderPage(BambooFreemarkerManager.java:274) com.atlassian.bamboo.ww2.BambooFreemarkerManager.render(BambooFreemarkerManager.java:340) com.atlassian.bamboo.v2.build.trigger.DefaultTriggerReasonRenderer.getShortDescriptionHtml(DefaultTriggerReasonRenderer.java:40) com.atlassian.bamboo.resultsummary.AbstractResultsSummary.getReasonSummary(AbstractResultsSummary.java:175) com.atlassian.streams.bamboo.BuildToSyndTransformer.buildDescriptionHtml(BuildToSyndTransformer.java:127) com.atlassian.streams.bamboo.BuildToSyndTransformer.apply(BuildToSyndTransformer.java:67) com.atlassian.streams.bamboo.BuildToSyndTransformer.apply(BuildToSyndTransformer.java:24) com.google.common.collect.Lists$TransformingRandomAccessList.get(Lists.java:431) com.sun.syndication.feed.synd.impl.ConverterForAtom10.createAtomEntries(ConverterForAtom10.java:416) com.sun.syndication.feed.synd.impl.ConverterForAtom10.createRealFeed(ConverterForAtom10.java:397) com.sun.syndication.feed.synd.SyndFeedImpl.createWireFeed(SyndFeedImpl.java:207) com.sun.syndication.feed.synd.SyndFeedImpl.createWireFeed(SyndFeedImpl.java:189) com.sun.syndication.io.SyndFeedOutput.outputString(SyndFeedOutput.java:61) com.atlassian.streams.servlet.StreamsActivityServlet.doGet(StreamsActivityServlet.java:167) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) com.atlassian.plugin.servlet.DelegatingPluginServlet.service(DelegatingPluginServlet.java:42) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) com.atlassian.plugin.servlet.ServletModuleContainerServlet.service(ServletModuleContainerServlet.java:52) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.bamboo.filter.AccessLogFilter.doFilter(AccessLogFilter.java:66) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265) org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) com.atlassian.bamboo.filter.SeraphLoginFilter.doFilter(SeraphLoginFilter.java:66) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) com.atlassian.bamboo.filter.BambooAcegiProxyFilter.doFilter(BambooAcegiProxyFilter.java:25) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.bamboo.filter.LicenseFilter.doFilter(LicenseFilter.java:73) com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.johnson.filters.AbstractJohnsonFilter.doFilter(AbstractJohnsonFilter.java:72) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:219) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.seraph.filter.BaseLoginFilter.doFilter(BaseLoginFilter.java:140) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) com.atlassian.oauth.serviceprovider.internal.servlet.OAuthFilter.doFilter(OAuthFilter.java:69) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:170) com.atlassian.bamboo.persistence.BambooSessionInViewFilter.doFilterInternal(BambooSessionInViewFilter.java:31) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) java.lang.Thread.run(Thread.java:637) 2010-07-12 11:58:12,439 INFO [BAM::Events:pool-1-thread-35] [DependencyBuildListener] Finished checking children plans of 'Bamboo Plugins - Pre and Post Build Command Plugin' for build BPLUG-BPBC-247 2010-07-12 11:58:12,468 ERROR [http-8085-22] [BambooFreemarkerManager] Error resolving template java.lang.NullPointerException org.apache.catalina.connector.Request.setAttribute(Request.java:1424) org.apache.catalina.connector.RequestFacade.setAttribute(RequestFacade.java:503) org.apache.catalina.core.ApplicationHttpRequest.setAttribute(ApplicationHttpRequest.java:279) javax.servlet.ServletRequestWrapper.setAttribute(ServletRequestWrapper.java:284) com.opensymphony.webwork.views.freemarker.FreemarkerManager.buildScopesHashModel(FreemarkerManager.java:202) com.opensymphony.webwork.views.freemarker.FreemarkerManager.buildTemplateModel(FreemarkerManager.java:324) com.atlassian.bamboo.ww2.BambooFreemarkerManager.renderPage(BambooFreemarkerManager.java:324) com.atlassian.bamboo.ww2.BambooFreemarkerManager.renderPage(BambooFreemarkerManager.java:274) com.atlassian.bamboo.ww2.BambooFreemarkerManager.render(BambooFreemarkerManager.java:340) com.atlassian.bamboo.v2.build.trigger.DefaultTriggerReasonRenderer.getShortDescriptionHtml(DefaultTriggerReasonRenderer.java:40) com.atlassian.bamboo.resultsummary.AbstractResultsSummary.getReasonSummary(AbstractResultsSummary.java:175) com.atlassian.streams.bamboo.BuildToSyndTransformer.buildDescriptionHtml(BuildToSyndTransformer.java:127) com.atlassian.streams.bamboo.BuildToSyndTransformer.apply(BuildToSyndTransformer.java:67) com.atlassian.streams.bamboo.BuildToSyndTransformer.apply(BuildToSyndTransformer.java:24) com.google.common.collect.Lists$TransformingRandomAccessList.get(Lists.java:431) com.sun.syndication.feed.synd.impl.ConverterForAtom10.createAtomEntries(ConverterForAtom10.java:416) com.sun.syndication.feed.synd.impl.ConverterForAtom10.createRealFeed(ConverterForAtom10.java:397) com.sun.syndication.feed.synd.SyndFeedImpl.createWireFeed(SyndFeedImpl.java:207) com.sun.syndication.feed.synd.SyndFeedImpl.createWireFeed(SyndFeedImpl.java:189) com.sun.syndication.io.SyndFeedOutput.outputString(SyndFeedOutput.java:61) com.atlassian.streams.servlet.StreamsActivityServlet.doGet(StreamsActivityServlet.java:167) javax.servlet.http.HttpServlet.service(HttpServlet.java:617) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) com.atlassian.plugin.servlet.DelegatingPluginServlet.service(DelegatingPluginServlet.java:42) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) com.atlassian.plugin.servlet.ServletModuleContainerServlet.service(ServletModuleContainerServlet.java:52) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.bamboo.filter.AccessLogFilter.doFilter(AccessLogFilter.java:66) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265) org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) com.atlassian.bamboo.filter.SeraphLoginFilter.doFilter(SeraphLoginFilter.java:66) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) com.atlassian.bamboo.filter.BambooAcegiProxyFilter.doFilter(BambooAcegiProxyFilter.java:25) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.bamboo.filter.LicenseFilter.doFilter(LicenseFilter.java:73) com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.johnson.filters.AbstractJohnsonFilter.doFilter(AbstractJohnsonFilter.java:72) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:219) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.seraph.filter.BaseLoginFilter.doFilter(BaseLoginFilter.java:140) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) com.atlassian.oauth.serviceprovider.internal.servlet.OAuthFilter.doFilter(OAuthFilter.java:69) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:170) com.atlassian.bamboo.persistence.BambooSessionInViewFilter.doFilterInternal(BambooSessionInViewFilter.java:31) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) java.lang.Thread.run(Thread.java:637) {noformat}",3 +BAM-6247,"Scheduled backups are written to Bamboo Installation directory","Bamboo writes scheduled backups to the Bamboo-Install directory (or the location it was started from) instead of /export directory.",1 +BAM-6251,"Allow admins to shutdown instances that are not connected to bamboo","There were some reports that bamboo leaves 'orphaned' elastic instances and detached ebs volumes. Add functionality to allow admins to view/shutdown instances that are not currently connected to bamboo.",2 +BAM-6259,"User can set up chain completed notification",NULL,3 +BAM-6260,"User can set up chain failed + 1st success notification",NULL,2 +BAM-6261,"Ensure notifications aren't run / throw exceptions for SubPlan",NULL,2 +BAM-6262,"Drag and drop for moving SubPlan between stages",NULL,2 +BAM-6293,"Live Job Result Summary REST does not lookup Buildable","This causes the page to be devoid of useful content.",2 +BAM-6313,"Test for SASL support with bundled svnkit","The version of svnkit we bundle with bamboo doesn't have SASL support: {noformat}[amyers@erdinger:svnkit]$ jar tf svnkit-1.3.0.5847.jar | grep Sasl [amyers@erdinger:svnkit]$ {noformat} If I download it from the website it does (this is a newer version, but apparently older ones have it too): {noformat} [amyers@erdinger:svnkit-1.3.2.6267]$ jar tf svnkit.jar | grep Sasl org/tmatesoft/svn/core/internal/io/svn/sasl/SVNSaslAuthenticator$SVNCallbackHandler.class org/tmatesoft/svn/core/internal/io/svn/sasl/SVNSaslAuthenticator.class org/tmatesoft/svn/core/internal/io/svn/sasl/SaslInputStream.class org/tmatesoft/svn/core/internal/io/svn/sasl/SaslOutputStream.class [amyers@erdinger:svnkit-1.3.2.6267]$ {noformat} Is there any technical reason we don't bundle the support for SASL authentication? ",2 +BAM-6358,"Ability to Stop a Job",NULL,2 +BAM-6497,"User can clone another chain's job configuration",NULL,3 +BAM-6498,"Hide configuration tabs of Job",NULL,1 +BAM-6500,"Chain configuration should use static tabs",NULL,3 +BAM-6501,"Ensure dependencies work for chains","Functional tests, validation, description, chains & plans in the same list.",3 +BAM-6503,"New failure periods tab for Chains",NULL,2 +BAM-6505,"Update bread crumbs to be the title",NULL,2 +BAM-6506,"Ensure basic charts work for chains",NULL,3 +BAM-6529,"System Variables does not work in Source repository","When we try to use System envirenment variables in the Repository URL we get an error : This is not a valid Subversion Repository. We think the system property is not replaced",2 +BAM-6551,"Servlet api 2.5 broken","NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String when installing the JavaMelody plugin. This issue is based on the initial issue submitted at http://code.google.com/p/javamelody/issues/detail?id=37 Steps to reproduce: 1. Download the JavaMelody plugin from https://plugins.atlassian.com/plugin/details/20909 2. Copy the jar into the webapp/WEB-INF/lib folder 3. Start Bamboo (2.6.1) 4. Tail the bamboo log file The Bamboo logs show this stack trace when JavaMelody is installed in Bamboo 2.6.1: 2010-07-16 14:40:46,712 ERROR [796347291@qtp-745957924-0] [DefaultServletModuleManager] Unable to create filter com.atlassian.plugin.servlet.util.LazyLoadedReference$InitializationException: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String; at com.atlassian.plugin.servlet.util.LazyLoadedReference.get(LazyLoadedReference.java:94) at com.atlassian.plugin.servlet.DefaultServletModuleManager.getFilter(DefaultServletModuleManager.java:321) at com.atlassian.plugin.servlet.DefaultServletModuleManager.getFilters(DefaultServletModuleManager.java:188) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:53) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:378) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:535) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:865) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520) Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String; at net.bull.javamelody.Parameters.getContextPath(Parameters.java:328) at net.bull.javamelody.MonitoringFilter.init(MonitoringFilter.java:94) at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.init(DelegatingPluginFilter.java:43) at com.atlassian.plugin.servlet.DefaultServletModuleManager$LazyLoadedFilterReference.create(DefaultServletModuleManager.java:371) at com.atlassian.plugin.servlet.DefaultServletModuleManager$LazyLoadedFilterReference.create(DefaultServletModuleManager.java:356) at com.atlassian.plugin.servlet.util.LazyLoadedReference$1.call(LazyLoadedReference.java:62) at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at com.atlassian.plugin.servlet.util.LazyLoadedReference.get(LazyLoadedReference.java:74) My analysis: This ServletContext.getContextPath() method is called by the javamelody plugin only if the servlet api version is 2.5 or more. So the fact that the method is called in Bamboo v2.6.1 Build 1902 / jetty v6.1.15 implies that ServletContext.getMajorVersion() has returned 2 and that ServletContext.getMinorVersion() has returned 5. But the method call in the plugin throws ""java.lang.NoSuchMethodError: javax.servlet.ServletContext.getContextPath()Ljava/lang/String;"", even if this method is supposed to exists in the servlet api 2.5. This issue implies that in this setup (in a plugin with bamboo 2.6.1 Build 1902 and jetty v6.1.15), the servlet api 2.5 was broken somehow: the method must exists. This is probably related to the fact that there are both servlet-api-2.4.jar and servlet-api-2.5.jar in ""Bamboo/webapp/WEB-INF/lib/"". Workaround: The following workaround was tested with success: 1. stop the bamboo server 2. backup and delete the file ""Bamboo/webapp/WEB-INF/lib/servlet-api-2.4.jar"" from your bamboo setup (but keep the servlet-api-2.5.jar) 3. restart the bamboo server 4. install the javamelody plugin Thanks anyway for a great plugin architecture. PS: The JavaMelody plugin goal is to monitor JIRA, Confluence and Bamboo servers. ",1 +BAM-6714,"Allow ""Import With Maven"" for ""Restricted Administrators""","We differentiate between System Administrators and Administrators in Studio. System Administrators are Atlassian and Contegix, Administrators may be customers. I was told that these groups roughly map to the notion of Administrators (Studio: System Administrators) and Restricted Administrators (Studio: Administrators) in Bamboo. The customer is allowed to perform certain administration tasks in Studio's Bamboo, amongst them f.e. to configure the build expiry (BuildExpiryAction). These actions define no interceptor ref and thus use the defaultStack (default-interceptor-ref, xwork.xml). The defaultStack contains as far as I can see only one interceptor for authorisation, that is the permissionCheck (com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptorProxy) interceptor which delegates to an extension of Acegi's org.acegisecurity.intercept.AbstractSecurityInterceptor, com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptor. The AbstractSecurityInterceptor is configured to check, amongst other things, if principals trying to access com.atlassian.bamboo.ww2.aware.permissions.GlobalAdminSecurityAware instances possess one of these authorities: WW_ADMIN,WW_RESTRICTED_ADMIN,GLOBAL_READ (applicationContextAcegiSecurity.xml). The administrative actions currently configured in Studio to be accessible by Restricted Administrators (Studio: Administrators) implement this interface and thus they are allowed to access the action. My current task is to allow customers to create build plans from POMs (https://studio.atlassian.com/browse/JST-2328). This action, importMavenPlan (com.atlassian.bamboo.ww2.actions.admin.ImportMavenPlanCheckoutPomAction) uses a different interceptor stack, buildConfig and globalAdminStackAlwaysValidate. Regarding permissions, as far as I can see, the WebworkSecurityInterceptor is still used due to globalAdminStackAlwaysValidate → basicAdminStackPreValidate → permissionCheck, but the principal is only checked against these authorities: WW_READ,GLOBAL_READ due to the instance being ""only"" a com.atlassian.bamboo.ww2.aware.permissions.GlobalReadSecurityAware (BambooActionSupport, see screenshot). The Restricted Administrators pass this test. However, a second permission check is applied in this configuration, the globalAdminStackAlwaysValidate → basicAdminStackPreValidate → globalAdmin (com.atlassian.bamboo.ww2.interceptors.GlobalAdminInterceptor). This interceptor uses the com.atlassian.bamboo.security.acegi.acls.HibernateMutableAclServiceImpl in order to check if the principal has the ADMINISTRATION permission, which he has not (RESTRICTEDADMINISTRATION instead). My request is to change the configuration for the importMavenPlan action in order to allow it to be used by Restricted Administrators. One way would be to use the default stack and implement GlobalAdminSecurityAware. I haven't checked what other implications that would have regarding the interceptor configuration. Thx for the help.",1 +BAM-6747,"Cannot create entry in AUTHORS table when running build from Mercurial repository","Don't forget to clean AUTHORS table to reproduce it. Sample log {noformat} 2010-09-04 13:14:49,553 ERROR [BAM::Default Agent::Agent:pool-4-thread-1] [BuildAgentControllerImpl] Unknown exception occurred on 'Default Agent'. Agent will attempt to recover its normal operation... java.lang.RuntimeException: java.lang.Exception: Could not save the build results BuildResults: RAN88534083-MAIN88534083-DEFAULT-1. Data could be in an inconsistent state. com.atlassian.bamboo.v2.build.agent.LocalBuildResultProcessor.processBuildResult(LocalBuildResultProcessor.java:146) com.atlassian.bamboo.v2.build.agent.BuildAgentControllerImpl.waitAndPerformBuild(BuildAgentControllerImpl.java:115) com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent$1.run(DefaultBuildAgent.java:102) com.atlassian.bamboo.build.pipeline.concurrent.NamedThreadFactory$2.run(NamedThreadFactory.java:47) java.lang.Thread.run(Thread.java:595) Caused by: java.lang.Exception: Could not save the build results BuildResults: RAN88534083-MAIN88534083-DEFAULT-1. Data could be in an inconsistent state. com.atlassian.bamboo.v2.build.agent.BuildResultsSummaryPersisterImpl.saveBuild(BuildResultsSummaryPersisterImpl.java:112) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:592) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy39.saveBuild(Unknown Source) com.atlassian.bamboo.v2.build.agent.LocalBuildResultProcessor.processBuildResult(LocalBuildResultProcessor.java:141) ... 4 more Caused by: java.lang.RuntimeException: AuthorCreatorService must not be called within an existing transaction. com.atlassian.bamboo.utils.BambooValidate.notInsideTransaction(BambooValidate.java:39) com.atlassian.bamboo.author.AuthorCreatorServiceImpl.createAuthorIfMissing(AuthorCreatorServiceImpl.java:31) com.atlassian.bamboo.author.AuthorCreatorServiceImpl.createMissingAuthors(AuthorCreatorServiceImpl.java:62) com.atlassian.bamboo.v2.build.agent.BuildResultsSummaryPersisterImpl.saveBuild(BuildResultsSummaryPersisterImpl.java:76) ... 16 more {noformat}",2 +BAM-6749,"Comment Tooltip does not show text of the comment anymore On JBAC","When you put you mouse over the comment icon you used to be able to view the content of the comment withour having to click on it to be take to the comments tab of that build. Now, this gets shortened so that you are only able to see the commenter and the comment's date. See screenshot. I am marking this bug as critical, because it's extremely annoying to browse build comments by clicking on them, as you have to wait for a page load and be taken out of the plan view, which you then will have to reload again once you finish reading the comment.",1 +BAM-6755,"IMPORT/EXPORT of login failure info is broken","This error occurs when importing a tardigrade export. export_tardigradeserver_2014_20100824.zip Caused by: org.springframework.orm.hibernate.HibernateSystemException: not-null property references a null or transient value: com.atlassian.bamboo.user.LoginInformationImpl.userName; nested exception is net.sf.hibernate.PropertyValueException: not-null property references a null or transient value: com.atlassian.bamboo.user.LoginInformationImpl.userName org.springframework.orm.hibernate.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:597) org.springframework.orm.hibernate.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:353) org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:375) org.springframework.orm.hibernate.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:601) com.atlassian.hibernate.HibernateObjectDao.saveRaw(HibernateObjectDao.java:148) com.atlassian.hibernate.HibernateObjectDao.save(HibernateObjectDao.java:118) com.atlassian.bamboo.user.LoginInformationHibernateDao.save(LoginInformationHibernateDao.java:49) com.atlassian.bamboo.user.LoginInformationManagerImpl.injectLoginInformation(LoginInformationManagerImpl.java:79) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy16.injectLoginInformation(Unknown Source) com.atlassian.bamboo.migration.stream.LoginInformationMapper.afterImportListItem(LoginInformationMapper.java:96) com.atlassian.bamboo.migration.stream.LoginInformationMapper.afterImportListItem(LoginInformationMapper.java:20) com.atlassian.bamboo.migration.BambooStAXListImportStrategy.importListItemXml(BambooStAXListImportStrategy.java:268) com.atlassian.bamboo.migration.BambooStAXListImportStrategy.access$100(BambooStAXListImportStrategy.java:16) com.atlassian.bamboo.migration.BambooStAXListImportStrategy$1.importListItems(BambooStAXListImportStrategy.java:36) com.atlassian.bamboo.migration.BambooStAXListImportStrategy.importListXml(BambooStAXListImportStrategy.java:234)",1 +BAM-6757,"HG Changeset detection is totally wrong","The build https://bamboo-extranet.atlassian.com/browse/CRUCHG-BR22-3 triggered at the right time, but since https://bamboo-extranet.atlassian.com/browse/CRUCHG-BR22-2, there is only 1 change, but https://bamboo-extranet.atlassian.com/browse/CRUCHG-BR22-3/commit lists loads of changes, none of which were even on the 2.2 branch. The real diffs: {code} $ hg log -b 2.2 -r a780b00521e8e6464de1c3509f330b4c7d2ffedc:2a4ec7c3fc9db7a907bdf42601ab431615aeca48 changeset: 17456:a780b00521e8 branch: 2.2 parent: 17427:545beab760a6 user: Seb Ruiz date: Wed Jul 07 04:31:37 2010 +0000 files: src/java/com/cenqua/fisheye/web/Watch.java description: NONE: Fix NPE when comparing invalid watches changeset: 17628:2a4ec7c3fc9d branch: 2.2 tag: tip parent: 17456:a780b00521e8 user: Matthew Watson date: Tue Sep 07 17:05:13 2010 +1000 files: src/tests/com/cenqua/fisheye/license/LicenseTestStrings.java description: NONE: Upgrade license Keys for Tests {code} Note, the first is the commit from build 2, the second is the commit that triggered build 3. Note the builds trigger correctly only when changes are made for their branch, but the list of changes is almost always rubbish.",2 +BAM-6765,"Inline Importer Causes Upgrade Tasks To Fail","When doing an import either via the setup wizard (or checking the checkbox to not restart bamboo from the admin section) the upgrades are run within the same thread as the action so therefore maintain the same session object (via the sessionInViewFilter thingy) for every upgrade task. This causes some nasty exceptions - the tasks assume they have a clean slate to work off. We need to make the upgrades run in a separate thread which does not have the overarching session available to it, and just make the action thread hang around waiting for the other thread to finish. I have attached an export which reproduces this problem. ",3 +BAM-6785,"Can not delete image configuration if used in instance scheduling "," 2010-09-09 14:36:15,156 INFO [1921423913@qtp-1196121930-3] [LocalAgentManagerImpl] Attempting to remove build agent... 2010-09-09 14:36:15,182 WARN [1921423913@qtp-1196121930-3] [JDBCExceptionReporter] SQL Error: 0, SQLState: null 2010-09-09 14:36:15,182 ERROR [1921423913@qtp-1196121930-3] [JDBCExceptionReporter] Batch entry 0 delete from ELASTIC_IMAGE where ELASTIC_IMAGE_ID=131075 was aborted. Call getNextException to see the cause. 2010-09-09 14:36:15,182 WARN [1921423913@qtp-1196121930-3] [JDBCExceptionReporter] SQL Error: 0, SQLState: 23503 2010-09-09 14:36:15,182 ERROR [1921423913@qtp-1196121930-3] [JDBCExceptionReporter] ERROR: update or delete on table ""elastic_image"" violates foreign key constraint ""fk1c6b30e1581fb731"" on table ""elastic_schedule"" Detail: Key (elastic_image_id)=(131075) is still referenced from table ""elastic_schedule"". 2010-09-09 14:36:15,184 WARN [1921423913@qtp-1196121930-3] [JDBCExceptionReporter] SQL Error: 0, SQLState: null 2010-09-09 14:36:15,184 ERROR [1921423913@qtp-1196121930-3] [JDBCExceptionReporter] Batch entry 0 delete from ELASTIC_IMAGE where ELASTIC_IMAGE_ID=131075 was aborted. Call getNextException to see the cause. 2010-09-09 14:36:15,184 WARN [1921423913@qtp-1196121930-3] [JDBCExceptionReporter] SQL Error: 0, SQLState: 23503 2010-09-09 14:36:15,184 ERROR [1921423913@qtp-1196121930-3] [JDBCExceptionReporter] ERROR: update or delete on table ""elastic_image"" violates foreign key constraint ""fk1c6b30e1581fb731"" on table ""elastic_schedule"" Detail: Key (elastic_image_id)=(131075) is still referenced from table ""elastic_schedule"". 2010-09-09 14:36:15,184 ERROR [1921423913@qtp-1196121930-3] [SessionImpl] Could not synchronize database state with session",2 +BAM-6823,"You can edit the project name on the job level","Not sure if it was intentional but it just feel strange",1 +BAM-6829,"""Move Plans"" should not show jobs","http://skitch.com/brydiemccoy/dsaqe/configure-new-plan-details-atlassian-bambooooo Currently it lists all subplans on this page which is kind of stupid. The reason I haven't just ""fixed it"" is the interfaces on the DefaultProject object are outdated and need review. I dont want to add to the mess.",1 +BAM-6832,"Upgrade aspectj to 1.6.9","http://mirrors.ibiblio.org/pub/mirrors/maven2/org/aspectj/aspectjrt/1.6.9/ Will solve https://bugs.eclipse.org/bugs/show_bug.cgi?id=269867. We'll need to update the groupId and add a block for the old groupId",2 +BAM-6855,"Make sure that hg errors are properly added to the plan log","Currently we just throw RepositoryExceptions. Some errors - esp 'authentication failure' - should be explicitly added to the log so the user sees it. Blocker - if it happens in change detection phase, the log is not visible at the moment - difficult to test.",1 +BAM-6872,"If AJS.conglomerate.cookie gets too big, web servers will report HTTP error 413","As an Administrator edits the plans, the *AJS.conglomerate.cookie* stores the UI history. However, Bamboo is not resetting the cookie value often enough to avoid it getting too big. This causes the web/app server to report HTTP error 413. ",2 +BAM-6901,"Bamboo upgrade process fails on Windows","I had Bamboo 2.6.1 installed on my Windows 7 machine. I tried to install 2.6.2 without manually uninstalling the previous version. The installer found previous version, uninstalled it and installed new one. When I tried to run the Bamboo it failed saying that duplicated plugins were found. Indeed in the WEB-INF/lib directory there were plenty of duplicated jars but in different versions.",2 +BAM-6909,"Wallboard Re-Design","The wallboard looks dated and not inline with our JIRA wallboards that we've presented at Atlassian Summit. ",1 +BAM-6912,"Changing the builder type during cloning adds multiple builder requirements","When cloning a plan: if you change the builder type from Ant to Maven then Bamboo adds Ant and Maven as a requirement to the plan. Ideally, Bamboo should detect that the builder has changed and set the requirement to Maven from ant in the next screen.",2 +BAM-6934,"Discrepancy in time estimations in a single-job chain between job and chain",NULL,2 +BAM-6957,"Job/Chain Name duplication throws exception","My Project Name: AAAA My Chain Name: AAAA In one instance I tried to update an existing job to have the name AAAA. I got a validation error. I should theoretically be able to name my plan like this shouldn't I? During an attempt to reproduce the above behaviour, I tried to create a _new_ Job with the name AAAA. This submitted successfully. However now I get a whole bunch of other exceptions: {code} 2010-09-30 10:17:41,755 ERROR [1638360365@qtp-1196121930-6] [FiveOhOh] 500 Exception was thrown. org.springframework.dao.IncorrectResultSizeDataAccessException: query did not return a unique result: 2 org.springframework.orm.hibernate.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:590) org.springframework.orm.hibernate.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:353) org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:375) org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:337) com.atlassian.bamboo.plan.PlanHibernateDao.getPlanByName(PlanHibernateDao.java:83) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) {code} The getPlanByName method only looks at the project name and plan name in the build table. And hence will return both the chain and the job. So we need to either a) prevent people from creating jobs with the same name as a plan (though this behaves the opposite to how we handle the keys) b) fix the getPlanByName method, and any other use cases which die because of the duplication.",2 +BAM-6969,"VariableSubstitutionBean cannot be used in V2 plugins","Any plugin that requires variable substitution via the VariableSubstitutionBean has to be a V1 plugin because the VSB is not exposed to V2 plugins. This was discovered during: https://studio.plugins.atlassian.com/browse/BPBC-41 Emails were exchanged regarding this as well: Mark Chai: ------------- The VSB is a prototype scoped bean so it can't be made available in OSGI. I'm not 100% sure if it _has_ to be a prototype (it does access the AdminConfigManager but doesn't seem to cache anything). If you have Bamboo building from source, you could try to switch the prototype flag off on the application context definition and plugin:available=""true"" and see if that works. Jonathan Doklovic (response): ----------------------------- I just updated the applicationContextCommon.xml inside of bamboo-agent-core within the container that amps uses. Removed the prototype scope and added plugins:available=""true"". This has no effect. When I run my plugin, the VSB still does not get injected into my action. :( http://www.sadtrombone.com/ ",3 +BAM-7010,"Allow import of Plans from Maven poms stored in Mercurial repositories","Currently Bamboo allows out of the box import of pom.xml from CVS/Perforce/Subversion. With Mercurial support in place, Mercurial should be added to the list of repositories available for plan import.",5 +BAM-7024,"Apparent deadlock in Axis","We had one of our builds hang, at a point where it was running a functional test against Bamboo. It looks like there might be a deadlock within Bamboo, but it's not totally obvious to me what's going on. I'm attaching the log with a thread dump at the end.",2 +BAM-7048,"Reports for tests don't have any data points","Issue reported in https://support.atlassian.com/browse/BSP-3259",8 +BAM-7058,"Hide file filter pattern options when configuraing job repository","These options are only used for change detection. So should not be configurable at the job level.",1 +BAM-7059,"Quiet Period and Max Retries Should be hidden for jobs","This only relates to change detection ",1 +BAM-7081,"Invalid Build log artifact URL in REST reponse","/rest/api/latest/build/?expand=artifacts.artifact returns an URL to build log, which does not exist (response is a chain)",1 +BAM-7200,"Add admin action that will blow away all Mercurial cache directories.","[https://atlaseye.atlassian.com/cru/CR-BAM-1971#c32842] currently if I change the repo URL, then the cache is effectively ""orphaned"" and can't be cleared through plan view. ",5 +BAM-7218,"Maven 3.0 or 3.x Builder","Hi all, It would be nice if I would have the possibility to add a Maven 3.x (or Maven 3.0) Builder. When I want to build with Maven 3 I have to choose Maven 2.x or Maven Builder. That's not nice ;( Regards, Florian",1 +BAM-7228,"Stop build on dashboard when multiple builds redirects to plan page","Stopping a single build from the dashboard happens async. You stay on the dashboard. If there are multiple builds running you get the dialog. After confirming deletion you get redirected to the plan page. You should return to the dashboard instead",1 +BAM-7231,"Errors not showing up on result summary page"," The job-result-error is showing on the job and chain summary page, but not on the chain result or job result page. Both results are ""Not Built""",1 +BAM-7236,"Bulk Actions wizard has sorting issues","In the second/third/fourth step of bulk action, the chains are grouped at the top, and jobs grouped at the bottom. The jobs should be grouped underneath their respective chain.",1 +BAM-7237,"Bulk Action change svn info should indicate if a job is inheriting its parents","You should still be able to bulk edit jobs to something new. But, in the preview list showing existing config, it should show either just (e.g.) ""Inheriting information from parent"" or still show the url but e.g. in brackets next to it show (inherited).",1 +BAM-7260,"Mercurial is instantly triggering another build right after the initial build.","Creating new plan (enabled) triggers initial build. Mercurial plugin will instantly trigger another build (if configured to poll repository for the changes) - because it thinks last revision was 'null'. How to reproduce: 1) just create a plan using valid Mercurial repository, enable it (during creation), set 'poll repository for changes' for example to 10s 2) wait till first build (initial) finishes 3a) instantly second build will be triggered (showing all the changesets from the repository root) 3b) where I expected the build won't be triggered until new commits will be pushed to that repository",1 +BAM-7275,"Cannot load x64 wrapper dll on Windows XP x64",NULL,1 +BAM-7291,"Web repository isn't validating when configuring Plan.","Giles Gaskell (at Bamboo DEV2 chatroom, 11/08/2010): {quote} Btw - just out of interest for the Docs - when configuring the 'Common repository configuration' options of an existing Plan or Job, I am able to select the option 'Mercurial Web Repository' in the 'Web Repository' field for Plan. However, this option is not available when configuring the equivalent field for a Job. Is there a reason for that? Or is this a bug? Does anyone have an answer as to why the 'Mercurial Web Repository' option is not available when configuring a Job? (whereas it is for a Plan) Aha - I see what the issue is - when you're configuring a Plan, the 'Web Repository' field does not appear to be validating your selected repository and the 'Mercurial Web Repository' option appears no matter what repository type you select. {quote} Chai: {quote} Ah okay. That sounds like a bug {quote} Giles: {quote} Yeah - I thought so - fyi - the Job configuration page appears to be working okay in this regard. {quote} ----- Worth investigating. Maybe it's a Mercurial Web Repository issue itself. Maybe not.",1 +BAM-7299,"${system.PATH} or ${system.ALLUSERSPROFILE} variables are not being replaced","* I have a builder argument that uses ${system.ALLUSERSPROFILE} but now it is not being replaced by the %ALLUSERSPROFILE% environment variable * I also add extra paths to the default PATH environment variable using the following {noformat} PATH=${system.PATH};tools/bin {noformat} but the ${system.PATH} variable is also not being replaced",2 +BAM-7316,"Mail Server can't get the SMTP or JNDI values if the server is Tested before Saving it","If the Mail Server is tested (""Test"" button is clicked) before being saved (""Save"" button is clicked), the following stack is reported: {noformat} Version: 2.7 Build: 2100 Build Date: 05 Nov 2010 system.error.request.information: Request URL: http://domain:8085/admin/saveMailServer.action Scheme: http Server: domain Port: 8085 URI: /admin/saveMailServer.action Context Path: Servlet Path: /admin/saveMailServer.action Path Info: Query String: Stack Trace: java.lang.NullPointerException: Name is null at java.lang.Enum.valueOf(Unknown Source) at com.atlassian.bamboo.ww2.actions.admin.mail.ConfigureMailServer$MailSetting.valueOf(ConfigureMailServer.java:25) at com.atlassian.bamboo.ww2.actions.admin.mail.ConfigureMailServer.validate(ConfigureMailServer.java:88) at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:154) at com.atlassian.bamboo.ww2.interceptors.BambooWorkflowInterceptor.doIntercept(BambooWorkflowInterceptor.java:33) at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:116) at com.atlassian.bamboo.ww2.interceptors.BambooValidationInterceptor.doIntercept(BambooValidationInterceptor.java:33) at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.atlassian.bamboo.ww2.interceptors.JSONValidationInterceptor.intercept(JSONValidationInterceptor.java:78) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:174) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:151) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.atlassian.bamboo.ww2.interceptors.GlobalAdminInterceptor.intercept(GlobalAdminInterceptor.java:21) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptor.intercept(WebworkSecurityInterceptor.java:55) at com.atlassian.bamboo.security.acegi.intercept.web.WebworkSecurityInterceptorProxy.intercept(WebworkSecurityInterceptorProxy.java:30) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.atlassian.bamboo.ww2.interceptors.PaginationAwareInterceptor.intercept(PaginationAwareInterceptor.java:81) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.atlassian.bamboo.ww2.interceptors.StatisticsAwareInterceptor.intercept(StatisticsAwareInterceptor.java:42) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.atlassian.bamboo.ww2.interceptors.ResultsListAwareInterceptor.intercept(ResultsListAwareInterceptor.java:45) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.atlassian.bamboo.ww2.interceptors.BuildResultsSummaryAwareInteceptor.intercept(BuildResultsSummaryAwareInteceptor.java:66) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.atlassian.bamboo.ww2.interceptors.ResultsSummaryAwareInteceptor.intercept(ResultsSummaryAwareInteceptor.java:67) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.atlassian.bamboo.ww2.interceptors.ChainAwareInterceptor.intercept(ChainAwareInterceptor.java:110) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.atlassian.bamboo.ww2.interceptors.PlanAwareInterceptor.intercept(PlanAwareInterceptor.java:71) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:186) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190) at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116) at com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:274) at com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:202) at com.atlassian.bamboo.ww2.BambooFilterDispatcher.doFilter(BambooFilterDispatcher.java:30) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at com.opensymphony.webwork.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:88) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at com.atlassian.bamboo.filter.AccessLogFilter.doFilter(AccessLogFilter.java:66) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265) at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at com.atlassian.bamboo.filter.SeraphLoginFilter.doFilter(SeraphLoginFilter.java:66) at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) at com.atlassian.bamboo.filter.BambooAcegiProxyFilter.doFilter(BambooAcegiProxyFilter.java:25) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at com.atlassian.bamboo.filter.LicenseFilter.doFilter(LicenseFilter.java:73) at com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at com.atlassian.johnson.filters.AbstractJohnsonFilter.doFilter(AbstractJohnsonFilter.java:72) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:219) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at com.atlassian.seraph.filter.BaseLoginFilter.doFilter(BaseLoginFilter.java:140) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) at com.atlassian.oauth.serviceprovider.internal.servlet.OAuthFilter.doFilter(OAuthFilter.java:69) at com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:170) at com.atlassian.bamboo.persistence.BambooSessionInViewFilter.doFilterInternal(BambooSessionInViewFilter.java:31) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at com.planetj.servlet.filter.compression.CompressingFilter.handleDoFilter(CompressingFilter.java:203) at com.planetj.servlet.filter.compression.CompressingFilter.doFilter(CompressingFilter.java:193) at com.atlassian.bamboo.filter.CompressingFilter.doFilter(CompressingFilter.java:69) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at com.atlassian.bamboo.filter.RequestCacheThreadLocalFilter.doFilter(RequestCacheThreadLocalFilter.java:31) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55) at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1139) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:378) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:535) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:865) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:520) {noformat}",1 +BAM-7360,"Git Repo should work with gitosis","So bamboo user can at plan configuration pass an ssh keyfile with passphrase and JGit will talk to remote repository correctly.",2 +BAM-7365,"Remove delayed changeset detection from Mercurial","If I use mercurial repository and choose ""delay changeste detection' option then I will have ""Unknown Changes"" listed under ""changes"" tab. However, after complete build those placeholder changes should be swapped with real changesets. This is not occuring. {color:red}edit: remove this functionality from Mercurial Repository. See comments below{color}",1 +BAM-7366,"ManualBuildTriggerReason.getUserName() returns null.","I've been trying out the Artifactory Bamboo plugin. The plugin currently fails with a null pointer exception caused by ManualBuildTriggerReason.getUserName() returning null. I've filed a bug report and suggested workaround at JFrog, but I think the root cause is probably a Bamboo bug. https://issues.jfrog.org/jira/browse/BAP-26 http://docs.atlassian.com/bamboo/2.7/com/atlassian/bamboo/v2/build/trigger/ManualBuildTriggerReason.html#getUserName()",2 +BAM-7368,"Confirm/Fix Plan Navigation For Configuration","Where should you get taken when moving between plan and job within the configuration pages. Currently it works like this 1) if there is an equivalent tab take you to that tab 2) when moving to the chain (with no equiv) it takes you to the stages tab 3) when moving to the job (with no equiv) it take you to whatever tab you have saved in the cookie Alternatives * Replace #3 always taking you to the builder tab of the job. * Replace #2 and #3 to take you to the plan/job details page. * Replace #2 to also take you to the cookied page. * Replace #1 and #2 to always take you to the cookied page.",2 +BAM-7404,"Ensure that tabs for Plans and Jobs are consistent","In the Result Summary section we should ensure that the tabs that are common between for Plans and Jobs are in the same order. In the Configuration, we should ensure that the tabs that are common between Plans and Jobs have the same name (E.g. Source Repository) ",2 +BAM-7408,"Decimal-Point missing in Clover integration","When showing the ""Clover code coverage summary"" Page the coverage is multiplied by 10 (ok, may be a feature :-) ). See attached Screenshot 1. When opening the clover artifact the coverage is ok (29.1 % to 291%). ",1 +BAM-7410,"Mercurial quiet period","Mercurial is missing quiet period support (BAM-1178).",2 +BAM-7413,"bamboo sent emails containing unreadable info","I am a east-asian user, and i setup my bamboo server to send email after every completed build. however, there's unreadable part in the email, like the following: ***** [INFO] Compilation failure \...\iskControlFacadeImpl.java:[50,38] ???????? ???? ???? findNaireByCustomerType(java.lang.String) ***** I googled for this issue, and I get the following info: ***** it's a bamboo's bug. the utf-8 charset parameter's missing in htmlpart.setContent method in com.atlassian.bamboo.notification.transports/MultipartEmailTransport.class: htmlContent = notification.getHtmlEmailContent(); if(StringUtils.isNotBlank(htmlContent)) {    BodyPart htmlPart = new MimeBodyPart();      htmlPart.setContent(htmlContent, ""text/html;charset=utf-8"");      mp.addBodyPart(htmlPart); } ***** is that true? how can i solve the problem? THANKS!",2 +BAM-7432,"Overwrite Existing Data option is not effective ","The *Overwrite Existing Data* from the DB Setup installation step is not being completely effective. Data is not deleted and after the Admin User Creation step, the installation process fails when it tries to create DB entries that already exist. It should also be tested with other DBs (not only MySQL).",2 +BAM-7436,"Git Repository should properly detect code has changed on arbitrary branch","I was testing Git on 'master' branch. I should test if it work on other branches as well. Probably this works already. However we need to write up some tests.",1 +BAM-7437,"Git repo should use shallow clones instead of full clones.","Currently we use full clones during: * collecting changes, on bamboo server * code retrieval, on agents, during performing build In both cases we don't need the whole history, so if it is possible we should do shallow clones. Shallow clones are not implemented in JGit yet. Also - both server and agents should be able to fetch afterwards properly. Corner test case: * detecting new rev A -> add to queue * detecting new rev B (grandchild of A) -> add to queue (concurrent builds are on) * agent -> takes rev B, does shallow clone on it (so it won't have rev A) * agent -> takes rev A, does fetch - in such case agent should somehow obtain rev A",5 +BAM-7441,"Initial Git build should ignore history in 'changes' tab.","Instead of showing 10 753 changeset. See: [http://groups.google.com/group/bamboogitplugin/browse_thread/thread/532384d62f62a930#] Git Repository should behave as other (CVS/SVN) repositories with regard to first build.",1 +BAM-7442,"Git repository should recover from failures during checkout.","Like in other repositories - if something fail during code checkout/fetch then Git repository should try to recover - in worst case remove working directory and clone remote repository from scratch. P.S. watch out for lock files in .git directory (they lock 'checkout' operation) - teamcity had problem with that too AFAIK.",1 +BAM-7448,"Git Repository should work on remote agents","ensure it does! * remote agent * elastic one",1 +BAM-7452,"Investigate whether shallow clones (Git Repo) are fast enough","Before supporting shallow clones we would like to confirm that shallow clones are enough for us. So that we do not find out down the track that they are actually slow and we need caches on agents nevertheless.",1 +BAM-7454,"Importing Git Repository from maven","like in other SCM's, like HgRepository",2 +BAM-7469,"Plan Navigator - general progress bar improvements","I believe that plan was to not show the progress bar for the currently selected job. If we do want to show it we need to make sure the text is readable (currently text is white on light blue background)",1 +BAM-7471,"Ignore compatibility mode not working in IE8 (breaking breadcrumbs)","The new character used for breadcrumbs seems to show twice in IE8. ",2 +BAM-7476,"Change dashboard plan result keys to #buildNumber",NULL,1 +BAM-7483,"Test basic Maven artifact passing workflow works with remote agents",NULL,2 +BAM-7484,"Test basic Maven artifact passing workflow works with elastic agents","We need to change the Command decorator to use the tunnel if available.",2 +BAM-7485,"Implement disk space management for maven artifact passing",https://extranet.atlassian.com/display/BAMBOO/Maven+Artifact+Passing#MavenArtifactPassing-DiskspaceManagement,3 +BAM-7486,"implement artifact sharing for maven ","https://extranet.atlassian.com/display/BAMBOO/Maven+Artifact+Passing#MavenArtifactPassing-ArtifactSharing Only implementing simple groupid/artifactid selection and not choosing from a list of produced artifacts (latter requires dependency tracing).",5 +BAM-7500,"errors while checkout/clone should fail the build in Git Plugin","http://tardigrade.sydney.atlassian.com:8085/bamboo/browse/GP-IDEAMASTER-JOB1-1 the error during code checkout should fail the build I reckon. Investigate what is the problem.",1 +BAM-7501,"Drop down menu is 'transparent'",NULL,1 +BAM-7503,"BuildManager still used in core Bamboo functionality","I've found some error messages in Tardigrade logs about build failures of builds that seemed to be completed just fine. Following that, I've found that BuildManager is still used in some places in Bamboo, causing problems with some of the functionality. For example, BuildCompletedEventListener operates on Buildables but uses BuildManager for build key validation. This which never works, since valid job keys are not valid build keys - effectively disabling the BuildCompleted plugins. There are not that many places that use BuildManager, about half of them are old UpgradeTasks. This should be fixed, and potentially backported to 2.7 too (since it breaks plugins in a way that cannot be fixed by developers). ",2 +BAM-7507,"Create Plan Level Result Log Tab","To make it easier to navigate to the logs, we should offer a Plan level log tab which provides a summary table with links to the individual Job log pages as well as a link to download the job log files from the Plan level log page. ",2 +BAM-7517,"Handle subscriptions for Job move across stages",NULL,2 +BAM-7531,"Remove pre-2.0 upgrade tasks and provide protection against upgrade from pre 2.0 version","Krystian: In the history of Bamboo we had several versions which were required to be used to upgrade to the newer version. Ie. to upgrade from Bamboo 1.0 to Bamboo 2.1 you need to execute upgrades to 1.1.2, 1.2 and 2.0. The latest of this ""milestone-upgrade"" versions is 2.0. This is why I propose to drop all the upgrade tasks which were introduced by pre-2.0 versions. The main benefit would be dropping the last usages of old and usually deprecated APIs According to https://extranet.atlassian.com/pages/viewpage.action?pageId=636158922 it means all pre 801 upgrade tasks (18 of them) Przemek: + make it impossible to use new Bamboo version to upgrade from build number of pre-2.0.x version. That check should have been included in 2.0.x anyway... Marek: +1, those upgrade tasks are in sources too long. For historical stuff we got subversion Anton: Yes, if we do this, Bamboo *must* lockup upon starting if it detects that it is being brought up against a version which is before 2.0. We should also stop the user importing XML backups from pre 2.0 versions. In all these cases the user should be given a very clear error message and no data should be changed. Can I ask why do you bring this up now? What caused you to do this? If we do this, will this simplify some other work we need to do for 3.0? How long will the work of stopping a pre 2.0 upgrade/import take? Krystian: Adding protection against upgrade/import from pre-2.0 version is rather simple and would require ~4h of work (including testing). I'm bringing this now cause last week Przemek has spotted a small bug which was caused by internal use of deprecated API (BuildManager). I thought that releasing 3.0 is a good moment to drop this (and maybe other) legacy APIs which were deprecated in 2.7 and previous versions. A lot of uses of deprecated API is buried in old upgrade tasks which led to idea I presented in my original email. This will probably not simplify other work for 3.0 but has a potential to help us find forgotten usages of legacy code that should have been updated some time ago.",1 +BAM-7555,"Ensure we only show 100 changes in Git Repository and display skipped amount (for 3.0)","... and mention in the interface that only the first 100 are shown if there are more than 100 changes.",1 +BAM-7593,"Ability to stop a queued job via action menu","For stop button for a job in the action menu only shows up when the job is actually running not while it is queued. It should show while its queued. The fix needs to ensure that the button doesn't show up when the job's stage hasn't been kicked off yet.",1 +BAM-7599,"Fix Bulk Edit Administration Screen","The bulk edit screen is pretty broken right now. We will need to fix this up before we release 3.0. http://tardigrade.sydney.atlassian.com:8085/bamboo/admin/chooseBulkAction.action",3 +BAM-7602,"Support for include/exclude files in Git Repository","AbstactRepository implements IncludeExcludeAwareRepository interface so the Git Plugin should handle that.",1 +BAM-7619,"Import/Export of Audit Logs",NULL,2 +BAM-7626,"Support Bitbucket repositories","Currently we support any Mercurial Repository, but it would be great if we could specifically support BitBucket and make it easier to setup new plans using the BB API. The underlying infrastructure would be the same as for Mercurial. However, the setup would provide a BitBucket option in addition or as part of the Mercurial Repository and allow for retrieving the users repositories and branches. h4. Specification https://extranet.atlassian.com/display/BAMBOO/Bitbucket+Support+Spec ",5 +BAM-7628,"Remove Build Queue Report ","Since it's not working right now (BAM-7557), we should remove the report from the UI. Once we've fixed it, we will add it again. ",1 +BAM-7630,"Stage Configuration UX Update","The Stages configuration requires some UX changes to make it easier to use: * *Make the Job name link to the Edit Job Configuration* * Remove the Configuration Dropdown (and link) * Add separate ""Disable"" and ""Delete"" links instead of the dropdown * Replace ""Add Job"" with a button and move to the right",2 +BAM-7631,"Fix Test Case Overview Page UI","We need to clean this page up... at least a little bit: * Remove the big colour box * Use the same key value layout we use on the summary * Move the stats below the table * Make the top right stats look the same as the Plan summary stats (once we have them) http://tardigrade.sydney.atlassian.com:8085/bamboo/browse/BAM-FC-DEP/test/case/148635675 ",2 +BAM-7632,"Change hg clone into hg init/hg pull (to get rid of credentials in .hgrc)","[forums|http://forums.atlassian.com/message.jspa?messageID=257362974] bq. I went through the cache directories in the server and noticed also slight security issue. Bamboo seems to register the repository path with username/password into the hgrc file in plain text (in the url) in the cache directory and the file permissions are such that it is readable by all. Not that the source code and builds itself might have something sensitive, but atleast I find it good to know that the username/password is not secure within the file system. ",1 +BAM-7633,"Remove 'clean cache directory' checkbox from Mercurial configuration screen","[forums|http://forums.atlassian.com/thread.jspa?messageID=257363207�] I think we should remove that checkbox as it is hazardous to use. Details in mail(anton,jens,sginter,pstefaniak).",1 +BAM-7635,"Share Mercurial cache among the server and local agents (if concurrent builds are on)","Like in Summary - if concurrent builds are on then each local agent will grab its own copy of cache during code retrieval. And hopefully it doesn't need to, instead it should use bamboo server's cache, like in 'no concurrent build' mode.",1 +BAM-7655,"Git Plugin should detect if remote repository support 'shallow' protocol",NULL,1 +BAM-7656,"Git Repository shouldn't display user/pass + sshKey/pass together","as it mislead user thinking user/pass may impact ssh connection. Ideally there should be combobox ""authenticationType"" with options ""none;http auth;sshKeyfile"" which would display exclusively either user/pass, either ssh+passphrase, or nothing.",1 +BAM-7658,"Sharing an artifact via quick link doesn't work when artifact name is used by other Jobs","This, of course, is correct behaviour. However, it currently doesn't provide any feedback. The link simply doesn't work. Instead, can we display a popup with the following message: ""To share an Artifact, it's name must be unique within the Plan. Please rename the Artifact to share it"" Then allow the user to edit the Artifacts name with a textbox. (just like in edit without all the other fields) The buttons at the bottom should say: Save and Cancel ",2 +BAM-7660,"Ensure Artifacts upgrade task gives decent errors and can be rerun","This may already be catered for but: Its possible that moving artifact files will run out of disk space in the middle. We should make sure that the upgrade task dies elegantly and its possible to recover. e.g. (just re-run the upgrade task and it picks up where it left off.)",1 +BAM-7673,"Git Repository doesn't log messages on remote agents","when run on remote agent no log from GitRepository are shown. Probably textProvider is not properly initialized/loaded - as it was in MercurialRepository.",1 +BAM-7674,"Git repo shallow clones should work via http(s)","Build TEST-TESTHTTPS-JOB1-18 started building on agent Default Agent Updating source code to revision: 05b86d941d9f61f9236d7743c13821d6fdc4d416 Fetching branch 'master'. Will try to do a shallow fetch. Git: Requesting shallow fetch {color:red}Cannot fetch 'https://cixot@github.com/cixot/test.git', branch 'master' to source directory '/home/pstefaniak/bamboo/atlassian-bamboo-2.7.3-standalone/home/xml-data/build-dir/131073/TEST-TESTHTTPS-JOB1'. https://cixot@github.com/cixot/test.git: Starting read stage without written request data pending is not supported{color} {code} com.atlassian.bamboo.repository.RepositoryException: Cannot fetch 'https://cixot@github.com/cixot/test.git', branch 'master' to source directory '/home/pstefaniak/bamboo/atlassian-bamboo-2.7.3-standalone/home/xml-data/build-dir/_git-repositories-cache/0x-645f5f1-1/repository'. https://cixot@github.com/cixot/test.git: Starting read stage without written request data pending is not supported com.atlassian.bamboo.plugins.git.GitOperationHelper.fetch(GitOperationHelper.java:193) com.atlassian.bamboo.plugins.git.GitOperationHelper.fetch(GitOperationHelper.java:157) ... Caused by: org.eclipse.jgit.errors.TransportException: https://cixot@github.com/cixot/test.git: Starting read stage without written request data pending is not supported org.eclipse.jgit.transport.BasePackFetchConnection.doFetch(BasePackFetchConnection.java:292) org.eclipse.jgit.transport.TransportHttp$SmartHttpFetchConnection.doFetch(TransportHttp.java:613) org.eclipse.jgit.transport.BasePackFetchConnection.fetch(BasePackFetchConnection.java:230) org.eclipse.jgit.transport.FetchProcess.fetchObjects(FetchProcess.java:217) org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:152) org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:114) org.eclipse.jgit.transport.Transport.fetch(Transport.java:904) com.atlassian.bamboo.plugins.git.GitOperationHelper.fetch(GitOperationHelper.java:188) ... 23 more Caused by: org.eclipse.jgit.errors.TransportException: https://cixot@github.com/cixot/test.git: Starting read stage without written request data pending is not supported org.eclipse.jgit.transport.TransportHttp$Service.execute(TransportHttp.java:698) org.eclipse.jgit.transport.TransportHttp$Service$HttpExecuteStream.read(TransportHttp.java:772) org.eclipse.jgit.util.io.UnionInputStream.read(UnionInputStream.java:144) java.io.FilterInputStream.read(FilterInputStream.java:133) org.eclipse.jgit.util.io.TimeoutInputStream.read(TimeoutInputStream.java:111) org.eclipse.jgit.util.IO.readFully(IO.java:175) org.eclipse.jgit.transport.PacketLineIn.readLength(PacketLineIn.java:141) org.eclipse.jgit.transport.PacketLineIn.readString(PacketLineIn.java:108) org.eclipse.jgit.transport.PacketLineIn.readACK(PacketLineIn.java:86) org.eclipse.jgit.transport.BasePackFetchConnection.negotiate(BasePackFetchConnection.java:575) org.eclipse.jgit.transport.BasePackFetchConnection.doFetch(BasePackFetchConnection.java:278) ... 30 more {code} ",1 +BAM-7676,"Git Repository server cache should be thread-safe (during fetches)","h3. System Error Details Build test - testmasterclean : Unable to detect changes (com.atlassian.bamboo.repository.RepositoryException : Cannot fetch 'git://github.com/cixot/test.git', branch 'master' to source directory '/home/pstefaniak/bamboo/atlassian-bamboo-2.7.3-standalone/home/xml-data/build-dir/_git-repositories-cache/0x-7300b201-1/repository'. Cannot move pack to /home/pstefaniak/bamboo/atlassian-bamboo-2.7.3-standalone/home/xml-data/build-dir/_git-repositories-cache/0x-7300b201-1/repository/.git/objects/pack/pack-9debbf5763a2286524c616934e72bf0cb8b71dba.pack) Occurred: 05 Jan 2011, 5:12:03 PM com.atlassian.bamboo.repository.RepositoryException: Cannot fetch 'git://github.com/cixot/test.git', branch 'master' to source directory '/home/pstefaniak/bamboo/atlassian-bamboo-2.7.3-standalone/home/xml-data/build-dir/_git-repositories-cache/0x-7300b201-1/repository'. Cannot move pack to /home/pstefaniak/bamboo/atlassian-bamboo-2.7.3-standalone/home/xml-data/build-dir/_git-repositories-cache/0x-7300b201-1/repository/.git/objects/pack/pack-9debbf5763a2286524c616934e72bf0cb8b71dba.pack {code} com.atlassian.bamboo.plugins.git.GitOperationHelper.fetch(GitOperationHelper.java:193) com.atlassian.bamboo.plugins.git.GitOperationHelper.fetch(GitOperationHelper.java:157) com.atlassian.bamboo.plugins.git.GitRepository.collectChangesSinceLastBuild(GitRepository.java:154) com.atlassian.bamboo.v2.trigger.DefaultChangeDetectionManager.collectChangesSinceLastBuild(DefaultChangeDetectionManager.java:92) com.atlassian.bamboo.v2.trigger.ChangeDetectionListenerAction.process(ChangeDetectionListenerAction.java:75) com.atlassian.bamboo.chains.ChainExecutionManagerImpl.createChainState(ChainExecutionManagerImpl.java:164) com.atlassian.bamboo.chains.ChainExecutionManagerImpl.start(ChainExecutionManagerImpl.java:107) sun.reflect.GeneratedMethodAccessor178.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:616) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198) $Proxy41.start(Unknown Source) com.atlassian.bamboo.plan.PlanExecutionManagerImpl.startWithLockTaken(PlanExecutionManagerImpl.java:174) com.atlassian.bamboo.plan.PlanExecutionManagerImpl.access$100(PlanExecutionManagerImpl.java:39) com.atlassian.bamboo.plan.PlanExecutionManagerImpl$2.call(PlanExecutionManagerImpl.java:155) com.atlassian.bamboo.plan.PlanExecutionManagerImpl.doWithProcessLock(PlanExecutionManagerImpl.java:306) com.atlassian.bamboo.plan.PlanExecutionManagerImpl.start(PlanExecutionManagerImpl.java:148) com.atlassian.bamboo.v2.trigger.ChangeDetectionListener.handleEvent(ChangeDetectionListener.java:50) com.atlassian.bamboo.event.EventListenerRunnable.run(EventListenerRunnable.java:22) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) com.atlassian.bamboo.build.pipeline.concurrent.NamedThreadFactory$2.run(NamedThreadFactory.java:50) java.lang.Thread.run(Thread.java:636) Caused by: org.eclipse.jgit.errors.TransportException: Cannot move pack to /home/pstefaniak/bamboo/atlassian-bamboo-2.7.3-standalone/home/xml-data/build-dir/_git-repositories-cache/0x-7300b201-1/repository/.git/objects/pack/pack-9debbf5763a2286524c616934e72bf0cb8b71dba.pack org.eclipse.jgit.transport.BasePackFetchConnection.doFetch(BasePackFetchConnection.java:292) org.eclipse.jgit.transport.BasePackFetchConnection.fetch(BasePackFetchConnection.java:230) org.eclipse.jgit.transport.FetchProcess.fetchObjects(FetchProcess.java:217) org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:152) org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:114) org.eclipse.jgit.transport.Transport.fetch(Transport.java:904) com.atlassian.bamboo.plugins.git.GitOperationHelper.fetch(GitOperationHelper.java:188) ... 23 more Caused by: java.io.IOException: Cannot move pack to /home/pstefaniak/bamboo/atlassian-bamboo-2.7.3-standalone/home/xml-data/build-dir/_git-repositories-cache/0x-7300b201-1/repository/.git/objects/pack/pack-9debbf5763a2286524c616934e72bf0cb8b71dba.pack org.eclipse.jgit.transport.IndexPack.renameAndOpenPack(IndexPack.java:1163) org.eclipse.jgit.transport.BasePackFetchConnection.receivePack(BasePackFetchConnection.java:674) org.eclipse.jgit.transport.BasePackFetchConnection.doFetch(BasePackFetchConnection.java:285) ... 29 more {code} ---- h3. System Error Details Build test - testmaster : Unable to detect changes (com.atlassian.bamboo.repository.RepositoryException : Cannot fetch 'git://github.com/cixot/test.git', branch 'master' to source directory '/home/pstefaniak/bamboo/atlassian-bamboo-2.7.3-standalone/home/xml-data/build-dir/_git-repositories-cache/0x-7300b201-1/repository'. Unknown repository format ""null""; expected ""0"".) Occurred: 05 Jan 2011, 5:12:03 PM com.atlassian.bamboo.repository.RepositoryException: Cannot fetch 'git://github.com/cixot/test.git', branch 'master' to source directory '/home/pstefaniak/bamboo/atlassian-bamboo-2.7.3-standalone/home/xml-data/build-dir/_git-repositories-cache/0x-7300b201-1/repository'. Unknown repository format ""null""; expected ""0"". {code} com.atlassian.bamboo.plugins.git.GitOperationHelper.fetch(GitOperationHelper.java:193) com.atlassian.bamboo.plugins.git.GitOperationHelper.fetch(GitOperationHelper.java:157) com.atlassian.bamboo.plugins.git.GitRepository.collectChangesSinceLastBuild(GitRepository.java:154) com.atlassian.bamboo.v2.trigger.DefaultChangeDetectionManager.collectChangesSinceLastBuild(DefaultChangeDetectionManager.java:92) com.atlassian.bamboo.v2.trigger.ChangeDetectionListenerAction.process(ChangeDetectionListenerAction.java:75) com.atlassian.bamboo.chains.ChainExecutionManagerImpl.createChainState(ChainExecutionManagerImpl.java:164) com.atlassian.bamboo.chains.ChainExecutionManagerImpl.start(ChainExecutionManagerImpl.java:107) sun.reflect.GeneratedMethodAccessor178.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:616) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198) $Proxy41.start(Unknown Source) com.atlassian.bamboo.plan.PlanExecutionManagerImpl.startWithLockTaken(PlanExecutionManagerImpl.java:174) com.atlassian.bamboo.plan.PlanExecutionManagerImpl.access$100(PlanExecutionManagerImpl.java:39) com.atlassian.bamboo.plan.PlanExecutionManagerImpl$2.call(PlanExecutionManagerImpl.java:155) com.atlassian.bamboo.plan.PlanExecutionManagerImpl.doWithProcessLock(PlanExecutionManagerImpl.java:306) com.atlassian.bamboo.plan.PlanExecutionManagerImpl.start(PlanExecutionManagerImpl.java:148) com.atlassian.bamboo.v2.trigger.ChangeDetectionListener.handleEvent(ChangeDetectionListener.java:50) com.atlassian.bamboo.event.EventListenerRunnable.run(EventListenerRunnable.java:22) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) com.atlassian.bamboo.build.pipeline.concurrent.NamedThreadFactory$2.run(NamedThreadFactory.java:50) java.lang.Thread.run(Thread.java:636) Caused by: java.io.IOException: Unknown repository format ""null""; expected ""0"". org.eclipse.jgit.storage.file.FileRepository.(FileRepository.java:180) org.eclipse.jgit.storage.file.FileRepository.(FileRepository.java:126) com.atlassian.bamboo.plugins.git.GitOperationHelper.fetch(GitOperationHelper.java:169) ... 23 more {code} h3. System Error Details Build gp - linuskernelhttp3 - Default Job 4 : Error occurred while executing the build for GP-LINUSKERNELHTTP3-JOB1-4 (com.atlassian.bamboo.repository.RepositoryException : null Could not delete file /home/hgrepo/bamboo-agent-home/xml-data/build-dir/GP-LINUSKERNELHTTP3-JOB1/.git/objects/incoming_4443714216792466821.idx) Occurred: 05 Jan 2011, 5:29:19 PM Agent: lucyfer (2) com.atlassian.bamboo.repository.RepositoryException: null Could not delete file /home/hgrepo/bamboo-agent-home/xml-data/build-dir/GP-LINUSKERNELHTTP3-JOB1/.git/objects/incoming_4443714216792466821.idx {code} com.atlassian.bamboo.plugins.git.GitOperationHelper.fetch(GitOperationHelper.java:193) com.atlassian.bamboo.plugins.git.GitOperationHelper.fetchAndCheckout(GitOperationHelper.java:151) com.atlassian.bamboo.plugins.git.GitOperationHelper.fetchAndCheckout(GitOperationHelper.java:142) com.atlassian.bamboo.plugins.git.GitRepository.retrieveSourceCode(GitRepository.java:203) com.atlassian.bamboo.v2.build.task.CheckoutUpdateForBuild.doCall(CheckoutUpdateForBuild.java:136) com.atlassian.bamboo.v2.build.task.CheckoutUpdateForBuild.call(CheckoutUpdateForBuild.java:41) com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent.build(DefaultBuildAgent.java:189) com.atlassian.bamboo.v2.build.agent.BuildAgentControllerImpl.waitAndPerformBuild(BuildAgentControllerImpl.java:90) com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent$1.run(DefaultBuildAgent.java:102) com.atlassian.bamboo.build.pipeline.concurrent.NamedThreadFactory$2.run(NamedThreadFactory.java:50) java.lang.Thread.run(Thread.java:636) Caused by: org.eclipse.jgit.errors.TransportException: Could not delete file /home/hgrepo/bamboo-agent-home/xml-data/build-dir/GP-LINUSKERNELHTTP3-JOB1/.git/objects/incoming_4443714216792466821.idx org.eclipse.jgit.transport.BasePackFetchConnection.doFetch(BasePackFetchConnection.java:292) org.eclipse.jgit.transport.TransportHttp$SmartHttpFetchConnection.doFetch(TransportHttp.java:613) org.eclipse.jgit.transport.BasePackFetchConnection.fetch(BasePackFetchConnection.java:230) org.eclipse.jgit.transport.FetchProcess.fetchObjects(FetchProcess.java:217) org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:152) org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:114) org.eclipse.jgit.transport.Transport.fetch(Transport.java:904) com.atlassian.bamboo.plugins.git.GitOperationHelper.fetch(GitOperationHelper.java:188) ... 10 more Caused by: java.io.IOException: Could not delete file /home/hgrepo/bamboo-agent-home/xml-data/build-dir/GP-LINUSKERNELHTTP3-JOB1/.git/objects/incoming_4443714216792466821.idx org.eclipse.jgit.util.FileUtils.delete(FileUtils.java:133) org.eclipse.jgit.util.FileUtils.delete(FileUtils.java:91) org.eclipse.jgit.transport.IndexPack.index(IndexPack.java:473) org.eclipse.jgit.transport.BasePackFetchConnection.receivePack(BasePackFetchConnection.java:673) org.eclipse.jgit.transport.BasePackFetchConnection.doFetch(BasePackFetchConnection.java:285) ... 17 more {code}",2 +BAM-7677,"Rather than error out when a git ssh URL is entered without a username, automatically embed it in the URL for the user","See BAM-7665 for background information. Git needs the username to be in the URL for ssh. By implementing BAM-7665, we error out whenever a git ssh URL is entered without a username. I think it would be better if we provided a separate UI textfield for the username and embeded the username into the ssh URL. In this case if the user enters a username into the URL we should error out and ask the user to enter the username into a separate UI field.",1 +BAM-7683,"Update Plan Statistics UI","The blue box doesn't fit in with Bamboo's new style. We should update it to look similar to the Test Summary. See attached mockup. We can definitely play with the size of the numbers. For Plans with a lot of builds, the first number might grow too long at the current size. ",1 +BAM-7684,"Update Bamboo Header","To look more Atlassian, our header requires a few changes. Since another project is underway to unify headers in general, we don't want to spend much time on this, but a few small changes can have a big impact here: *Change the font:* * Not Bold * Remove the underlines for the shortcut keys (not needed very often anyway) * Change the font size to 13 pixels *Background* * Remove the background image * Use a new logo that works on a plain background (to be provided by Jens)",1 +BAM-7689,"Bamboo caches the Dashboard Plan permissions for the first user that accessed Bamboo ","1. Considering that anonymous users can't see the plans in the dashboard; 2. If the first access is done in anonymous mode and then the Admin logs in, the Admin Dashboard will be empty, because the anonymous permission for the dashboard is still cached. All the other screens will show the plans and permissions without problem.",2 +BAM-7690,"Bundle the Git Bamboo Repository Plugin with Bamboo 3.0","{quote} We absolutely need to bundle the Git Bamboo Plugin into Bamboo 3.0. We are actually hoping to do the bundling for the milestone 4 of Bamboo 3.0. {quote}",1 +BAM-7695,"OAUTH TokenExpiry never starts in Bamboo 3.0","When upgrading to the new Atlassian Plaform, we've changed the expiry scheduler to be triggered by Bamboo start instead of plugin system startup event. This is a good idea, but the plugin was not wired properly to receive the startup event. As the result, expiry never runs on Bamboo 3.0. Priority major since the exposure is limited, but this has to be fixed fast.",3 +BAM-7724,"User can see live logs for a jobs on the plan summary screen",NULL,2 +BAM-7732,"Webwork library not compatible with JDK 1.5",NULL,2 +BAM-7735,"Share Git cache among the server and local agents (if concurrent builds are on)","As in BAM-7635 but for Git: Like in Summary - if concurrent builds are on then each local agent will grab its own copy of cache during code retrieval. Cache should be reused locally for checkouts - conurrent builds or not. This will require changing cache lock strategy to read/write - see [comment|https://atlaseye.atlassian.com/cru/CR-BAM-2388#c39662] ",3 +BAM-7771,"Build plan failed to run - it was marked as queued but was not present in the queue","See https://bamboo.extranet.atlassian.com/browse/CONFFUNC5-SMOKE-33/ It has failed to run with error: {noformat}Confluence Trunk Staging and Dumping - Confluence Smoke Tests - Extranet Staging - Smoke Tests > CONFFUNC5-SMOKE-SMOKE-33 : Build CONFFUNC5-SMOKE-SMOKE-33 had to be cancelled: it was marked as queued but was not present in the queue. (19 Jan 2011, 5:47:05 PM) Remove error from the list Clear error from log {noformat}",5 +BAM-7812,"Instant message notifications no longer say ""X new test failures"", just ""2/486 tests failed.""","I seem to recall that the Bamboo IM notifications used to tell me how many test failures were new. This seems to have gone missing in recent milestones on BEAC. It's really useful information because it often tells you whether you broke the build or someone else did. ",1 +BAM-7814,"Move ""Plan Logs"" to be under the configuration screen","Doesn't make a lot of sense but it's the least bad option. Have a link at the bottom of the View Configuration to the Plan Logs. Have a button on the top left to go back to the View Configuration",1 +BAM-7825,"In the stages tab make the Job name link to the Job Configuration (not the Job Summary)",NULL,1 +BAM-7833,"Users can't reset passwords if the Global Anonymous Permission is disabled","If the Global Anonymous Permission to *Access* is disabled, the user still have to login in order to Reset his password. Steps to reproduce: 1. Disable the *Access* permission for Anonymous Users at the Admin => Global Permissions 2. Logout and try to reset your password using the *Can't access your account?* link. 3. You will receive an email with a link. 4. Click on the link. Result: You will be redirected to a Login page, not a Reset Password Page. If you login with the correct password the Reset Page is then displayed, but this is not useful when the user forgot his password. ",2 +BAM-7840,"Source checkout on local agent should not fail if cache is deleted between change collection & source checkout","This may happen when the user manually deletes the cache directory between change collection & source checkout. Workaround: wait for next build. We may detect such case (MissingObjectException), refill the cache and retry the checkout. We do something similar already when source directory is messed up between checkouts.",1 +BAM-7873,"Update atlassian-util-concurrent to 2.0",NULL,1 +BAM-7924,"Errors during source checkout not correctly propagated causing plans to pass when they shouldn't","https://bamboo.extranet.atlassian.com/browse/CRUCHG-CHAIN-FUNCFE-865/log All jobs in this build actually failed which repository exceptions (i.e it didn't even get to running). However this error is not being propagated to Bamboo, so depending on which builder you use the plan may or may not fail. Exception That Cause This particular Failure: http://jira.atlassian.com/browse/BAM-7921 Build Logs Shown For Ant (Build Failed): {code} 03-Feb-2011 17:05:21 Build CRUCHG-CHAIN-INT-865 started building on agent bamboo-agent-78.private.atlassian.com (2) 03-Feb-2011 17:05:21 Build always requires a clean checkout 03-Feb-2011 17:05:21 Cleaning build directory '/opt/bamboo-agent/xml-data/build-dir/CRUCHG-CHAIN-INT' 03-Feb-2011 17:05:21 Updating source code to revision: 7557776da2a4bd7b6ef8194f7b2f57e69bcb0e8d 03-Feb-2011 17:05:47 Error occurred while executing the build for CRUCHG-CHAIN-INT-865 : null 03-Feb-2011 17:05:47 Build failed since text 'BUILD SUCCESS' was not found in the last 250 lines of the output. 03-Feb-2011 17:05:47 Running post build plugin on server 'JMeter Aggregator Build Processor Server' 03-Feb-2011 17:05:47 Running post build plugin on server 'Clover Delta Calculator' 03-Feb-2011 17:05:47 Running post build plugin on server 'Build Hanging Detection Configuration' 03-Feb-2011 17:05:47 Running post build plugin on server 'Post Command Server Runner' 03-Feb-2011 17:05:47 Running post build plugin on server 'NCover Results Collector' 03-Feb-2011 17:05:47 Running post build plugin on server 'FindBugs Server Build Processor' 03-Feb-2011 17:05:47 Generating build results summary... 03-Feb-2011 17:05:47 Saving build results to disk... 03-Feb-2011 17:05:47 Indexing build results... 03-Feb-2011 17:05:48 Finished building CRUCHG-CHAIN-INT-865. {code} Build Logs Shown for Script (Build Passed): {code} 03-Feb-2011 17:05:22 Build CRUCHG-CHAIN-FUNCFE-865 started building on agent bamboo-agent-70.private.atlassian.com (2) 03-Feb-2011 17:05:22 Build always requires a clean checkout 03-Feb-2011 17:05:22 Cleaning build directory '/opt/bamboo-agent/xml-data/build-dir/CRUCHG-CHAIN-FUNCFE' 03-Feb-2011 17:05:22 Updating source code to revision: 7557776da2a4bd7b6ef8194f7b2f57e69bcb0e8d 03-Feb-2011 17:06:20 Error occurred while executing the build for CRUCHG-CHAIN-FUNCFE-865 : null 03-Feb-2011 17:06:20 Build successful since return code was 0 03-Feb-2011 17:06:20 Running post build plugin on server 'JMeter Aggregator Build Processor Server' 03-Feb-2011 17:06:20 Running post build plugin on server 'Clover Delta Calculator' 03-Feb-2011 17:06:20 Running post build plugin on server 'Build Hanging Detection Configuration' 03-Feb-2011 17:06:20 Running post build plugin on server 'Post Command Server Runner' 03-Feb-2011 17:06:20 Running post build plugin on server 'NCover Results Collector' 03-Feb-2011 17:06:20 Running post build plugin on server 'FindBugs Server Build Processor' 03-Feb-2011 17:06:20 Generating build results summary... 03-Feb-2011 17:06:20 Saving build results to disk... 03-Feb-2011 17:06:20 Indexing build results... 03-Feb-2011 17:06:20 Finished building CRUCHG-CHAIN-FUNCFE-865. {code}",2 +BAM-8015,"AccessLogFilter + Maven Artifact Sharing = too much logging","Essentially every request for a mvn resource gets logged. We should exclude the maven urls from the access log filter and just make sure the plugin logs e.g. actual hits (when the artifact was served).",1 +BAM-8059,"Enable button should be change to a run button ","For https://gdansk.bamboo2.atlassian.com 1. I have disabled plan on dashboard (INT-DPL). 2. I Clicked on ""Enable"" to enable plan. 3. Button hasn't changed. Button should change to run button. See attached screenshot.",1 +BAM-8070,"Make Bamboo Windows installer work nicer with default permissions"," At the moment the default permissions on Windows 7 really do screw us over since we write atlassian-bamboo.log to running dir & for services, the tmp directory",2 +BAM-8072,"User can configure key value pairs as parameters at the Plan level","Currently we only have global parameters. With this story we allow the user to define parameters on the Plan level and expose these to all Jobs within the Plan",5 +BAM-8073,"User can override key value pairs when running a manual build","When triggering a build manually, the user will be asked if he wants to overwrite any of the existing parameters for the Plan. ",2 +BAM-8078,"Allow a user to kick of a build via REST and provide the parameters as part of the REST call",NULL,2 +BAM-8083,"Null repository"," A dummy repository that basically doesn't do anything. ",2 +BAM-8089,"Make variables available as environment variables"," So script could use it more easily.",3 +BAM-8158,"Upgrade ActiveMQ to 5.4.2",NULL,3 +BAM-8213,"New dialog forms revert to initial data on validation error","This might actually be happening in all forms in Bamboo. To reproduce: * go to Stage configuration on a plan * edit a stage * remove the ""name"" but add a description (or just something that will cause a validation error), then submit * notice that validation causes the data you entered to be wiped and the original data to be restored",1 +BAM-8216,"Build hung never finish in the UI even after killing agent and all the related process","Hi, we got this build: https://bamboo-extranet.atlassian.com/build/result/viewBuildResults.action?buildKey=JST-NONGAPPS-FFWDRV&buildNumber=176 that was hung. A manual stop didn't work so we killed the process and the agents. In spite of doing that the UI still thinks that is building something, even when the agent (2@atlassian25) was idle and after that building other plans. You can check the thread-dump of the server here: https://extranet.atlassian.com/jira/browse/ADM-12681 The plan was executed again, but the UI still thinks it is building 176. Maybe it is because ""Concurrency builds"" is set to 2. ",3 +BAM-8222,"MovePlans does not invalidate the caches","It doesn't invalidate the build definition cace and may not invalidate the dashboard cache either.",1 +BAM-8241,"Make ImportExportManager available to plugins","I've been trying to create a cross-product way of doing restores through a REST resource. This would make life much simpler for doing integration tests in that we could put applications into a ""known"" state before a test is run. I tried writing a REST resource to do this for Bamboo, but found that I could not get the [ImportExportManager|http://docs.atlassian.com/atlassian-bamboo/3.0/com/atlassian/bamboo/migration/ImportExportManager.html] injected. Any chance of we can make this available to plugins for uses such as this?",1 +BAM-8256,"Maven Artifact Sharing breaks when server is configured to use SSL and Job is running on ec2","Bamboos tunnel on ec2 is at 127.0.0.1 which is not valid for any SSL certificate. {noformat} build 15-Mar-2011 00:22:36 Downloading: https://maven.atlassian.com/repository/internal//opensymphony/xwork/1.2.5-atlassian-1/xwork-1.2.5-atlassian-1.pom build 15-Mar-2011 00:22:37 11K downloaded (xwork-1.2.5-atlassian-1.pom) build 15-Mar-2011 00:22:37 Downloading: https://127.0.0.1:46593/plugins/servlet/maven/subscribe/JST-NIGHTLY-6/JST-NIGHTLY-BUILD//ognl/ognl/2.7.1/ognl-2.7.1.pom build 15-Mar-2011 00:22:37 [WARNING] Unable to get resource 'ognl:ognl:pom:2.7.1' from repository atlassian-bamboo-artifact-sharing (https://127.0.0.1:46593/plugins/servlet/maven/subscribe/JST-NIGHTLY-6/JST-NIGHTLY-BUILD/): Error transferring file: java.security.cert.CertificateException: No subject alternative names matching IP address 127.0.0.1 found build 15-Mar-2011 00:22:37 Downloading: https://maven.atlassian.com/repository/internal//ognl/ognl/2.7.1/ognl-2.7.1.pom build 15-Mar-2011 00:22:37 5K downloaded (ognl-2.7.1.pom) build 15-Mar-2011 00:22:37 Downloading: https://127.0.0.1:46593/plugins/servlet/maven/subscribe/JST-NIGHTLY-6/JST-NIGHTLY-BUILD//jboss/javassist/3.6.ga/javassist-3.6.ga.pom build 15-Mar-2011 00:22:37 [WARNING] Unable to get resource 'jboss:javassist:pom:3.6.ga' from repository atlassian-bamboo-artifact-sharing (https://127.0.0.1:46593/plugins/servlet/maven/subscribe/JST-NIGHTLY-6/JST-NIGHTLY-BUILD/): Error transferring file: java.security.cert.CertificateException: No subject alternative names matching IP address 127.0.0.1 found build 15-Mar-2011 00:22:37 Downloading: https://maven.atlassian.com/repository/internal//jboss/javassist/3.6.ga/javassist-3.6.ga.pom build 15-Mar-2011 00:22:37 1008b downloaded (javassist-3.6.ga.pom) build 15-Mar-2011 00:22:37 Downloading: https://127.0.0.1:46593/plugins/servlet/maven/subscribe/JST-NIGHTLY-6/JST-NIGHTLY-BUILD//org/rifers/rife-continuations/0.0.2/rife-continuations-0.0.2.pom build 15-Mar-2011 00:22:37 [WARNING] Unable to get resource 'org.rifers:rife-continuations:pom:0.0.2' from repository atlassian-bamboo-artifact-sharing (https://127.0.0.1:46593/plugins/servlet/maven/subscribe/JST-NIGHTLY-6/JST-NIGHTLY-BUILD/): Error transferring file: java.security.cert.CertificateException: No subject alternative names matching IP address 127.0.0.1 found {noformat}",2 +BAM-8324,"Upgrade to gadgets 3.0.4","To get up to date with the February Common Upgrade Pack: https://extranet.atlassian.com/display/DEV/Common+Module+Upgrade+Pack+-+2011-02 we need to upgrade to Gadgets 3.0.4. Should be easy as the fixes are minor and we are on gadgets 3.0.2.",2 +BAM-8325,"Upgrade to Atlassian XWork 1.12","To get up to date with the February Common Upgrade Pack: https://extranet.atlassian.com/display/DEV/Common+Module+Upgrade+Pack+-+2011-02 we need to upgrade to XWork 1.12",1 +BAM-8379,"context contains arrays when it expects strings on validation failure","In our task code on validation failure, we re-copy everything that can in on the request back on to the stack for re-rendering (so the values entered by the user remain). The problem is that the actionContext puts everything in an Array, where it usually would just be a string. Whilst some of our front end code accomodates this, some of it doesn't (e.g. select/show/hide stuff) I was originally going to convert everything over to a string when i put it on the stack, but I'm not sure how many assumptions I can make (are they all supposed to be strings, what if the front end really does want an array)",1 +BAM-8383,"Creating a task without a executable selected dies badly","When you click save on a maven task at the moment, and you haven't selected an actual builder from the drop down, it dies badly, rather than just returning a nice validation error above the drop down: ""Please select a builder"".",1 +BAM-8419,"Finalise Task wording on Plan/Job Creation screens","and also Task editing screens Wording will be available soon",1 +BAM-8438,"Create a popup for available variables","A popup to display available global variables should be accessible from the Plan and Job configuration pages. The popup should have 2 tab (Variables). ",2 +BAM-8446,"MsTest Conversion",NULL,2 +BAM-8447,"Categories for tasks backend",NULL,2 +BAM-8448,"Categories for tasks UI",NULL,2 +BAM-8454,"Jobs with different Subversion repositories on the same host: ""Failed to checkout source code to revision""","We tried to use the following jobs with different Subversion locations in a plan in Bamboo: - *Main job*: https://svn.atlassian.com/svn/private/atlassian/confluence/branches/confluence-project-3.5-stable - *Plugin trigger job*: https://svn.atlassian.com/svn/public/atlassian/bamboo/plugins/build-trigger-scripts/trunk Notice that the first job uses {{/svn/private/}} and the second uses {{/svn/public/}} -- different paths on the same host. Bamboo fails when running the second job because it attempts to check out the first job's revision on the second job's Subversion repository, which does not work: bq. Failed to checkout source code to revision '148195' ... Here's an example on our internal Bamboo server: * https://bamboo.extranet.atlassian.com/browse/CONFSTAB-MAIN-76 ",2 +BAM-8456,"Git Repository locks index.lock on Windows agents","Whenever an error occurs on windows agents during the checkout phase(GitOperationHelper.checkout) the .git/index.lock file handle became locked by the system - disallowing any further operations for that particular plan. Details: [BSP-4370|https://support.atlassian.com/browse/BSP-4370]",3 +BAM-8478,"Using the git repository type can not connect to github using ssh keys","When attempting to use a key to log into my github account using my private key i get an authentication error. Specifying the same key with ssh -i i can connect to github fine. Using a username/password is a temporary work around. ",2 +BAM-8492,"Release Management Plugin - Release Build PostChainAction (java.lang.NullPointerException)","I've taken the new Jar from here http://jira.atlassian.com/browse/BAM-8064 I still get the same erro System Error Details Build LGXT Test - LGXT Release 9 : PostChainAction (java.lang.NullPointerException : ) Occurrences: 2 First Occurred: 11 Apr 2011, 4:49:14 PM Last Occurred: 11 Apr 2011, 4:55:16 PM java.lang.NullPointerException com.atlassian.bamboo.build.VariableBuilderBeanImpl.getVariablesForSubscriptionsContext(VariableBuilderBeanImpl.java:125) com.atlassian.bamboo.build.VariableBuilderBeanImpl.filterVariablesByName(VariableBuilderBeanImpl.java:61) com.atlassian.bamboo.build.VariableSubstitutionBeanImpl.substituteBambooVariables(VariableSubstitutionBeanImpl.java:57) com.atlassian.bamboo.build.VariableSubstitutionBeanImpl.substituteBambooVariables(VariableSubstitutionBeanImpl.java:42) com.sysbliss.bamboo.plugins.brmp.action.postrunners.TaggerRunner.runTagger(TaggerRunner.java:74) com.atlassian.bamboo.plugins.brmp.action.BRMPChainCompleteAction.execute(BRMPChainCompleteAction.java:61) com.atlassian.bamboo.chains.ChainPluginSupportImpl.chainCompleted(ChainPluginSupportImpl.java:94) com.atlassian.bamboo.chains.ChainExecutionManagerImpl.finaliseChainStateIfChainExecutionHasCompleted(ChainExecutionManagerImpl.java:525) com.atlassian.bamboo.chains.ChainExecutionManagerImpl.access$600(ChainExecutionManagerImpl.java:49) com.atlassian.bamboo.chains.ChainExecutionManagerImpl$1.run(ChainExecutionManagerImpl.java:281) com.atlassian.util.concurrent.ManagedLocks$ManagedLockImpl.withLock(ManagedLocks.java:322) com.atlassian.bamboo.chains.ChainExecutionManagerImpl.execute(ChainExecutionManagerImpl.java:240) com.atlassian.bamboo.chains.ChainExecutionManagerImpl.access$1000(ChainExecutionManagerImpl.java:49) com.atlassian.bamboo.chains.ChainExecutionManagerImpl$2.run(ChainExecutionManagerImpl.java:327) com.atlassian.util.concurrent.ManagedLocks$ManagedLockImpl.withLock(ManagedLocks.java:322) com.atlassian.bamboo.chains.ChainExecutionManagerImpl.handleEvent(ChainExecutionManagerImpl.java:307) sun.reflect.GeneratedMethodAccessor374.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) org.springframework.orm.hibernate.HibernateInterceptor.invoke(HibernateInterceptor.java:117) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy48.handleEvent(Unknown Source) com.atlassian.event.legacy.LegacyListenerHandler$LegacyListenerInvoker.invoke(LegacyListenerHandler.java:55) com.atlassian.event.internal.AsynchronousAbleEventDispatcher$2.run(AsynchronousAbleEventDispatcher.java:60) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) com.atlassian.bamboo.build.pipeline.concurrent.NamedThreadFactory$2.run(NamedThreadFactory.java:50) java.lang.Thread.run(Thread.java:662) I've a very simple devenv build.",1 +BAM-8503,"JDK Label should default to JDK","At the moment it's just the first one",1 +BAM-8507,"Fix up the logs pages for Plans & Jobs","This still wasn't fixed in 3.0. Table should be 100%. Get rid of view, link should go to the logs tab in the Job. Maybe even dispaly the last 25 lines in the logs inline with the hide / show twixie",2 +BAM-8529,"Bamboo fails to check out git code due to 'Missing object' but command line git clones the repo just fine","While checking out: https://github.com/krosenvold/bgit.git Checkout to revision 67fc88bf41aa2ddea0e50159868764c82bed5bad has failed due to Missing object 3a450411d6868221ae290bc0c17695de2990d5d8. Note this might happen if the repository contains submodules, as Bamboo does not currently support git submodules. Is it a bug? How can I find out if the repo contains submodules?",3 +BAM-8542,"Tests that are recorded as error cause the build not to display test results.","See the following failure: http://tardigrade.sydney.atlassian.com:8085/bamboo/browse/BAM-FC-CLN-3947 ",2 +BAM-8551,"execution of accesskey=""E"" on a build instance results in ""page not found""","h3. steps # open a build instance # hit ur browsers hotkey for edting -> page not found h3. cause looking @ the generates HTML the fault is obvious: {code:html} Edit Plan {code} h3. suggestion i like the possibility to directly edit the config from a build instance and hence i would not want this to be dropped. after all this is very useful when debugging builds. hence, just fix the link in case of build instances. ",1 +BAM-8556,"Maven 2 Auto Dependency parent checkbox not disabled","Maven 2 dependencies determined in the 2.5 bamboo instance still exist, however only the child checkbox is greyed out, not the parent.",2 +BAM-8639,"Update Bamboo Plugin SDK default project to simple task","We should include two sample tasks: * Builder Task with Executable UI * Test Collector Things we should showcase: * Executables - TaskRequirementSupport and CapabilityDefaultsHelper * ProcessService * TestCollationService with custom TestReportCollector and TestCollectionResult. Should implement and explain TaskTestResultsSupport. * Task Categories ",3 +BAM-8678,"Update Context Sensitive Help for Bamboo 3.1","as per the release process here: https://extranet.atlassian.com/display/BAMBOO/Context+Sensitive+Help I have already updated the help-paths.properties to be docs-031",1 +BAM-8707,"Simplify capability message on Tasks","The message currently reads: ""8 agents are capable of building this Job. However, those agents are currently offline or disabled. This Job is capable of building in the Elastic Cloud on 8 images."" This is way to long for this section and distracts with the red color from the actual task at hand. We should shorten this to: ""8 agents and 8 images have the _capabilities_ to run this job"" Link capabilities to the requirements tab. The numbers are for agents (whether online or offline) people can click through to the requirements tab where they can see the more detailed message We should also align the text on the right, see screenshot.",1 +BAM-8746,"Some Tasks fail on Windows because they exceed the MAX_PATH limit of 260 chars","You might see something like the following: {noformat} The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters. {noformat}",2 +BAM-8782,"User can specify on stage creation it is manual",NULL,1 +BAM-8783,"User can change manual flag for stage",NULL,2 +BAM-8784,"REST API should provide manual stages information","* manual flag on stage definition * manual stage in stage result * all data related to manual stage lifecycle Required for proper displaying in navigator",1 +BAM-8785,"Build results with incomplete Manual stages should be clearly marked in all views","Stage only Stage result and jobs result - for results * plan configuration navigator * plan navigator * stages configuration page * plan result navigator Mockups to come",2 +BAM-8786,"Plan execution should stop at manual stage","# only object that are necessary to execute current lap should be created for execution # results for ALL stages and jobs should be created when chain execution is started # jobs than will be not executed in current lap should have additional status flag (new ExecutionState enum in resultSummary) # chain result should be marked as waiting for continue (the same ExecutionState enum in resultsSummary) # Plan status is SUCCESSFUL if no failures in executed jobs",1 +BAM-8787,"User can resume execution of plan stopped on manual stage","# The only stage that could be resumed is the stage where chain executions stopped ## Bamboo should know what stage to execute # New Actions menu item ""Continue"" (plan result and job result) - automatically resumes on manual stage, visible only if execution stopped on manual stage # Play button in Navigator on manual stage Tick",1 +BAM-8789,"User can execute manual stages automatically on specific conditions","# Run Parameterized Build dialog should have new tab ## Same UI on the JIRA side (see mockups from the Release Management Spec) # REST API parameters to allow run up to a stage ## Name of the manual stage to automatically run up to and including ## This is automatically run any previous manual stages as well # The same url parameters should be accepted by action and REST API (/) ",2 +BAM-8790,"A user can see on Dashboard plans with manual stages waiting for execution","# Only if latest executed plan stopped on manual stage # Only marker - no direct action available to continue",1 +BAM-8791,"Plan configuration should be validated before resuming plan execution","Plan should be validated against stored result (with partial job results) Error (friendly :) ) should be presented to the user when: # If stage or job meant to be executed has been removed from plan # If plan structure (stages, jobs) has been changed",2 +BAM-8805,"Events for manual stages/rerun stage","* stop on manual stage * result manual stage * restart failed stage",1 +BAM-8806,"Plugin points for manual stages/rerun stage","* stop on manual stage * resume manual stage * restart failed stage",2 +BAM-8847,"Ability to hit the REST endpoint to trigger a build in Bamboo from the JIRA plugin",NULL,1 +BAM-8866,"Bamboo not updating Mercurial sub-repositories when getting source on build server","From SAC: ""We use Mercurial and our project has a sub-repository (in a folder UI\Elegant) which is specified in the .hgsub file. The project is setup correctly, we can get it to any PC, commit, push, pull changes etc.. However, when changes to the sub-repository are made the Bamboo build fails. The hg.exe command appears to work in getting the project to the cache folder, though the sub-repository (UI\Elegant) is missing, but when it then tries to update the working folder (Bamboo\xml-data\build-dir\AIE-DEV-JOB1) it fails saying no working folder is specified for UI\Elegant. How can we resolve this? "" https://support.atlassian.com/browse/BSP-4674",2 +BAM-8868,"Build time for statistics should be sum of job times for rerun builds","When manual stage is waiting for execution - it changes build time statistics. Sum of job execution should be counted, not chain stop - chain start times.",1 +BAM-8896,"Whilelist Bamboo REST proxy in Bamboo JIRA Plugin","Not done for the moment since we don't know what URLS we want to hit",1 +BAM-8899,"Git Repository should check out symbolic links correctly","see: http://forums.atlassian.com/thread.jspa?threadID=54198&tstart=0 {quote} Hey folks, I'm rolling out a new instance of Bamboo 3.1 using a git repository. When I clone the repo using my local git client, symbolic links are checked out correctly, but when Bamboo checks them out the files only contain the name of the files they should be linked to. {quote}",1 +BAM-8932,"A user can define application link to Jira application",NULL,2 +BAM-8933,"A user can define link between Bamboo project and Jira project",NULL,2 +BAM-8935,"Jira issue information should be asynchronously retrieved from Jira on view - ajax",NULL,2 +BAM-8943,"REST endpoint to retrieve possible variables to override.",NULL,1 +BAM-8944,"Ability to pick future manual stages to run when triggering a previous build.",NULL,2 +BAM-8955,"Handle Authentication Errors returned by Proxy","When the JIRA UI polls bamboo it could require the oauth handshake, we need to make sure this works, and flows nicely.",2 +BAM-8957,"Strange errors with disappearing OAuth consumers on JBAC when talking to JDOG","So I was trying to make some gadgets work on JDOG. I was getting the ""Login & Approve"" button on JDOG. I clicked it and got redirected to JBAC where I approved access. Once back in JDOG I'd still get the Login & Approve button. I tried to then reduce the JDOG OAuth consumer from JBAC but when I clicked delete I'd get an error popup with something along the lines of 'Failed to remove OAuth consumer. I tried this several times with the same result. Refreshed the page and the consumer was still there. I then visited https://jira.bamboo.atlassian.com/plugins/servlet/oauth/users/access-tokens to look at my access tokens but got this: {noformat} com.atlassian.templaterenderer.RenderingException: java.lang.NullPointerException: consumer com.atlassian.templaterenderer.velocity.one.six.internal.VelocityTemplateRendererImpl.render(VelocityTemplateRendererImpl.java:99) sun.reflect.GeneratedMethodAccessor2870.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:58) org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:62) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131) org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.osgi.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:56) org.springframework.osgi.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:39) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.osgi.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:59) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131) org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy208.render(Unknown Source) com.atlassian.oauth.serviceprovider.internal.servlet.user.AccessTokensServlet.doGet(AccessTokensServlet.java:60) javax.servlet.http.HttpServlet.service(HttpServlet.java:690) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) com.atlassian.plugin.servlet.DelegatingPluginServlet.service(DelegatingPluginServlet.java:42) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) com.atlassian.plugin.servlet.ServletModuleContainerServlet.service(ServletModuleContainerServlet.java:52) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:25) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.bamboo.filter.AccessLogFilter.doFilter(AccessLogFilter.java:66) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265) org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) com.atlassian.bamboo.filter.SeraphLoginFilter.doFilter(SeraphLoginFilter.java:74) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) com.atlassian.bamboo.filter.BambooAcegiProxyFilter.doFilter(BambooAcegiProxyFilter.java:25) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.bamboo.filter.LicenseFilter.doFilter(LicenseFilter.java:73) com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.johnson.filters.AbstractJohnsonFilter.doFilter(AbstractJohnsonFilter.java:71) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:211) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.seraph.filter.BaseLoginFilter.doFilter(BaseLoginFilter.java:150) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) com.atlassian.oauth.serviceprovider.internal.servlet.OAuthFilter.doFilter(OAuthFilter.java:71) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) com.atlassian.security.auth.trustedapps.filter.TrustedApplicationsFilter.doFilter(TrustedApplicationsFilter.java:98) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:170) com.atlassian.bamboo.persistence.BambooSessionInViewFilter.doFilterInternal(BambooSessionInViewFilter.java:31) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210) org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:200) org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283) org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:773) org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:703) org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:895) org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685) java.lang.Thread.run(Thread.java:662) Caused by: java.lang.NullPointerException: consumer com.atlassian.oauth.util.Check.notNull(Check.java:37) com.atlassian.oauth.Token$TokenBuilder.consumer(Token.java:178) com.atlassian.oauth.serviceprovider.sal.PluginSettingsServiceProviderTokenStore.get(PluginSettingsServiceProviderTokenStore.java:92) com.atlassian.oauth.serviceprovider.sal.PluginSettingsServiceProviderTokenStore$KeyToToken.apply(PluginSettingsServiceProviderTokenStore.java:232) com.atlassian.oauth.serviceprovider.sal.PluginSettingsServiceProviderTokenStore$KeyToToken.apply(PluginSettingsServiceProviderTokenStore.java:221) com.google.common.collect.Iterators$8.next(Iterators.java:751) org.apache.velocity.runtime.directive.Foreach.render(Foreach.java:346) org.apache.velocity.runtime.parser.node.ASTDirective.render(ASTDirective.java:175) org.apache.velocity.runtime.parser.node.ASTBlock.render(ASTBlock.java:72) org.apache.velocity.runtime.parser.node.ASTIfStatement.render(ASTIfStatement.java:87) org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:336) org.apache.velocity.Template.merge(Template.java:328) org.apache.velocity.Template.merge(Template.java:235) com.atlassian.templaterenderer.velocity.one.six.internal.VelocityTemplateRendererImpl.render(VelocityTemplateRendererImpl.java:90) ... 113 more {noformat} When I went back to the Oauth consumers page the consumer was gone. I re-added it and now https://jira.bamboo.atlassian.com/plugins/servlet/oauth/users/access-tokens works again. I can also get the gadgets to authenticate. Very weird I know and not the best of bug reports but it happend :).",3 +BAM-8969,"If an older version of Bamboo is trying to run a newer version of the data, we should stop the server","If a Bamboo 3.1.1 instance is shutdown and then a 2.6.2 is run pointing to the 3.1.1 Home-Dir, the 2.6.2 will change the bamboo.cfg.xml to an old Build Number. The Build number should be checked and if it is clear that it is higher than the one for the installation, Bamboo should not even start. This can avoid potential changes that version 2.6.2 would make to the 3.1.1 database and avoid data corruption.",1 +BAM-8972,"Ability for the Test Collater to aggregate test results","If more than one Task creates test results in a Job, Bamboo will not be able to save all the test results for all the Tasks. Only the last task will have the test results saved and presented on the UI. *Desired behavior:* Any Task can create test results and the final Test Report will include results from all Tasks that created tests.",2 +BAM-8976,"Restricted administrators cannot delete, move or create plans","Users that have restricted administrator permissions (ie, Studio customers) are able to see the screens to move and delete plans, but when they try to perform the action, they are prevented from doing so due to method level permission checks on PlanManager. It appears to me that {{ACL_BUILD_ADMIN}} in {{applicationContextAcegiAuthorization}} should be granted to restricted administrators, not just normal administrators.",1 +BAM-8985,"Git Repository should work with command 'git log'.","from [BSP-4755|https://support.atlassian.com/browse/BSP-4755] Steps to reproduce: 1) set up a Git plan, for example pointing at ""git://github.com/atlassian/homebrew.git"" 1.1) set up branch != ""master"", i.e. ""atlassian-sdk"" 1.2) create script task containing ""git log"" 2) tick ""clean working directory after each build"" (or ""Force Clean Build"" - doesn't really matter for this issue) 3) run plan (you might need to run it twice to observe the problem) 4a) build will fail with ""fatal: bad default revision 'HEAD'"" 4b) where expected behavior is to see git changesets in the logs of the *successful* build",3 +BAM-9014,"Applink type is not recognised if annonymous access is turned off"," We need to white list /rest/applinks/1.0/manifest. Should also check with integration guys what other URLS need to be publicly available",1 +BAM-9018,"Creation of trusted apps fails with hibernate exceptions","Hibernate operation: Could not execute JDBC batch update; SQL []; Batch entry 0 insert into TRUSTED_APPS (APP_ID, PUBLIC_KEY, APP_NAME, TIMEOUT, TRUSTED_APPS_ID) values ('jira:15489595', 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5wwkHI85p7czkTQCdoDkcA4TKkcF3VC6AHSrXZoMUfIQFE8QRetWipfAob0CMnG+iX0BWn/aPCJkkpHyt7xUNwAsrtHMISdtHovbBWRnE923r6tafzjwnu4sy2O82ogWN0HhSsA/2C15S7IC7rxiFhnpHNrt2UzERgonBbYbYBqvkP/2xz697UwD82Y8Wh7zk3IdPhCiWX6hcHzVLxtzxCj34O+toqLMnHOwW3HDcTue0Qba3nlwZ4fpRwEHZNI1mbDRaOmPRnoAb+jpr9XpO6iM7fDij277P30R6AiJ19oy+YA6z6vkDdVmQYAs7y+qAq0QxtLh4B50lX4oJAp/pwIDAQAB', NULL, '10000', '327682') was aborted. Call getNextException to see the cause.; nested exception is java.sql.BatchUpdateException: Batch entry 0 insert into TRUSTED_APPS (APP_ID, PUBLIC_KEY, APP_NAME, TIMEOUT, TRUSTED_APPS_ID) values ('jira:15489595', 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5wwkHI85p7czkTQCdoDkcA4TKkcF3VC6AHSrXZoMUfIQFE8QRetWipfAob0CMnG+iX0BWn/aPCJkkpHyt7xUNwAsrtHMISdtHovbBWRnE923r6tafzjwnu4sy2O82ogWN0HhSsA/2C15S7IC7rxiFhnpHNrt2UzERgonBbYbYBqvkP/2xz697UwD82Y8Wh7zk3IdPhCiWX6hcHzVLxtzxCj34O+toqLMnHOwW3HDcTue0Qba3nlwZ4fpRwEHZNI1mbDRaOmPRnoAb+jpr9XpO6iM7fDij277P30R6AiJ19oy+YA6z6vkDdVmQYAs7y+qAq0QxtLh4B50lX4oJAp/pwIDAQAB', NULL, '10000', '327682') was aborted. Call getNextException to see the cause. ",1 +BAM-9029,"Expiry for shared artifacts","For us it seems like the global artifact expiry is not affecting the shared artifacts. Because our jobs are producing shared artifacts that are around 1GB big, we are constantly running out of diskspace on the server. Is there a possibility to outdate the shared artifacts which are stored on the server?",2 +BAM-9033,"The contents of atlassian-bundled-plugins.zip are retained in memory","I'm seeing in a heap dump of Bamboo from studio.atlassian.com, that the content of {{atlassian-bundled-plugins.zip}} is retained in memory by the Tomcat {{WebappClassLoader}}. This is a problem that has already been addressed in Confluence (CONF-17511) and JIRA ([JRADEV-6137|https://jdog.atlassian.com/browse/JRADEV-6137]), so a similar solution should be implemented in Bamboo to avoid using the classloader to access the file. This file isn't as large in Bamboo as it is in JIRA and Confluence, but it still is a fairly significant amount of heap space to be wasting, and it is actually considerably bigger on Studio than in a standalone Bamboo (10M in Studio vs. 5.2M normally).",1 +BAM-9089,"Release status is not synced via rest status call in JIRA Bamboo plugin","Whats happening: * The OAuth token has expired during a release * Once the user has done the 3LO dance they are returned to the tab panel * Tab Panel queries Bamboo, detects that the build has finished (success or failure), releases the jira version * The frontend code does not update the fact that the version has been released even though the status (released or not) has been sent back via the JSON response",2 +BAM-9102,"Bamboo returns a JSON response when I submit the ""Edit Artifact Dependency"" dialog using Enter","Steps to reproduce: # Click Edit on an artifact dependency # Focus the Destination Directory field and change the text # Press Enter # Bamboo briefly shows ""An unknown error has occurred"", and then returns a JSON response (!) See this video: http://screencast.com/t/DHniQgeSp",1 +BAM-9114,"Running a Bamboo Remote Agent service on Windows as a user other than System the parameter passed to the java.io.tmpdir fails the build","When the agent runs as the system, the param for java.io.tmpdir defaults to *C:\WINDOWS\TEMP\* and the build works just fine. When I run the agent as a user (trying to get around permissions issues with writing) the param for java.io.tmpdir defaults to *""C:\Documents and Settings\\Local Settings\temp\""* When the build runs, the first task that runs an Ant script I get a message that says: {color:red} BUILD FAILED Target ""and"" does not exist in project """"{color} Even though I see that the param being passed is in quotes so the space in the path should be taken care of, that's the only ""and"" I can find in my log. In the build script ""and"" does not appear anywhere, not even embedded in some other word.",2 +BAM-9163,"Change the ""not run"" icon in manual stages",NULL,1 +BAM-9210,"agent.error.wrongState is not defined in BambooActionSupport.properties","when removing agent that is building currently",1 +BAM-9231,"Race condition can create duplicate plan keys, causing Bamboo to fail to start","Looks like a double-post of a create plan form resulted in duplicate plan key creation: {noformat} bamboo=# select build_id, buildkey from build; build_id | buildkey ----------+---------- 393217 | TRUNK 1507329 | JSTMVN 1507330 | JSTMVN 393218 | JOB1 {noformat} Excerpt from the Bamboo logs at that time: {noformat} @400000004e166cf406b6c1f4 2011-07-07 21:35:22,112 INFO [TP-Processor15] [AccessLogFilter] sysadmin POST https://sdog.jira.com/builds/build/admin/create/createPlan.action 103093kb @400000004e166d0d0c95cb4c 2011-07-07 21:35:47,211 INFO [TP-Processor17] [AccessLogFilter] sysadmin POST https://sdog.jira.com/builds/build/admin/create/createPlan.action 114482kb @400000004e166d1429151cdc 2011-07-07 21:35:54,685 INFO [TP-Processor15] [PlanCreationTemplate] Creating plan with key: JSTDEV-JSTMVN @400000004e166d14301380b4 2011-07-07 21:35:54,803 INFO [TP-Processor15] [PlanCreationTemplate] New build created with key JSTDEV-JSTMVN @400000004e166d1432779bec 2011-07-07 21:35:54,844 INFO [TP-Processor17] [PlanCreationTemplate] Creating plan with key: JSTDEV-JSTMVN @400000004e166d1434823ce4 2011-07-07 21:35:54,852 ERROR [AtlassianEvent::0-BAM::EVENTS:pool-1-thread-6] [ChainExecutionManagerImpl] Could not start executing Plan 'JSTDEV-JSTMVN' as the plan did not have any stages defined @400000004e166d14348244b4 2011-07-07 21:35:54,878 ERROR [TP-Processor17] [FiveOhOh] 500 Exception was thrown. @400000004e166d143482489c org.springframework.dao.IncorrectResultSizeDataAccessException: query did not return a unique result: 2 @400000004e166d143482489c at org.springframework.orm.hibernate.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:590) @400000004e166d143482600c at org.springframework.orm.hibernate.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:353) @400000004e166d14348263f4 at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:375) @400000004e166d14348267dc at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:337) @400000004e166d1434826bc4 at com.atlassian.bamboo.plan.PlanHibernateDao.getPlanByKey(PlanHibernateDao.java:43) @400000004e166d1434826fac at sun.reflect.GeneratedMethodAccessor225.invoke(Unknown Source) @400000004e166d1434826fac at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) @400000004e166d143482871c at java.lang.reflect.Method.invoke(Method.java:597) @400000004e166d1434828b04 at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) @400000004e166d1434828b04 at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) @400000004e166d1434828eec at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) @400000004e166d14348296bc at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) @400000004e166d14348296bc at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) @400000004e166d1434829aa4 at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) @400000004e166d1434829e8c at $Proxy7.getPlanByKey(Unknown Source) @400000004e166d1434829e8c at com.atlassian.bamboo.plan.PlanManagerImpl.getPlanByKey(PlanManagerImpl.java:91) @400000004e166d143482a274 at com.atlassian.bamboo.plan.PlanManagerImpl.getPlanByKey(PlanManagerImpl.java:85) {noformat} This completely breaks Bamboo. It can no longer even start up without throwing the {{IncorrectResultSizeDataAccessException}}. Ideally, the uniqueness of this key should be enforced via a database constraint.",2 +BAM-9297,"Modify Bamboo and Bamboo agents to first use the JAVA_HOME variable when starting","Some users report that Bamboo starts using the first java command on the PATH, rather than respecting the exported JAVA_HOME varible. This is inconsistent iwth other Atlassian tools, for example, JIRA, which look at the JAVA_HOME variable when starting. We need to test this behaviour for: # Bamboo server itself # Bamboo agents. For more information that caused this issue see: https://jira.atlassian.com/browse/BAM-9284?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=258775#comment-258775",1 +BAM-9339,"JBAM Builds Versions tab panel breaks when no issues associated with version","The related builds by date filter when looking at the builds for a specific version causes null pointer exceptions in bamboo when there are no issues with that version. Fix is required on Bamboo side to avoid null pointers, and maybe on jira side to prevent it from making an unecessary call in the first place. {code} 2011-07-22 14:59:23,616 INFO [qtp1872676077-17] [AccessLogFilter] admin POST http://brydie:8085/bamboo/ajax/build/viewBuildResultsByJiraKey.action 25253kb 2011-07-22 14:59:23,620 ERROR [qtp1872676077-17] [FiveOhOh] 500 Exception was thrown. java.lang.NullPointerException com.atlassian.bamboo.plugins.jiraPlugin.actions.ajax.ViewBuildResultsByJiraKey.execute(ViewBuildResultsByJiraKey.java:42) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) {code}",1 +BAM-9342,"Maven dependency task cannot handle Maven3 projects","Bamboo embeds Maven 2.1.0 to read project metadata for the Automatic Dependency task. This version of Maven has problems reading POM and metadata files built with Maven 3.0.x. This change cannot be back ported to 3.2.x as changing the Maven version has certain risks attached to it that can only be mitigated by a full release of Bamboo by running through teams quality control process.",5 +BAM-9358,"""An unexpected error has occurred"" after clicking a link to a JIRA issue",NULL,1 +BAM-9371,"Cannot install plugins onto JBAC using the UPM in Chrome","Firefox works fine, but when I try to install a plugin using Chrome the installer popup appears and then never finishes JBAC is currently using: Atlassian Bamboo version 3.2 build 2600 - 20 Jul 11",1 +BAM-9372,"Stop distributing the user management files at /webapp/WEB-INF/classes/","Bamboo 3.2 users the Crowd/LDAP files located at */xml-data/configuration/* However we are still distributing them at */webapp/WEB-INF/classes/*",1 +BAM-9384,"Webresources from servlets leak onto the next page","When the UPM UI is viewed, followed by any other UI the UPM resources are also included on the next page. This can be seen quite easily by looking at the html that is output. From a bit of investigation com.atlassian.bamboo.filter.RequestCacheThreadLocalFilter should be run for any request that returns html to clear the webResource cache. It is only shown for .action or /s/* Fragment from web.xml {code:xml} requestCache /s/* REQUEST FORWARD requestCache *.action REQUEST FORWARD requestCache com.atlassian.bamboo.filter.RequestCacheThreadLocalFilter {code} Adding /plugins/servlet/* as a filter mapping would solve the issue I was running into (the same script being included multiple times)",2 +BAM-9387,"Bamboo does not start on OpenJDK 7","Captcha depends on SUN packages. {noformat} 2011-08-01 11:06:01,314 INFO [main] [BrokerService] ActiveMQ JMS Message Broker (bamboo, ID:barnard.local-62860-1312160747729-0:1) stopped 2011-08-01 11:06:01,316 INFO [main] [ConfigurableLocalSessionFactoryBean] Closing Hibernate SessionFactory 2011-08-01 11:06:01,320 ERROR [main] [ContextLoader] Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'imageCaptchaService' defined in class path resource [applicationContextCaptcha.xml]: Cannot resolve reference to bean 'captchaEngine' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'captchaEngine' defined in class path resource [applicationContextCaptcha.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.atlassian.bamboo.captcha.AtlassianGimpyEngine]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/ImageFormatException Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'captchaEngine' defined in class path resource [applicationContextCaptcha.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.atlassian.bamboo.captcha.AtlassianGimpyEngine]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/ImageFormatException Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.atlassian.bamboo.captcha.AtlassianGimpyEngine]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/ImageFormatException Caused by: java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/ImageFormatException java.lang.Class.forName0(Native Method) java.lang.Class.forName(Class.java:186) com.octo.captcha.image.gimpy.GimpyFactory.class$(GimpyFactory.java:30) com.octo.captcha.image.gimpy.GimpyFactory.(GimpyFactory.java:30) com.atlassian.bamboo.captcha.AtlassianGimpyEngine.buildInitialFactories(AtlassianGimpyEngine.java:59) com.octo.captcha.engine.image.ListImageCaptchaEngine.(ListImageCaptchaEngine.java:24) com.atlassian.bamboo.captcha.AtlassianGimpyEngine.(AtlassianGimpyEngine.java:28) sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) java.lang.reflect.Constructor.newInstance(Constructor.java:525) org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:85) org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:752) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:717) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:386) org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249) org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160) org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:267) org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110) org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:389) org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:120) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:795) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:713) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:386) org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249) org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160) org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:291) org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352) org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:245) org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:188) org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49) com.atlassian.spring.container.ContainerContextLoaderListener.contextInitialized(ContainerContextLoaderListener.java:32) org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:633) org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:228) org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1160) org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:576) org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492) org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55) org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:93) org.eclipse.jetty.server.Server.doStart(Server.java:243) org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55) com.atlassian.bamboo.server.Server.main(Server.java:77) Caused by: java.lang.ClassNotFoundException: com.sun.image.codec.jpeg.ImageFormatException java.net.URLClassLoader$1.run(URLClassLoader.java:366) java.net.URLClassLoader$1.run(URLClassLoader.java:355) java.security.AccessController.doPrivileged(Native Method) java.net.URLClassLoader.findClass(URLClassLoader.java:354) java.lang.ClassLoader.loadClass(ClassLoader.java:423) sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 47 more 2011-08-01 11:06:01,326 WARN [main] [log] Failed startup of context WebAppContext@2ba42999@2ba42999/bamboo,file:/Users/jdumay/code/bamboo/components/bamboo-web-app/src/main/webapp/,/Users/jdumay/code/bamboo/components/bamboo-web-app/src/main/webapp org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'imageCaptchaService' defined in class path resource [applicationContextCaptcha.xml]: Cannot resolve reference to bean 'captchaEngine' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'captchaEngine' defined in class path resource [applicationContextCaptcha.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.atlassian.bamboo.captcha.AtlassianGimpyEngine]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/ImageFormatException Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'captchaEngine' defined in class path resource [applicationContextCaptcha.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.atlassian.bamboo.captcha.AtlassianGimpyEngine]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/ImageFormatException Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.atlassian.bamboo.captcha.AtlassianGimpyEngine]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/ImageFormatException Caused by: java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/ImageFormatException java.lang.Class.forName0(Native Method) java.lang.Class.forName(Class.java:186) com.octo.captcha.image.gimpy.GimpyFactory.class$(GimpyFactory.java:30) com.octo.captcha.image.gimpy.GimpyFactory.(GimpyFactory.java:30) com.atlassian.bamboo.captcha.AtlassianGimpyEngine.buildInitialFactories(AtlassianGimpyEngine.java:59) com.octo.captcha.engine.image.ListImageCaptchaEngine.(ListImageCaptchaEngine.java:24) com.atlassian.bamboo.captcha.AtlassianGimpyEngine.(AtlassianGimpyEngine.java:28) sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) java.lang.reflect.Constructor.newInstance(Constructor.java:525) org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:85) org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:752) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:717) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:386) org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249) org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160) org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:267) org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:110) org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:389) org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:120) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:795) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:713) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:386) org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249) org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160) org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:291) org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352) org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:245) org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:188) org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49) com.atlassian.spring.container.ContainerContextLoaderListener.contextInitialized(ContainerContextLoaderListener.java:32) org.eclipse.jetty.server.handler.ContextHandler.startContext(ContextHandler.java:633) org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:228) org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1160) org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:576) org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:492) org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55) org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:93) org.eclipse.jetty.server.Server.doStart(Server.java:243) org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:55) com.atlassian.bamboo.server.Server.main(Server.java:77) Caused by: java.lang.ClassNotFoundException: com.sun.image.codec.jpeg.ImageFormatException java.net.URLClassLoader$1.run(URLClassLoader.java:366) java.net.URLClassLoader$1.run(URLClassLoader.java:355) java.security.AccessController.doPrivileged(Native Method) java.net.URLClassLoader.findClass(URLClassLoader.java:354) java.lang.ClassLoader.loadClass(ClassLoader.java:423) sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) java.lang.ClassLoader.loadClass(ClassLoader.java:356) ... 47 more 2011-08-01 11:06:01,343 INFO [main] [log] Started SelectChannelConnector@0.0.0.0:9087 **************************************************************** * * * You can see Bamboo by visiting http://localhost:9087/bamboo * * **************************************************************** {noformat}",5 +BAM-9390,"Prevent failure of the 2511 upgrade task","{code} 2011-07-30 11:54:53,085 INFO [1-UpgradeTaskBackgroundThread:pool-7-thread-1] [AbstractUpgradeManager] --------------------------------------------------------------------------- 2011-07-30 11:54:53,085 INFO [1-UpgradeTaskBackgroundThread:pool-7-thread-1] [AbstractUpgradeManager] Running upgrade task 2511 : Upgrade JIRA server configuration to UAL config 2011-07-30 11:54:53,085 INFO [1-UpgradeTaskBackgroundThread:pool-7-thread-1] [AbstractUpgradeManager] --------------------------------------------------------------------------- 2011-07-30 11:54:54,164 ERROR [1-UpgradeTaskBackgroundThread:pool-7-thread-1] [AbstractUpgradeManager] java.lang.IllegalArgumentException: Application with server ID 3c74886c-6074-30a4-a22d-dcc12346ba68 is already configured java.lang.IllegalArgumentException: Application with server ID 3c74886c-6074-30a4-a22d-dcc12346ba68 is already configured at com.atlassian.applinks.core.DefaultApplicationLinkService.addApplicationLink(DefaultApplicationLinkService.java:201) at com.atlassian.applinks.core.DefaultApplicationLinkService.createApplicationLink(DefaultApplicationLinkService.java:638) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.atlassian.applinks.host.OsgiServiceProxyFactory$DynamicServiceInvocationHandler.invoke(OsgiServiceProxyFactory.java:111) at $Proxy32.createApplicationLink(Unknown Source) at com.atlassian.bamboo.applinks.JiraApplinksServiceImpl.createJiraApplinkWithBasicAuthentication(JiraApplinksServiceImpl.java:77) at com.atlassian.bamboo.upgrade.tasks.UpgradeTask2511UpgradeJiraServerConfig.doUpgrade(UpgradeTask2511UpgradeJiraServerConfig.java:65) at com.atlassian.bamboo.upgrade.tasks.AbstractInHibernateTransactionUpgradeTask$1.doInHibernateTransaction(AbstractInHibernateTransactionUpgradeTask.java:40) at com.atlassian.bamboo.persistence.BambooConnectionTemplate$1$1.doInHibernate(BambooConnectionTemplate.java:51) at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:370) at com.atlassian.bamboo.persistence.BambooConnectionTemplate$1.doInTransactionWithoutResult(BambooConnectionTemplate.java:44) at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:33) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:127) at com.atlassian.bamboo.persistence.BambooConnectionTemplate.execute(BambooConnectionTemplate.java:39) at com.atlassian.bamboo.upgrade.tasks.AbstractInHibernateTransactionUpgradeTask.doUpgrade(AbstractInHibernateTransactionUpgradeTask.java:36) at com.atlassian.bamboo.upgrade.AbstractUpgradeManager.runUpgradeTask(AbstractUpgradeManager.java:175) at com.atlassian.bamboo.upgrade.UpgradeManagerImpl.doUpgrade(UpgradeManagerImpl.java:72) at com.atlassian.bamboo.upgrade.UpgradeLauncher$1.call(UpgradeLauncher.java:115) at com.atlassian.bamboo.upgrade.UpgradeLauncher$1.call(UpgradeLauncher.java:112) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at com.atlassian.bamboo.build.pipeline.concurrent.NamedThreadFactory$2.run(NamedThreadFactory.java:50) at java.lang.Thread.run(Thread.java:662) 2011-07-30 11:54:54,165 INFO [1-UpgradeTaskBackgroundThread:pool-7-thread-1] [AbstractUpgradeManager] Completed upgrade task 2511 with errors. 2011-07-30 11:54:54,166 FATAL [main] [UpgradeLauncher] Upgrade task error: Upgrade task for build 2511 failed with exception: Application with server ID 3c74886c-6074-30a4-a22d-dcc12346ba68 is already configured {code} Currently, we know that the recommendation from [this KB Article|http://confluence.atlassian.com/display/BAMKB/Bamboo+3.2+Upgrade+Fails+on+UAL+Upgrade+Task] can fix the problem.",2 +BAM-9420,"BRMP incompatible with Bamboo 3.2","Following error is recorded when loading the BRMP plugin (Version 2.0.4 or 2.0.1) in Bamboo 3.2: {code} 2011-08-01 11:49:35,400 ERROR [qtp744758938-11] [DefaultPluginManager] Exception when retrieving plugin module brmpPlanConfiguration, will disable plugin com.atlassian.bamboo.plugins.bamboo-release-management-plugin org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.atlassian.bamboo.plugins.brmp.config.ReleaseManagementConfigurator': Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: com/atlassian/bamboo/jira/jiraserver/JiraServerManager Caused by: java.lang.NoClassDefFoundError: com/atlassian/bamboo/jira/jiraserver/JiraServerManager at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2427) at java.lang.Class.privateGetPublicMethods(Class.java:2547) ..... ..... Caused by: java.lang.ClassNotFoundException: com.atlassian.bamboo.jira.jiraserver.JiraServerManager at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190){code} ",3 +BAM-9459,"Configuring OAuth Consumers document is out of date","In Bamboo 3.2, in order to setup an OAuth consumer you need to first trust 2 applications, and then you'll able to add an OAuth consumer. This document is out of date: http://confluence.atlassian.com/display/BAMBOO/Configuring+OAuth+Consumers It says on Step 3: _In the left-hand menu, under the title 'Gadgets', click the 'OAuth Consumers' link. The 'OAuth Administration' page will be displayed, showing a list of configured OAuth Consumers (if any exist)._ There is no such option under the Gadgets section, only ""Available Gadgets"", and that page has no OAuth links either.",1 +BAM-9485,"Release feature in JIRA and Bamboo with trusted application not working properly","When User configure trusted application to communicate between JIRA and Bamboo. The feature release version will not work properly. The JIRA will not show the following in the UI !bamboojira.png|thumbnail! This problem does not happen when using basic authentication in application link. As a workaround user can try with basic authentication.jira",5 +BAM-9511,"Mercurial Repository should correctly filter changesets since last build (even if there was more than 100 changesets)","http://tardigrade.sydney.atlassian.com:8085/bamboo/browse/BAM-EXT-4049 on bamboo-hg repository, lastVcsRevisionKey = 1c969a8270b7b6b70ff7f855a31fde22d3abae0c (Marcin Gardias code change) currentRevisionKey = 06998bc525a291de042309b8972e5d743d491d8b (Krystian's merge) between those two revisions Bamboo has found 106 code changes. Due to hard limit (100 changeset parsed for the build, no more) the Mercurial Repository falsely filters out the not-relevant changesets to current branch: bq. The Mercurial Plugin might incorrectly report the changesets triggering the build *if* there was more than 100 (HgRepository.CHANGESET_LIMIT) changes between the last build. The Mercurial Plugin will just have not enough information to traverse the changeset graph properly and will in defense report all changesets between, even those non-related to the built branch. Code responsible is near here: [HgCommandProcessor.filterOutUnreachableChangesets|https://atlaseye.atlassian.com/browse/bamboo-hg/components/bamboo-plugins/bamboo-plugin-mercurial/src/main/java/com/atlassian/bamboo/plugins/hg/HgCommandProcessor.java?r=d8b981d129d0#to384] I'm raising this issue so we can have a look at in in better detail.",2 +BAM-9518,"Error summary does not match actual error log when rerunning","The Error Summary shows a build failure, but when I click through the build was actually successful. Looks like the job was retried but the old error summary still shows. ",1 +BAM-9556,"JBAM - Socket time outs after 10 seconds","When talking to tardigrade from a JIRA Standalone instance I keep getting socket time out exceptions after 10 seconds. This is happening a lot. Not sure if the core problem is Tardigrade fro taking too long or the Plugin should be waiting longer than that for a response. The error message is not that friendly either. ",1 +BAM-9597,"On restart non default project -> Bamboo servers links aren't used","If you have two links to Bamboo and you have a project that points to the non-default App Link, this will not be respected on a restart. You need to go to the Bamboo config screen and resave the configuration for it work again",2 +BAM-9656,"Handle empty destination directories correctly for artifacts when using Oracle","Currently, the Destination directory option in Artifact Dependency can be left as empty. This does not work when using Oracle. Producing artifacts works well, but when a job from a later stage tries to use the artifacts and error occurs. As Oracle cannot handle storing empty strings, the directory is stored as NULL instead. It looks like Bamboo fails to deal with NULLs for a destination directory when retrieving and using the value: {code} java.lang.NullPointerException at java.io.File.(File.java:305) at com.atlassian.bamboo.build.artifact.LocalArtifactManager.retrieve(LocalArtifactManager.java:74) at com.atlassian.bamboo.build.pipeline.tasks.PrepareBuildTask.prepareArtifacts(PrepareBuildTask.java:100) at com.atlassian.bamboo.build.pipeline.tasks.PrepareBuildTask.call(PrepareBuildTask.java:50) {code} The problem happens during execution of the second stage, even though no actual build action is being performed. The bamboo-home/artifacts directory is present, and the artifact is created correctly. If the directory the artifact should be referenced from in stage 2 is changed, another nullpointerexception happens: {code} 2011-08-29 17:14:30,361 ERROR [qtp470279362-11] [FiveOhOh] 500 Exception was thrown. java.lang.NullPointerException at com.atlassian.bamboo.ww2.actions.build.admin.config.ConfigureArtifactSubscription.isSubscriptionUnique(ConfigureArtifactSubscription.java:158) at com.atlassian.bamboo.ww2.actions.build.admin.config.ConfigureArtifactSubscription.validateSubscription(ConfigureArtifactSubscription.java:147) {code} ",1 +BAM-9674,"When retrying a release with the release management plugin, default plan variables displayed are not used in the build","We have a bamboo plan for our ""release"" which runs the maven-release-plugin to actually release our software. We define the plan with two plan variables: ""thisVersion"" and ""nextVersion"". Steps to reproduce: # Go to a JIRA version for the project we want to release, go to the ""release"" tab, and click to release this JIRA version using the bamboo release plugin # select ""release with new build"" and choose the correct bamboo plan (the release plan with the custom variables) # Click the link to type a value for the variable ""thisVersion"" and enter a value of 1.1.0 # Click the link to type a value for the variable ""nextVersion"" and enter a value of 1.2.0.M1-SNAPSHOT # Click Release \\ The plan will fire. If the plan fails, then it is displayed as failing in JIRA and there is a button to ""retry"" \\ # Click Retry and the same release plugin popup will be displayed with the previously selected values already filled out except for these problems: * *while there are two rows for each of the two plan variables we previously input, the variable name in the dropdown is the same for each*. It lists both variable names as ""nextVersion"", even though we originally selected the drop downs as ""thisVersion"" for the first, and ""nextVersion"" for the second. ** Note that the correct values, however, are still present in the text boxes. Thus when you see the screen (and I forgot to get a screenshot) you see in the first row a select box with ""nextVersion"" but with a value of 1.1.0. And the second row has (again) ""nextVersion"" in the drop down and the text box value of 1.2.0.M1-SNAPSHOT. Thus, it persisted the text box values correctly but not the drop down selections correctly. * If you only change the value of the first drop down -- i.e. change the first drop down from ""nextVersion"" to ""thisVersion"" (which is how we originally filled it out) and don't touch the second drop down box at all -- then it will _only_ set the ""thisVersion"" plan variable (the drop down that we physically clicked and changed). It will _not_ submit the ""nextVersion"" variable value to the plan, despite appearing exactly as it did when we originally filled out the form. This of course made my plan fail a second time as the maven-release plugin needs the ""nextVersion"" value, and since I don't have a default maven fails because the next version is """" (empty string). I went back to the Jira Version -> release page and ""retried"" a third time. Again I was presented with a form that had both drop downs displayed as ""nextVersion"". I clicked the first row drop down and changed it to to the correct ""thisVersion"" variable. Then I clicked the second row (currently ""nextVersion""), deliberately changed it to ""thisVersion"" and then clicked again to change it back to ""nextVersion"". I left the text box values alone -- as they were already correct. I submitted this and it worked perfectly. Thus, by clicking the second row dropdown and changing it and changing it back is a valid workaround. This seems pretty minor as there is an easy workaround and it seems to only be a problem whenever a release build fails, which is probably rare.",2 +BAM-9680,"Oauth Access Token and Plugin Manager option is broken when Bamboo integrate with LDAP with the cache attribute is set to false","Currently, if Bamboo integrated with LDAP using the atlassian-user.xml with the LDAP repository cache is set to false example shown below: {code} {code} With the cache is turn off, when user click on the *Oauth Access Token* and *Plugin Manage* option will throw the following exception and user will be direct to the login page: {code} 2011-09-02 18:04:56,842 ERROR [qtp33513127-17] [LDAPUserManagerReadOnly] Error retrieving user: 'zed2' from LDAP. com.atlassian.user.impl.RepositoryException: javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.jndi.ldap.LdapCtxFactory [Root exception is java.lang.ClassNotFoundException: com.sun.jndi.ldap.LdapCtxFactory not found from bundle [com.atlassian.oauth.atlassian-oauth-service-provider-plugin]] com.atlassian.user.impl.ldap.repository.DefaultLdapContextFactory.getLDAPContext(DefaultLdapContextFactory.java:91) com.atlassian.user.impl.ldap.search.DefaultLDAPUserAdaptor.search(DefaultLDAPUserAdaptor.java:70) com.atlassian.user.impl.ldap.search.DefaultLDAPUserAdaptor.search(DefaultLDAPUserAdaptor.java:54) com.atlassian.user.impl.ldap.LDAPUserManagerReadOnly.getUser(LDAPUserManagerReadOnly.java:70) com.atlassian.user.impl.delegation.DelegatingListUserManager.getUser(DelegatingListUserManager.java:71) sun.reflect.GeneratedMethodAccessor177.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) com.atlassian.crowd.integration.atlassianuser.DynamicDelegationAccessor$DelegatingInvocationHandler.invoke(DynamicDelegationAccessor.java:115) $Proxy16.getUser(Unknown Source) bucket.user.DefaultUserAccessor.getUser(DefaultUserAccessor.java:147) com.atlassian.bamboo.user.BambooUserManagerImpl.getUser(BambooUserManagerImpl.java:103) sun.reflect.GeneratedMethodAccessor178.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy25.getUser(Unknown Source) com.atlassian.bamboo.user.authentication.BambooAuthenticator.getUser(BambooAuthenticator.java:48) com.atlassian.seraph.auth.DefaultAuthenticator.refreshPrincipalObtainedFromSession(DefaultAuthenticator.java:365) com.atlassian.seraph.auth.DefaultAuthenticator.getUserFromSession(DefaultAuthenticator.java:404) com.atlassian.seraph.auth.DefaultAuthenticator.getUser(DefaultAuthenticator.java:318) com.atlassian.seraph.auth.AbstractAuthenticator.getUser(AbstractAuthenticator.java:45) com.atlassian.seraph.auth.AbstractAuthenticator.getRemoteUser(AbstractAuthenticator.java:33) com.atlassian.sal.bamboo.user.BambooSalUserManager.getRemoteUsername(BambooSalUserManager.java:69) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307) org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:58) org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:62) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131) org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.osgi.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:56) org.springframework.osgi.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:39) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.osgi.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:59) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131) org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy239.getRemoteUsername(Unknown Source) com.atlassian.oauth.serviceprovider.internal.servlet.user.AccessTokensServlet.doGet(AccessTokensServlet.java:49) javax.servlet.http.HttpServlet.service(HttpServlet.java:707) javax.servlet.http.HttpServlet.service(HttpServlet.java:820) com.atlassian.plugin.servlet.DelegatingPluginServlet.service(DelegatingPluginServlet.java:42) javax.servlet.http.HttpServlet.service(HttpServlet.java:820) com.atlassian.plugin.servlet.ServletModuleContainerServlet.service(ServletModuleContainerServlet.java:52) javax.servlet.http.HttpServlet.service(HttpServlet.java:820) org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:534) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1351) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:25) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1322) com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118) com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1322) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1322) com.atlassian.bamboo.filter.AccessLogFilter.doFilter(AccessLogFilter.java:66) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1322) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265) org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) com.atlassian.bamboo.filter.SeraphLoginFilter.doFilter(SeraphLoginFilter.java:74) org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275) org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149) org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98) com.atlassian.bamboo.filter.BambooAcegiProxyFilter.doFilter(BambooAcegiProxyFilter.java:25) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1322) com.atlassian.bamboo.filter.LicenseFilter.doFilter(LicenseFilter.java:73) com.atlassian.core.filters.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:31) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1322) com.atlassian.johnson.filters.AbstractJohnsonFilter.doFilter(AbstractJohnsonFilter.java:71) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1322) com.atlassian.seraph.filter.SecurityFilter.doFilter(SecurityFilter.java:211) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1322) com.atlassian.seraph.filter.BaseLoginFilter.doFilter(BaseLoginFilter.java:150) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1322) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) com.atlassian.oauth.serviceprovider.internal.servlet.OAuthFilter.doFilter(OAuthFilter.java:71) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter$1.doFilter(DelegatingPluginFilter.java:66) com.atlassian.security.auth.trustedapps.filter.TrustedApplicationsFilter.doFilter(TrustedApplicationsFilter.java:98) com.atlassian.plugin.servlet.filter.DelegatingPluginFilter.doFilter(DelegatingPluginFilter.java:74) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:42) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1322) org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:170) com.atlassian.bamboo.persistence.BambooSessionInViewFilter.doFilterInternal(BambooSessionInViewFilter.java:31) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1322) com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:77) com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:63) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1322) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1322) org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:473) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:516) org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:921) org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:403) org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:184) org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:856) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:114) org.eclipse.jetty.server.Server.handle(Server.java:352) org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:596) org.eclipse.jetty.server.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:1052) org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:590) org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:212) org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:426) org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:510) org.eclipse.jetty.io.nio.SelectChannelEndPoint.access$000(SelectChannelEndPoint.java:34) org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40) org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:450) java.lang.Thread.run(Unknown Source) Caused by: javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.jndi.ldap.LdapCtxFactory [Root exception is java.lang.ClassNotFoundException: com.sun.jndi.ldap.LdapCtxFactory not found from bundle [com.atlassian.oauth.atlassian-oauth-service-provider-plugin]] javax.naming.spi.NamingManager.getInitialContext(Unknown Source) javax.naming.InitialContext.getDefaultInitCtx(Unknown Source) javax.naming.InitialContext.init(Unknown Source) javax.naming.InitialContext.(Unknown Source) javax.naming.directory.InitialDirContext.(Unknown Source) com.atlassian.user.impl.ldap.repository.DefaultLdapContextFactory.getLDAPContext(DefaultLdapContextFactory.java:87) ... 137 more Caused by: java.lang.ClassNotFoundException: com.sun.jndi.ldap.LdapCtxFactory not found from bundle [com.atlassian.oauth.atlassian-oauth-service-provider-plugin] org.springframework.osgi.util.BundleDelegatingClassLoader.findClass(BundleDelegatingClassLoader.java:103) org.springframework.osgi.util.BundleDelegatingClassLoader.loadClass(BundleDelegatingClassLoader.java:156) java.lang.ClassLoader.loadClass(Unknown Source) java.lang.Class.forName0(Native Method) java.lang.Class.forName(Unknown Source) com.sun.naming.internal.VersionHelper12.loadClass(Unknown Source) ... 143 more Caused by: java.lang.ClassNotFoundException: com.sun.jndi.ldap.LdapCtxFactory org.apache.felix.framework.ModuleImpl.findClassOrResourceByDelegation(ModuleImpl.java:772) org.apache.felix.framework.ModuleImpl.access$200(ModuleImpl.java:73) org.apache.felix.framework.ModuleImpl$ModuleClassLoader.loadClass(ModuleImpl.java:1690) java.lang.ClassLoader.loadClass(Unknown Source) org.apache.felix.framework.ModuleImpl.getClassByDelegation(ModuleImpl.java:634) org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1594) org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:887) org.springframework.osgi.util.BundleDelegatingClassLoader.findClass(BundleDelegatingClassLoader.java:99) ... 148 more {code} The current workaround is to set the LDAP repository cache=""true"" as shown below: {code} {code} The problem only happens with LDAP user only",3 +BAM-9687,"Possible race condition for build label addition","A couple of days ago we started getting error messages back from many of our builds along the lines of the following: {noformat} System Error Details xxx - 6. yyy - Default Job 10 : Build Labeller custom build post complete action failed to run (java.lang.RuntimeException : Cannot add label '15_0_05_0917' to build results 'xxxxx-yyy-JOB1-10') Occurred: 02 Sep 2011, 6:02:53 AM java.lang.RuntimeException: Cannot add label '15_0_05_0917' to build results 'xxx-yyy-JOB1-10' com.atlassian.bamboo.labels.LabelManagerImpl.addLabel(LabelManagerImpl.java:92) sun.reflect.GeneratedMethodAccessor1147.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy42.addLabel(Unknown Source) sun.reflect.GeneratedMethodAccessor1147.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) com.atlassian.bamboo.security.acegi.intercept.aopalliance.AuthorityOverrideMethodSecurityInterceptor.invoke(AuthorityOverrideMethodSecurityInterceptor.java:30) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy42.addLabel(Unknown Source) com.atlassian.bamboo.plugins.labeller.BuildLabeller.labelBuildResult(BuildLabeller.java:304) com.atlassian.bamboo.plugins.labeller.BuildLabeller.labelBuildResult(BuildLabeller.java:291) com.atlassian.bamboo.plugins.labeller.BuildLabeller.call(BuildLabeller.java:85) sun.reflect.GeneratedMethodAccessor712.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) org.springframework.orm.hibernate.HibernateInterceptor.invoke(HibernateInterceptor.java:117) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy362.call(Unknown Source) com.atlassian.bamboo.v2.build.events.PostBuildCompletedEventListener$1.run(PostBuildCompletedEventListener.java:71) com.atlassian.bamboo.variable.CustomVariableContextRunnerImpl.execute(CustomVariableContextRunnerImpl.java:25) com.atlassian.bamboo.v2.build.events.PostBuildCompletedEventListener.performAction(PostBuildCompletedEventListener.java:52) com.atlassian.bamboo.v2.build.events.PostBuildCompletedEventListener.handleEvent(PostBuildCompletedEventListener.java:41) com.atlassian.event.legacy.LegacyListenerHandler$LegacyListenerInvoker.invoke(LegacyListenerHandler.java:55) com.atlassian.event.internal.AsynchronousAbleEventDispatcher$2.run(AsynchronousAbleEventDispatcher.java:60) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) com.atlassian.bamboo.build.pipeline.concurrent.NamedThreadFactory$2.run(NamedThreadFactory.java:50) java.lang.Thread.run(Thread.java:662) Caused by: org.springframework.dao.IncorrectResultSizeDataAccessException: query did not return a unique result: 2 org.springframework.orm.hibernate.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:590) org.springframework.orm.hibernate.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:353) org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:375) org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:337) com.atlassian.bamboo.labels.LabelHibernateDao.findLabelByNameAndNamespace(LabelHibernateDao.java:35) sun.reflect.GeneratedMethodAccessor1269.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy13.findLabelByNameAndNamespace(Unknown Source) com.atlassian.bamboo.labels.LabelManagerImpl.addLabel(LabelManagerImpl.java:392) com.atlassian.bamboo.labels.LabelManagerImpl$1.call(LabelManagerImpl.java:80) com.atlassian.bamboo.labels.LabelManagerImpl$1.call(LabelManagerImpl.java:75) com.atlassian.bamboo.labels.LabelManagerImpl.withWriteLock(LabelManagerImpl.java:207) com.atlassian.bamboo.labels.LabelManagerImpl.addLabel(LabelManagerImpl.java:74) ... 43 more {noformat} This happened for two separate and widely-used labels. It was pretty obvious from the hibernate exception that Bamboo had created duplicate labels in the DB. We ended up renaming the duplicate label and telling any builds that referenced it to use the original label. The relevant database contents prior to the fix were as follows: {noformat} mysql> select * from LABEL where NAME=""14_0_36_21""; +----------+------------+-----------+---------------------+---------------------+ | LABEL_ID | NAME | NAMESPACE | CREATED_DATE | UPDATED_DATE | +----------+------------+-----------+---------------------+---------------------+ | 55410738 | 14_0_36_21 | label | 2011-09-02 05:08:56 | 2011-09-02 05:08:56 | | 55410739 | 14_0_36_21 | label | 2011-09-02 05:08:56 | 2011-09-02 05:08:56 | +----------+------------+-----------+---------------------+---------------------+ 2 rows in set (0.00 sec) mysql> select * from BUILDRESULTSUMMARY_LABEL where LABEL_ID=""55410738""; +----------+----------+-----------------------+----------+------------+-----------+---------------------+---------------------+ | ID | LABEL_ID | BUILDRESULTSUMMARY_ID | BUILD_ID | PROJECT_ID | USER_NAME | CREATED_DATE | UPDATED_DATE | +----------+----------+-----------------------+----------+------------+-----------+---------------------+---------------------+ | 55345686 | 55410738 | 55054288 | 44367885 | 43155458 | NULL | 2011-09-02 05:08:56 | 2011-09-02 05:08:56 | +----------+----------+-----------------------+----------+------------+-----------+---------------------+---------------------+ 1 row in set (0.00 sec) mysql> select * from BUILDRESULTSUMMARY_LABEL where LABEL_ID=""55410739""; +----------+----------+-----------------------+----------+------------+-----------+---------------------+---------------------+ | ID | LABEL_ID | BUILDRESULTSUMMARY_ID | BUILD_ID | PROJECT_ID | USER_NAME | CREATED_DATE | UPDATED_DATE | +----------+----------+-----------------------+----------+------------+-----------+---------------------+---------------------+ | 55345687 | 55410739 | 55054290 | 51183804 | 43155458 | NULL | 2011-09-02 05:08:56 | 2011-09-02 05:08:56 | +----------+----------+-----------------------+----------+------------+-----------+---------------------+---------------------+ 1 row in set (0.00 sec) mysql> select * from BUILDRESULTSUMMARY where BUILDRESULTSUMMARY_ID=""55054288""; +-----------------------+---------------------+---------------------+----------------------+--------------+-------------+-----------------------+-------------------+---------------------+----------------------+----------+-------------+--------------------------------------------------------------------------+--------------+-------------+----------------+---------------------+---------------------+--------------------+--------------------+------------------+-------------------+---------------------+------------------+---------------------+----------------+------------+------------------+----------------------+-----------------------+--------------+ | BUILDRESULTSUMMARY_ID | CREATED_DATE | UPDATED_DATE | BUILD_KEY | BUILD_NUMBER | BUILD_STATE | SUCCESSFUL_TEST_COUNT | FAILED_TEST_COUNT | BUILD_DATE | BUILD_COMPLETED_DATE | DURATION | TIME_TO_FIX | TRIGGER_REASON | REVISION_KEY | DELTA_STATE | BUILD_AGENT_ID | VCS_UPDATE_TIME | QUEUE_TIME | FAILURE_TEST_COUNT | SUCCESS_TEST_COUNT | TOTAL_TEST_COUNT | BROKEN_TEST_COUNT | EXISTING_TEST_COUNT | FIXED_TEST_COUNT | TOTAL_TEST_DURATION | STAGERESULT_ID | BUILD_TYPE | LIFE_CYCLE_STATE | BUILD_CANCELLED_DATE | SKIPPED_COMMITS_COUNT | CHAIN_RESULT | +-----------------------+---------------------+---------------------+----------------------+--------------+-------------+-----------------------+-------------------+---------------------+----------------------+----------+-------------+--------------------------------------------------------------------------+--------------+-------------+----------------+---------------------+---------------------+--------------------+--------------------+------------------+-------------------+---------------------+------------------+---------------------+----------------+------------+------------------+----------------------+-----------------------+--------------+ | 55054288 | 2011-09-02 05:01:09 | 2011-09-02 05:08:55 | yyy-JOB1 | 3149 | Successful | NULL | NULL | 2011-09-02 05:02:22 | 2011-09-02 05:03:30 | 68367 | NULL | com.atlassian.bamboo.plugin.system.triggerReason:DependencyTriggerReason | 17035 | NONE | 41353237 | 2011-09-02 05:01:09 | 2011-09-02 05:01:09 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 55085118 | BUILD | Finished | NULL | 0 | 55054287 | +-----------------------+---------------------+---------------------+----------------------+--------------+-------------+-----------------------+-------------------+---------------------+----------------------+----------+-------------+--------------------------------------------------------------------------+--------------+-------------+----------------+---------------------+---------------------+--------------------+--------------------+------------------+-------------------+---------------------+------------------+---------------------+----------------+------------+------------------+----------------------+-----------------------+--------------+ 1 row in set (0.00 sec) mysql> select * from BUILDRESULTSUMMARY where BUILDRESULTSUMMARY_ID=""55054290""; +-----------------------+---------------------+---------------------+--------------------------+--------------+-------------+-----------------------+-------------------+---------------------+----------------------+----------+-------------+--------------------------------------------------------------------------+--------------+-------------+----------------+---------------------+---------------------+--------------------+--------------------+------------------+-------------------+---------------------+------------------+---------------------+----------------+------------+------------------+----------------------+-----------------------+--------------+ | BUILDRESULTSUMMARY_ID | CREATED_DATE | UPDATED_DATE | BUILD_KEY | BUILD_NUMBER | BUILD_STATE | SUCCESSFUL_TEST_COUNT | FAILED_TEST_COUNT | BUILD_DATE | BUILD_COMPLETED_DATE | DURATION | TIME_TO_FIX | TRIGGER_REASON | REVISION_KEY | DELTA_STATE | BUILD_AGENT_ID | VCS_UPDATE_TIME | QUEUE_TIME | FAILURE_TEST_COUNT | SUCCESS_TEST_COUNT | TOTAL_TEST_COUNT | BROKEN_TEST_COUNT | EXISTING_TEST_COUNT | FIXED_TEST_COUNT | TOTAL_TEST_DURATION | STAGERESULT_ID | BUILD_TYPE | LIFE_CYCLE_STATE | BUILD_CANCELLED_DATE | SKIPPED_COMMITS_COUNT | CHAIN_RESULT | +-----------------------+---------------------+---------------------+--------------------------+--------------+-------------+-----------------------+-------------------+---------------------+----------------------+----------+-------------+--------------------------------------------------------------------------+--------------+-------------+----------------+---------------------+---------------------+--------------------+--------------------+------------------+-------------------+---------------------+------------------+---------------------+----------------+------------+------------------+----------------------+-----------------------+--------------+ | 55054290 | 2011-09-02 05:02:17 | 2011-09-02 05:08:55 | xxx-JOB1 | 667 | Successful | NULL | NULL | 2011-09-02 05:03:40 | 2011-09-02 05:05:58 | 137913 | NULL | com.atlassian.bamboo.plugin.system.triggerReason:DependencyTriggerReason | 17035 | NONE | 33128455 | 2011-09-02 05:02:18 | 2011-09-02 05:02:17 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 55085119 | BUILD | Finished | NULL | 0 | 55054289 | +-----------------------+---------------------+---------------------+--------------------------+--------------+-------------+-----------------------+-------------------+---------------------+----------------------+----------+-------------+--------------------------------------------------------------------------+--------------+-------------+----------------+---------------------+---------------------+--------------------+--------------------+------------------+-------------------+---------------------+------------------+---------------------+----------------+------------+------------------+----------------------+-----------------------+--------------+ 1 row in set (0.01 sec) mysql> select * from BUILD where BUILD_ID=""44367885""; +----------+---------------------+---------------------+----------------------+----------+-------------+--------------+--------------------+---------------------+-------------------+-------------------------+---------------------+------------+------------------+-----------------+------------+-------------+----------+ | BUILD_ID | CREATED_DATE | UPDATED_DATE | FULL_KEY | BUILDKEY | TITLE | REVISION_KEY | FIRST_BUILD_NUMBER | LATEST_BUILD_NUMBER | NEXT_BUILD_NUMBER | SUSPENDED_FROM_BUILDING | MARKED_FOR_DELETION | PROJECT_ID | NOTIFICATION_SET | REQUIREMENT_SET | BUILD_TYPE | DESCRIPTION | STAGE_ID | +----------+---------------------+---------------------+----------------------+----------+-------------+--------------+--------------------+---------------------+-------------------+-------------------------+---------------------+------------+------------------+-----------------+------------+-------------+----------+ | 44367885 | 2011-07-03 06:10:37 | 2011-09-02 13:01:18 | yyy-JOB1 | JOB1 | Default Job | 17073 | 1 | 3157 | 3158 | | | 43155458 | 44466189 | 44400653 | JOB | | 44335117 | +----------+---------------------+---------------------+----------------------+----------+-------------+--------------+--------------------+---------------------+-------------------+-------------------------+---------------------+------------+------------------+-----------------+------------+-------------+----------+ 1 row in set (0.00 sec) mysql> select * from BUILD where BUILD_ID=""51183804""; +----------+---------------------+---------------------+--------------------------+----------+-------------+--------------+--------------------+---------------------+-------------------+-------------------------+---------------------+------------+------------------+-----------------+------------+-------------+----------+ | BUILD_ID | CREATED_DATE | UPDATED_DATE | FULL_KEY | BUILDKEY | TITLE | REVISION_KEY | FIRST_BUILD_NUMBER | LATEST_BUILD_NUMBER | NEXT_BUILD_NUMBER | SUSPENDED_FROM_BUILDING | MARKED_FOR_DELETION | PROJECT_ID | NOTIFICATION_SET | REQUIREMENT_SET | BUILD_TYPE | DESCRIPTION | STAGE_ID | +----------+---------------------+---------------------+--------------------------+----------+-------------+--------------+--------------------+---------------------+-------------------+-------------------------+---------------------+------------+------------------+-----------------+------------+-------------+----------+ | 51183804 | 2011-08-05 02:01:37 | 2011-09-02 13:01:19 | xxx-JOB1 | JOB1 | Default Job | 17073 | 330 | 675 | 676 | | | 43155458 | 51249340 | 51216523 | JOB | | 51150929 | +----------+---------------------+---------------------+--------------------------+----------+-------------+--------------+--------------------+---------------------+-------------------+-------------------------+---------------------+------------+------------------+-----------------+------------+-------------+----------+ 1 row in set (0.00 sec) {noformat} We hit a very similar issue with a plan creation race condition (BAM-9231) recently. This appears to be caused by a separate race condition affecting the creation of labels.",2 +BAM-9692,"Test (and fix is required) agent and server wrapper with openjdk7",NULL,2 +BAM-9750,"Update checkout task definition on repository update and clone",NULL,2 +BAM-9758,"Add server pause button to UPM decorator","We need to add the server pause button to the UPM decorator and a warning that if you do not pause the server and upgrade a plugin, builds may fail.",2 +BAM-9856,"My Bamboo looks weird when more than one commit is involved in a build :-)","It links build only to the latest user commit. There's a bug in getResultSummariesByChangeSetId method query that returns result summaries only if the changeset is the latest changeset.",1 +BAM-9868,"Bamboo should use default application link to retrieve issues +from jira 4.2.x+ when no project entity link is set up for a plan.","Steps to reproduce: 1) grab {color:red}jira 4.2{color} (we can't reproduce problem on jira 4.3+) 2) grab bamboo 3.2.2 3) set up an application link from bamboo to jira, use outgoing ""basic access"" 4) set up a test project with a test issue on jira instance 5) set up a test project with a test plan on bamboo instance 5.1) force that plan to detect changes on a repository that will contain commit with jira-issue comment 5.2) for example: {noformat} mkdir test ; cd test hg init ; echo ""aaa"" >> aaa.txt ; hg add aaa.txt ; hg commit --user ""user"" -m ""initial"" echo ""aaa"" >> aaa.txt ; hg commit --user ""user"" -m ""BAM-9867 message message"" # repeat above line when you need to trigger bamboo build {noformat} 6) go to build result page of the plan, build should have contain commits with ""BAM-9867"" comments. (replace ""BAM-9867"" with your jira instance test issue) 7.1) when you click on ""BAM-9867"" you will get ""unexpected error has occured"" 7.2) while you should be redirected to the jira page 8.1) on the JIRA issues panel you should have see your issue, with it's icon, and with link to your jira instance 8.2) instead you will see something like ""Can't retrieve issues"" or similar error, I don't remember. 9) obviosly ""Issues"" tab is borked as well. ",2 +BAM-9941,"ActiveMQ JMS data file no longer found causing builds not able to launch","{noformat:title=BEAC server log JMS summary snipppet} 2011-10-09 18:34:29,222 ERROR [BrokerService[bamboo] Task] [Queue] Failed to page in more queue messages java.lang.RuntimeException: java.lang.RuntimeException: java.io.IOException: Could not locate data file /opt/j2ee/domains/bamboo.atlassian.com/confluence/webapps/atlassian-bamboo/data/current/jms-store/bamboo/KahaDB/db-1782.log at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.reset(AbstractStoreCursor.java:113) at org.apache.activemq.broker.region.cursors.StoreQueueCursor.reset(StoreQueueCursor.java:157) at org.apache.activemq.broker.region.Queue.doPageIn(Queue.java:1677) at org.apache.activemq.broker.region.Queue.pageInMessages(Queue.java:1897) at org.apache.activemq.broker.region.Queue.iterate(Queue.java:1424) at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122) at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.RuntimeException: java.io.IOException: Could not locate data file /opt/j2ee/domains/bamboo.atlassian.com/confluence/webapps/atlassian-bamboo/data/current/jms-store/bamboo/KahaDB/db-1782.log at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.fillBatch(AbstractStoreCursor.java:265) at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.reset(AbstractStoreCursor.java:110) ... 9 more Caused by: java.io.IOException: Could not locate data file /opt/j2ee/domains/bamboo.atlassian.com/confluence/webapps/atlassian-bamboo/data/current/jms-store/bamboo/KahaDB/db-1782.log at org.apache.kahadb.journal.Journal.getDataFile(Journal.java:345) at org.apache.kahadb.journal.Journal.read(Journal.java:592) at org.apache.activemq.store.kahadb.MessageDatabase.load(MessageDatabase.java:786) at org.apache.activemq.store.kahadb.KahaDBStore.loadMessage(KahaDBStore.java:956) at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore$5.execute(KahaDBStore.java:494) at org.apache.kahadb.page.Transaction.execute(Transaction.java:728) at org.apache.activemq.store.kahadb.KahaDBStore$KahaDBMessageStore.recoverNextMessages(KahaDBStore.java:485) at org.apache.activemq.store.ProxyMessageStore.recoverNextMessages(ProxyMessageStore.java:88) at org.apache.activemq.broker.region.cursors.QueueStorePrefetch.doFillBatch(QueueStorePrefetch.java:97) at org.apache.activemq.broker.region.cursors.AbstractStoreCursor.fillBatch(AbstractStoreCursor.java:262) ... 10 more 2011-10-09 18:34:29,351 ERROR [BrokerService[bamboo] Task] [Journal] Looking for key 1782 but not found in fileMap: {1783=db-1783.log number = 1783 , length = 33554836, 1786=db-1786.log number = 1786 , length = 34109378, 1787=db-1787.log number = 1787 , length = 33556132, 1280=db-1280.log number = 1280 , length = 33556132, 1784=db-1784.log number = 1784 , length = 33554712, 1790=db-1790.log number = 1790 , length = 33606358, 1791=db-1791.log number = 1791 , length = 35664711, 1788=db-1788.log number = 1788 , length = 33581527, 1789=db-1789.log number = 1789 , length = 33557879, 1806=db-1806.log number = 1806 , length = 33592825, 1807=db-1807.log number = 1807 , length = 16003513, 1804=db-1804.log number = 1804 , length = 33635071, 1805=db-1805.log number = 1805 , length = 33554607, 1802=db-1802.log number = 1802 , length = 33580009, 1803=db-1803.log number = 1803 , length = 33554674, 1800=db-1800.log number = 1800 , length = 33567294, 1801=db-1801.log number = 1801 , length = 33819685, 1798=db-1798.log number = 1798 , length = 33971508, 1279=db-1279.log number = 1279 , length = 33554625, 1799=db-1799.log number = 1799 , length = 33630766, 1796=db-1796.log number = 1796 , length = 33651278, 1797=db-1797.log number = 1797 , length = 45623364, 1794=db-1794.log number = 1794 , length = 33666339, 1795=db-1795.log number = 1795 , length = 34512258, 1792=db-1792.log number = 1792 , length = 35143715, 1793=db-1793.log number = 1793 , length = 33776959} {noformat} {noformat:title=remote agents unable to send heartbeats} 2011-10-10 09:55:43,655 INFO [QuartzScheduler_Worker-9] [AgentHeartBeatJob] Not sending a new heartbeat since an old one is still being sent, last successful transmission time was 13 seconds ago, dropping the current heartbeat... 2011-10-10 10:05:43,655 INFO [QuartzScheduler_Worker-6] [AgentHeartBeatJob] Not sending a new heartbeat since an old one is still being sent, last successful transmission time was 7 seconds ago, dropping the current heartbeat.. {noformat} Likely caused by these ActiveMQ Issues: https://issues.apache.org/jira/browse/AMQ-3310 or: https://issues.apache.org/jira/browse/AMQ-3470 Reported internally in: https://extranet.atlassian.com/jira/browse/BUILDENG-649 https://extranet.atlassian.com/jira/browse/BUILDENG-651 The JMS spam caused the server logs to roll over so I was unable to capture the beginning of the problem. Confirmed server side that {{db-1782.log}} in the JMS repo was not present",2 +BAM-9957,"Scheduled backup fails randomly while expiration is running at the same time.","As reported in https://support.atlassian.com/browse/BSP-5570 We should provide a check: - backup should wait for running expiration to finish - expiration should wait for running backup to finish",3 +BAM-9976,"Bamboo AMPS setup should hit the updateDefaultsLocalCapability link after import","Its an absolute pain when developing amps plugins because everytime bamboo starts up it doesn't have and jdk's or executables set up. If it could click the updateDefaultsLocalCapability action after import, all this stuff would get pulled in from your local environment.",2 +BAM-10038,"POMs from 3.3.2 Source code released to customers is still using ""3.3-SNAPSHOT""","POMs from 3.3.2 Source code released to customers is still using ""3.3-SNAPSHOT"".",1 +BAM-10054,"Streams 5 aggregation for Studio","Chai knows more about this than I do. Ill get him to comment here.",1 +BAM-10057,"Icons in Currently Building list are cut off",NULL,1 +BAM-10058,"Test summary should show how many tests have been Quarentined (if any)",NULL,1 +BAM-10059,"Different table for Quarantined test results on Result Summary",NULL,2 +BAM-10060,"Quarantine table on Tests tab should have column to show which user quarantined the test",NULL,2 +BAM-10061,"Button for enabling and disabling a test in Quarantine on the Result summary",NULL,1 +BAM-10062,"Make test Quarantine work for all Tasks that have support for Tests",NULL,1 +BAM-10063,"Styling for new combined Plan Status and History Navigator",NULL,3 +BAM-10064,"Improved email templates","Merge in email work from ShipIt. Test across common email clients (using [http://litmus.com] would make this a lot quicker). Polish the designs. Screenshots of the new (already done) emails: !https://img.skitch.com/20111028-ca1jwycmp9ph2aytuwi2jwiigm.jpg! !https://img.skitch.com/20111028-8fg75bbkucqw618pt7qu9qtndx.jpg!",2 +BAM-10089,"Improvements to EBS mounting","Includes support for Windows.",5 +BAM-10090,"Indexing problem in table USER_COMMIT because of column COMMIT_REVISION text type","This error happens because the column COMMIT_REVISION in the table USER_COMMIT is set to TEXT, {code} 2011-10-24 12:06:05,071 ERROR [main] [SchemaUpdate] Unsuccessful: create index commit_rev_idx on USER_COMMIT (COMMIT_REVISION) 2011-10-24 12:06:05,071 ERROR [main] [SchemaUpdate] BLOB/TEXT column 'COMMIT_REVISION' used in key specification without a key length {code} There is a limitation on indexing [TEXT type fields|http://stackoverflow.com/questions/1827063/mysql-error-key-specification-without-a-key-length]. As [this post|http://forums.mysql.com/read.php?98,37000,37052] states, we can have VARCHAR type with maximum 65,532 bytes after MySQL 5.0.3. We should change the column type from TEXT to VARCHAR.",2 +BAM-10092,"Bamboo 3.3 does not respect @RequiresRestart ","I tried bumping UPM to support Bamboo 3.3 from 3.1, and we got some failing tests with regards to the tests of the @RequiresRestart. Everything worked in Bamboo 3.1, but there's something wrong in Bamboo 3.3. Note that this only happens when I'm installing a new plugin with a module that requires restart. But it works as expected when ""upgrading"" a plugin (i.e., @RequiresRestart is honored)",3 +BAM-10094,"Newer Bamboo versions are not shipping the svnkit for the jsvn script.","Bamboo 3.3.X versions are not being shipped with all the svnkit necessary for the jsvn app. Currently, only svnkit-cli-1.2.1.5297.jar is available at /scripts/lib. However, svnkit-1.2.1.5297.jar is also necessary. Since the svnkit lib is missing, the following exception is reported when running jsvn: {code} Exception in thread ""main"" java.lang.NoClassDefFoundError: org/tmatesoft/svn/core/SVNException org.tmatesoft.svn.cli.SVN.main(SVN.java:22) Caused by: java.lang.ClassNotFoundException: org.tmatesoft.svn.core.SVNException java.net.URLClassLoader$1.run(URLClassLoader.java:202) java.security.AccessController.doPrivileged(Native Method) java.net.URLClassLoader.findClass(URLClassLoader.java:190) java.lang.ClassLoader.loadClass(ClassLoader.java:306) sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 1 more {code}",1 +BAM-10095,"An administrator should be able to enable or disable Agent Authentication",NULL,2 +BAM-10096,"An administrator must be able to approve an agent when it connects for the first time",NULL,3 +BAM-10097,"An administrator should be able to provide a wild card mask to validate an agents IP address",NULL,1 +BAM-10100,"An administrator should be given the appropriate directions in the Agent log to approve the agent if it is not approved",NULL,1 +BAM-10101,"An administrator should be provided a way to approve all connected agents","* Should have a confirm screen so the admin can review the agents about to be approved",1 +BAM-10104,"Repository Isolation not available via the UI in Bamboo 3.3","Followed documentation to configure repository isolation: http://confluence.atlassian.com/display/BAMBOO/Configuring+Repository+Isolation+for+Maven+Executables but it doesn't seem to be present for Maven 2/3 builder",1 +BAM-10105,"Can't access artifacts due to permission error",NULL,2 +BAM-10106,"An administrator should be able to auto accept connected agents that are connected when the agent auth is enabled",NULL,1 +BAM-10107,"An administrator should be able to revoke approved keys",NULL,1 +BAM-10108,"Merge and add Functional test for Agent Authentication",NULL,2 +BAM-10171,"HelpPathResolver shouldn't throw an NPE when called with a null argument","During BAM-10121, I noticed: HelpPathResolverTest#helpPathResolverAcceptsNullKey fails with an NPE. To reproduce: * In CtkIntegrationTest, remove 'excludes' * Execute it. When this issue is resolved, you need to remove the exclusion from the Ctk test.",1 +BAM-10178,"Validate and properly used repository name on Plan create wizard",NULL,1 +BAM-10202,"Failed build email should include build errors iff only one Job failed and no tests failed","We should show the ""Build Errors"" iff only one Job failed, like the UI At the moment one has to click through to determine why the build failed.",1 +BAM-10254,"CSS images do not load after base url changes",NULL,2 +BAM-10344,"User can override Plan Branch Build Strategy",NULL,2 +BAM-10354,"Update breadcrumbs ",NULL,2 +BAM-10355,"Tabbed content re-design",NULL,4 +BAM-10356,"New Plan Navigator","Stages and Job list only ",1 +BAM-10357,"New Navigation Sidebar Layout","New layout for the sidebar ",2 +BAM-10358,"New Branch List Component","Needs to work on: * Plan Summary * Plan Configuration (sidebar) * Branch Selector Drop-down ",3 +BAM-10359,"Non-Tabbed content re-design",NULL,2 +BAM-10360,"New Plan Statistics component",NULL,1 +BAM-10361,"Update Status Ribbon for new UI",NULL,1 +BAM-10362,"Global Admin Re-Design","Chrome and navigation bar changes ",4 +BAM-10426,"Event Listeners",NULL,2 +BAM-10427,"Build Process plugin points",NULL,2 +BAM-10429,"SAL Plugin","Should branches be considered a ""Project""",1 +BAM-10430,"Random config changes to master dont cause branch to blow up",NULL,3 +BAM-10438,"Functional test TestReportingTest tests are not being run and must be updated for the new source repository code","As above, TestReportingTest is not being run in the CI tests. It still uses all the old source repo code so must be updated before it is re-included.",2 +BAM-10503,"Remote triggering for branches","Triggering the Master plan should also trigger the relevent child plans",1 +BAM-10577,"Bamboo page constantly refreshes","Note: this actually affects {{3.4-rc2}} on CBAC. https://confluence-bamboo.atlassian.com/browse/CONFREL-CONFRELSTABLESTUDIO-22 It only kept refreshing the page while the build was scheduled to run and had no log output.",1 +BAM-10613,"Validation for when the default repository is changed on a Plan with Plan Branches","What happens to the branches when the repository changes to a repository that does not contain the same branches or does not support Plan Branches at all? We need PM input for this.",2 +BAM-10651,"Html email show as text after gmail rewrites email","In any circumstance where gmail actually rewrites the email content e.g. to distribute to group members. It will rewrite the mulipart parts in an incorrect order, resulting in the html part being first instead of last. We have tracked this down to a superfluous part which atlassian-mail adds to the top of the emails. When removed the emails get rewriten correctly. ",2 +BAM-10656,"NPE in bamboo sandbox plugin","java.lang.NullPointerException com.atlassian.sandbox.bamboo.SandboxContext.isEnabled(SandboxContext.java:151) com.atlassian.sandbox.bamboo.actions.SandboxPreChainAction.execute(SandboxPreChainAction.java:21) com.atlassian.bamboo.chains.ChainPluginSupportImpl$1.run(ChainPluginSupportImpl.java:83) com.atlassian.bamboo.variable.CustomVariableContextRunnerImpl.execute(CustomVariableContextRunnerImpl.java:27) com.atlassian.bamboo.chains.ChainPluginSupportImpl.chainStarted(ChainPluginSupportImpl.java:71) com.atlassian.bamboo.chains.ChainExecutionManagerImpl.start(ChainExecutionManagerImpl.java:133) sun.reflect.GeneratedMethodAccessor264.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy73.start(Unknown Source) sun.reflect.GeneratedMethodAccessor264.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:198) $Proxy74.start(Unknown Source) com.atlassian.bamboo.plan.PlanExecutionManagerImpl.startWithLockTaken(PlanExecutionManagerImpl.java:249) com.atlassian.bamboo.plan.PlanExecutionManagerImpl.access$100(PlanExecutionManagerImpl.java:40) com.atlassian.bamboo.plan.PlanExecutionManagerImpl$1.call(PlanExecutionManagerImpl.java:236) com.atlassian.bamboo.plan.PlanExecutionManagerImpl$1.call(PlanExecutionManagerImpl.java:230) com.atlassian.util.concurrent.ManagedLocks$ManagedLockImpl.withLock(ManagedLocks.java:324) com.atlassian.bamboo.plan.PlanExecutionLockServiceImpl.lock(PlanExecutionLockServiceImpl.java:68) com.atlassian.bamboo.plan.PlanExecutionManagerImpl.doWithProcessLock(PlanExecutionManagerImpl.java:360) com.atlassian.bamboo.plan.PlanExecutionManagerImpl.start(PlanExecutionManagerImpl.java:229) com.atlassian.bamboo.v2.trigger.ChangeDetectionListener.handleEvent(ChangeDetectionListener.java:47) sun.reflect.GeneratedMethodAccessor231.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) com.atlassian.event.internal.SingleParameterMethodListenerInvoker.invoke(SingleParameterMethodListenerInvoker.java:36) com.atlassian.event.internal.AsynchronousAbleEventDispatcher$2.run(AsynchronousAbleEventDispatcher.java:60) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) com.atlassian.bamboo.build.pipeline.concurrent.NamedThreadFactory$2.run(NamedThreadFactory.java:50) java.lang.Thread.run(Thread.java:680)",1 +BAM-10677,"Bamboo executes all ""tries"", even if no new code is commited during the Quiet Period in Subversion","If no new commits are done during the Quite Period, Bamboo should not run one more try. However, even if no code is committed, Bamboo is always waiting the maximum number of tries: {code} 2012-01-19 19:54:29,054 INFO [qtp1761506447-530] [AccessLogFilter] 127.0.0.1 GET http://nastro-azzuro:8085/updateAndBuild.action?buildKey=MSFAADMIN-MAX 88578kb 2012-01-19 19:54:29,180 INFO [AtlassianEvent::0-BAM::EVENTS:pool-1-thread-2] [SvnRepository] Collecting changes for 'PROJ-MAX' on path 'https://svn.atlassian.com/svn/private/atlassian/bambootest/trunk/successBuild' from version 169163 to 169163 2012-01-19 19:54:29,191 INFO [AtlassianEvent::0-BAM::EVENTS:pool-1-thread-2] [DefaultChangeDetectionManager] Found one change for Plan 'PROJ-MAX', waiting 30 seconds to see if there are any more... (4 retries remaining) 2012-01-19 19:54:59,218 INFO [AtlassianEvent::0-BAM::EVENTS:pool-1-thread-2] [SvnRepository] Collecting changes for 'PROJ-MAX' on path 'https://svn.atlassian.com/svn/private/atlassian/bambootest/trunk/successBuild' from version 169163 to 169163 2012-01-19 19:54:59,231 INFO [AtlassianEvent::0-BAM::EVENTS:pool-1-thread-2] [DefaultChangeDetectionManager] Found one change for Plan 'PROJ-MAX', waiting 30 seconds to see if there are any more... (3 retries remaining) 2012-01-19 19:55:29,259 INFO [AtlassianEvent::0-BAM::EVENTS:pool-1-thread-2] [SvnRepository] Collecting changes for 'PROJ-MAX' on path 'https://svn.atlassian.com/svn/private/atlassian/bambootest/trunk/successBuild' from version 169163 to 169163 2012-01-19 19:55:29,272 INFO [AtlassianEvent::0-BAM::EVENTS:pool-1-thread-2] [DefaultChangeDetectionManager] Found one change for Plan 'PROJ-MAX', waiting 30 seconds to see if there are any more... (2 retries remaining) 2012-01-19 19:55:59,299 INFO [AtlassianEvent::0-BAM::EVENTS:pool-1-thread-2] [SvnRepository] Collecting changes for 'PROJ-MAX' on path 'https://svn.atlassian.com/svn/private/atlassian/bambootest/trunk/successBuild' from version 169163 to 169163 2012-01-19 19:55:59,313 INFO [AtlassianEvent::0-BAM::EVENTS:pool-1-thread-2] [DefaultChangeDetectionManager] Found one change for Plan 'PROJ-MAX', waiting 30 seconds to see if there are any more... (one retry remaining) 2012-01-19 19:56:29,342 INFO [AtlassianEvent::0-BAM::EVENTS:pool-1-thread-2] [SvnRepository] Collecting changes for 'PROJ-MAX' on path 'https://svn.atlassian.com/svn/private/atlassian/bambootest/trunk/successBuild' from version 169163 to 169163 2012-01-19 19:56:29,352 INFO [AtlassianEvent::0-BAM::EVENTS:pool-1-thread-2] [ChangeDetectionListenerAction] Change detection found 5 changes {code}",2 +BAM-10693,"Allow Bamboo to ignore commits with certain commit messages","This is a useful feature, but it's infrastructure to allow us to ignore merge commits by Bamboo.",3 +BAM-10706,"Official Support OpenJDK 1.7",NULL,2 +BAM-10804,"Dependencies for Plan Branches","Branches will trigger off dependencies of the child plan, iff the child plan has a branch name that exactly matches the branch. Configuration for this will be enabled in the Plan level's Branch configuration",3 +BAM-10841,"Tab label is wrong for Build Summary",NULL,1 +BAM-10870,"Detect Branches should show dialog where user can pick branches to create",NULL,5 +BAM-10882,"Branch variables page should have the key be a select list with optgroups for global vs plan",!https://extranet.atlassian.com/download/attachments/1964972659/branch_variables_add.png?version=1&modificationDate=1329107925466!,2 +BAM-10890,"NPE in Branch detection when timeout occurs","{noformat} 2012-02-14 10:05:31,489 WARN [StreamsCompletionService::thread-110] [ActivityProviderConnectionMonitorImpl$ActivityMonitorJob] Could not reach provider Your Company JIRA; it will be omitted from the stream. The connection will be retried in 5 minutes 2012-02-14 10:07:16,931 ERROR [1-BranchDetectionBackgroundThread:pool-4-thread-2] [BranchDetectionServiceImpl] Repository error while detecting branches for plan RAILS-RAILS. https://github.com/rails/rails.git: cannot open git-upload-pack com.atlassian.bamboo.repository.RepositoryException: https://github.com/rails/rails.git: cannot open git-upload-pack com.atlassian.bamboo.plugins.git.GitOperationHelper.getOpenBranches(GitOperationHelper.java:284) com.atlassian.bamboo.plugins.git.GitRepository.getOpenBranches(GitRepository.java:385) com.atlassian.bamboo.repository.RepositoryCachingFacade$1.load(RepositoryCachingFacade.java:31) com.atlassian.bamboo.repository.RepositoryCachingFacade$1.load(RepositoryCachingFacade.java:26) com.google.common.cache.CustomConcurrentHashMap$ComputingValueReference.compute(CustomConcurrentHashMap.java:3426) com.google.common.cache.CustomConcurrentHashMap$Segment.compute(CustomConcurrentHashMap.java:2322) com.google.common.cache.CustomConcurrentHashMap$Segment.getOrCompute(CustomConcurrentHashMap.java:2291) com.google.common.cache.CustomConcurrentHashMap.getOrCompute(CustomConcurrentHashMap.java:3802) com.google.common.cache.ComputingCache.get(ComputingCache.java:46) com.atlassian.bamboo.repository.RepositoryCachingFacade.getOpenBranches(RepositoryCachingFacade.java:49) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl.getOpenBranches(BranchDetectionServiceImpl.java:328) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl.createNewBranchesForChainNoLock(BranchDetectionServiceImpl.java:252) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl.access$200(BranchDetectionServiceImpl.java:50) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl$BranchDetector.run(BranchDetectionServiceImpl.java:168) com.atlassian.bamboo.build.pipeline.concurrent.NamedThreadFactory$2.run(NamedThreadFactory.java:50) java.lang.Thread.run(Thread.java:680) Caused by: org.shaded.eclipse.jgit.errors.TransportException: https://github.com/rails/rails.git: cannot open git-upload-pack org.shaded.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:466) org.shaded.eclipse.jgit.transport.TransportHttp.openFetch(TransportHttp.java:276) com.atlassian.bamboo.plugins.git.GitOperationHelper.getOpenBranches(GitOperationHelper.java:266) ... 15 more Caused by: java.net.SocketTimeoutException: Read timed out java.net.SocketInputStream.socketRead0(Native Method) java.net.SocketInputStream.read(SocketInputStream.java:129) com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293) com.sun.net.ssl.internal.ssl.InputRecord.readV3Record(InputRecord.java:405) com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:360) com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:830) com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:787) com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75) java.io.BufferedInputStream.fill(BufferedInputStream.java:218) java.io.BufferedInputStream.read1(BufferedInputStream.java:258) java.io.BufferedInputStream.read(BufferedInputStream.java:317) sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:695) sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:640) sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195) java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379) sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:318) org.shaded.eclipse.jgit.util.HttpSupport.response(HttpSupport.java:167) org.shaded.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:429) ... 17 more 2012-02-14 10:07:16,931 ERROR [1-BranchDetectionBackgroundThread:pool-4-thread-3] [BranchDetectionServiceImpl] Repository error while detecting branches for plan JOYENT-NODE. https://github.com/joyent/node.git: cannot open git-upload-pack com.atlassian.bamboo.repository.RepositoryException: https://github.com/joyent/node.git: cannot open git-upload-pack com.atlassian.bamboo.plugins.git.GitOperationHelper.getOpenBranches(GitOperationHelper.java:284) com.atlassian.bamboo.plugins.git.GitRepository.getOpenBranches(GitRepository.java:385) com.atlassian.bamboo.repository.RepositoryCachingFacade$1.load(RepositoryCachingFacade.java:31) com.atlassian.bamboo.repository.RepositoryCachingFacade$1.load(RepositoryCachingFacade.java:26) com.google.common.cache.CustomConcurrentHashMap$ComputingValueReference.compute(CustomConcurrentHashMap.java:3426) com.google.common.cache.CustomConcurrentHashMap$Segment.compute(CustomConcurrentHashMap.java:2322) com.google.common.cache.CustomConcurrentHashMap$Segment.getOrCompute(CustomConcurrentHashMap.java:2291) com.google.common.cache.CustomConcurrentHashMap.getOrCompute(CustomConcurrentHashMap.java:3802) com.google.common.cache.ComputingCache.get(ComputingCache.java:46) com.atlassian.bamboo.repository.RepositoryCachingFacade.getOpenBranches(RepositoryCachingFacade.java:49) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl.getOpenBranches(BranchDetectionServiceImpl.java:328) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl.createNewBranchesForChainNoLock(BranchDetectionServiceImpl.java:252) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl.access$200(BranchDetectionServiceImpl.java:50) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl$BranchDetector.run(BranchDetectionServiceImpl.java:168) com.atlassian.bamboo.build.pipeline.concurrent.NamedThreadFactory$2.run(NamedThreadFactory.java:50) java.lang.Thread.run(Thread.java:680) Caused by: org.shaded.eclipse.jgit.errors.TransportException: https://github.com/joyent/node.git: cannot open git-upload-pack org.shaded.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:466) org.shaded.eclipse.jgit.transport.TransportHttp.openFetch(TransportHttp.java:276) com.atlassian.bamboo.plugins.git.GitOperationHelper.getOpenBranches(GitOperationHelper.java:266) ... 15 more Caused by: java.net.SocketTimeoutException: Read timed out java.net.SocketInputStream.socketRead0(Native Method) java.net.SocketInputStream.read(SocketInputStream.java:129) com.sun.net.ssl.internal.ssl.InputRecord.readFully(InputRecord.java:293) com.sun.net.ssl.internal.ssl.InputRecord.readV3Record(InputRecord.java:405) com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:360) com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:830) com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:787) com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75) java.io.BufferedInputStream.fill(BufferedInputStream.java:218) java.io.BufferedInputStream.read1(BufferedInputStream.java:258) java.io.BufferedInputStream.read(BufferedInputStream.java:317) sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:695) sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:640) sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195) java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379) sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:318) org.shaded.eclipse.jgit.util.HttpSupport.response(HttpSupport.java:167) org.shaded.eclipse.jgit.transport.TransportHttp.connect(TransportHttp.java:429) ... 17 more 2012-02-14 10:07:16,933 INFO [1-BranchDetectionBackgroundThread:pool-4-thread-3] [BranchDetectionServiceImpl] [BRANCH_DETECTION] No branches for plan JOYENT-NODE found in VCS 2012-02-14 10:07:16,932 INFO [1-BranchDetectionBackgroundThread:pool-4-thread-2] [BranchDetectionServiceImpl] [BRANCH_DETECTION] No branches for plan RAILS-RAILS found in VCS 2012-02-14 10:07:16,937 ERROR [1-BranchDetectionBackgroundThread:pool-4-thread-3] [NamedThreadFactory] Uncaught exception in thread 1-BranchDetectionBackgroundThread:pool-4-thread-3 java.lang.NullPointerException com.google.common.base.Preconditions.checkNotNull(Preconditions.java:187) com.google.common.collect.Lists.newArrayList(Lists.java:117) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl.newBranches(BranchDetectionServiceImpl.java:339) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl.createNewBranchesForChainNoLock(BranchDetectionServiceImpl.java:283) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl.access$200(BranchDetectionServiceImpl.java:50) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl$BranchDetector.run(BranchDetectionServiceImpl.java:168) com.atlassian.bamboo.build.pipeline.concurrent.NamedThreadFactory$2.run(NamedThreadFactory.java:50) java.lang.Thread.run(Thread.java:680) 2012-02-14 10:07:16,939 ERROR [1-BranchDetectionBackgroundThread:pool-4-thread-2] [NamedThreadFactory] Uncaught exception in thread 1-BranchDetectionBackgroundThread:pool-4-thread-2 java.lang.NullPointerException com.google.common.base.Preconditions.checkNotNull(Preconditions.java:187) com.google.common.collect.Lists.newArrayList(Lists.java:117) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl.newBranches(BranchDetectionServiceImpl.java:339) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl.createNewBranchesForChainNoLock(BranchDetectionServiceImpl.java:283) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl.access$200(BranchDetectionServiceImpl.java:50) com.atlassian.bamboo.plan.branch.BranchDetectionServiceImpl$BranchDetector.run(BranchDetectionServiceImpl.java:168) com.atlassian.bamboo.build.pipeline.concurrent.NamedThreadFactory$2.run(NamedThreadFactory.java:50) java.lang.Thread.run(Thread.java:680) ^C2012-02-14 10:07:52,905 INFO [ActiveMQ ShutdownHook] [BrokerService] ActiveMQ Message Broker (bamboo, ID:shackle.sydney.atlassian.com-57424-1329086386684-0:1) is shutting down 2012-02-14 10:07:53,688 INFO [ActiveMQ ShutdownHook] [TransportConnector] Connector tcp://shackle.sydney.atlassian.com:54663?wireFormat.maxInactivityDuration=300000 Stopped 2012-02-14 10:07:53,696 INFO [ActiveMQ ShutdownHook] [TransportConnector] Connector vm://bamboo Stopped 2012-02-14 10:07:53,705 INFO [ActiveMQ ShutdownHook] [PListStore] PListStore:/Users/jdumay/bamboo-home/jms-store/bamboo/tmp_storage stopped 2012-02-14 10:07:53,705 INFO [ActiveMQ ShutdownHook] [KahaDBStore] Stopping async queue tasks 2012-02-14 10:07:53,705 INFO [ActiveMQ ShutdownHook] [KahaDBStore] Stopping async topic tasks 2012-02-14 10:07:53,705 INFO [ActiveMQ ShutdownHook] [KahaDBStore] Stopped KahaDB 2012-02-14 10:07:54,016 INFO [ActiveMQ ShutdownHook] [BrokerService] ActiveMQ JMS Message Broker (bamboo, ID:shackle.sydney.atlassian.com-57424-1329086386684-0:1) stopped {noformat}",1 +BAM-10903,"Include SSH example in shipped jetty.xml","Currently, user is unable to startup Bamboo server with jetty.xml due to the default setting being ship with Bamboo installation: {code} {code} Where the above tag should be: {code} {code} It will be great if we could change the above tag in the installation distribution before distribute to user. Lastly, it would be great if the default jetty.xml comes with SSL configuration as mentioned in the following documentation: * http://confluence.atlassian.com/display/BAMBOO/Running+Bamboo+over+HTTPS ",1 +BAM-10937,"Shallow clones should be disabled when integration is enabled","Merging won't work with shallow clones. We need to make sure that user is notified, agrees to disable it, cannot enable etc. Just disabling the shallow clones ""should work"", but needs to be tested.",3 +BAM-10940,"User reported as code updater not consistent in Bamboo e-mail notifications","Jared didn't change the code in Bonfire / for this BON BON BON build on JBAC. https://jira.bamboo.atlassian.com/browse/BON-BON-BON2DAC-409",2 +BAM-10945,"Author and Committer have to be made configurable (at least for Git)","Otherwise merges and commits won't work.",2 +BAM-10980,"Prettier handling of integration errors","The attached example is a short error, so it's almost readable. When we have merge conflicts, it's much worse.",2 +BAM-10997,"Validate that Task plugins without a view template do not make the Task unusable","We are no longer displaying the 'view' template for a Task. Check that its possible to create a Task without a view template (e.g. we do not validate that you need a 'view' template).",1 +BAM-11068,"Make first commit search asynchronous.",NULL,3 +BAM-11096,"Bamboo Git Plugin (native mode) shouldn't hang when using ssh protocol on windows.","Steps to reproduce: 1) grab a windows machine 2) install there minimal git: [http://code.google.com/p/msysgit/] 3) grab Bamboo 3.4.3 (I think this error will still occur on newer versions too) 4) set up a Plan that uses Git as repository and uses ssh:// protocol, for example: 4.1) url = ssh://git@github.com/atlassian/bamboo-git-plugin.git (use SSH keyfile as ""authentication type"" - set up your github account accordingly) 5) use the windows machine from point (1) as a remote agent, connect to bamboo 6) in bamboo administration - set up the remote agent to use Git capability (so it will use native-git checkout instead of jgit checkout) 7) run the plan 8a) observed behavior is that the build hangs at code checkout (possibly to localhost proxy-SSH fingerprint host key checking) 8b) while expected behavior is that the build will... build. from: [BSP-6565|https://support.atlassian.com/browse/BSP-6565] and: [https://answers.atlassian.com/questions/39371/ssh-port-on-git-repository-polling]",3 +BAM-11107,"Show X out of Y branches on Branch Creation dialog",NULL,1 +BAM-11108,"Disable buttons when creating branch.",NULL,1 +BAM-11116,"Integration Strategy UI is broken for longer field names",NULL,1 +BAM-11117,"Rename Integration Strategy to Merge Strategy",NULL,1 +BAM-11118,"Merge Strategy ""default"" should be labeled default",NULL,1 +BAM-11128,"Git revision not shown for plan","Bamboo fails to show the Git revision: !bamboo rev.png! This is on 4.0-m2 build 2903",2 +BAM-11129,"When a plan uses 2 repositories and you clone the plan and change one repository the other will often error out","See https://jira.bamboo.atlassian.com/browse/J50SHIPIT-ODAT-8 or https://jira.bamboo.atlassian.com/browse/J50SHIPIT-DTU-6 as an example of the error.",2 +BAM-11132,"""Run"" menu in configuration confusing","You can't tell if its going to run your branch or your plan. I have clicked on it incorrectly a couple of times now",1 +BAM-11170,"mvn:deploy a final version of all EC2 images on prod account before release",NULL,1 +BAM-11188,"HipChat build notifications",NULL,3 +BAM-11191,"Created issue should be linked in Bamboo","Issue created should show up in the ""Related Issues"" of a result.",2 +BAM-11195,"Import/Export for ActiveObjects","* time box this to 2 days * This is apparently straight forward to hookup according to Sam and Adrian * Backs up rows to xml ",3 +BAM-11250,"Improve AMI customisation process and documentation ","We need to run through the entire customisation process for both Linux and Windows and update the documentation to reflect the process. If we can write any scripts (and host them on bitbucket) that can improve EC2 customisation, we should do this. Currently its difficult to find out what version of bamboo-elastic-image you need - is it safe to always use the latest? How can the customer find this out? Please try the process out using the Ubuntu LTS to see if we can shake out any problems we do not see on CENTOS/Fedora",3 +BAM-11285,"Make all committers automatically responsible when build fails","Make all committers to a failing build responsible for the failure",1 +BAM-11287,"User can claim all responsibility for a build failure",NULL,1 +BAM-11599,"JIRA login screen displayed in dialog looks weird","I've created a reciprocal application link, clicked configure and got this.",2 +BAM-11600,"Rewrite JIRA issue details retrieval to use REST api not RSS.","[roots|https://atlaseye.atlassian.com/cru/CR-BAM-4183#CFR-219552] Currently we use RSS to retrieve details of an issue (their status, icon, etc) - the details visibile on Issue summary tab/panel. It just seems wrong, so we should rewrite it to use REST properly.",3 +BAM-11601,"Bamboo artifacts don't get collected if they are located into directories","{code} I created a file called ""as.zip"" located in directory ""a"" which is located in directory ""test"". I used ""test/a"" as Location, and I used ""*.zip"" as Copy Pattern - the same way as it is described in [this document|http://confluence.atlassian.com/display/BAMBOO40/Configuring+a+job%27s+build+artifacts]. {code} However, the artifact didn't get published.",1 +BAM-11602,"Bamboo sometimes kills processes not belonging to it on Windows",NULL,5 +BAM-11603,"Database deadlock in MySQL","From http://tardigrade.sydney.atlassian.com:8085/bamboo/browse/BDT-MYSQL-578/artifact/JOB1/Bamboo-Log/output.log But it could be related to what BEAC and JBACV sees occasionaly as well {code} 2012-05-06 15:39:19,181 INFO [AtlassianEvent::0-BAM::EVENTS:pool-2-thread-13] [ChainExecutionManagerImpl] Plan RAN119295352-MAIN1192953520-3: Random Project119295352 - Plan119295352 - branch_no_1 has finished executing 2012-05-06 15:39:19,221 INFO [11-BAM::Test Agent 1::Agent:pool-18-thread-1] [CvsRepositoryManager] Getting list of commits for Tue Jan 31 15:39:07 UTC 2012 2012-05-06 15:39:19,296 INFO [http-9087-Processor18] [CvsRepositoryManager] Getting list of commits for Sun Nov 27 15:39:02 UTC 2011 2012-05-06 15:39:19,468 WARN [AtlassianEvent::0-BAM::EVENTS:pool-2-thread-13] [JDBCExceptionReporter] SQL Error: 1213, SQLState: 40001 2012-05-06 15:39:19,468 ERROR [AtlassianEvent::0-BAM::EVENTS:pool-2-thread-13] [JDBCExceptionReporter] Deadlock found when trying to get lock; try restarting transaction 2012-05-06 15:39:19,483 WARN [AtlassianEvent::0-BAM::EVENTS:pool-2-thread-13] [JDBCExceptionReporter] SQL Error: 1213, SQLState: 40001 2012-05-06 15:39:19,483 ERROR [AtlassianEvent::0-BAM::EVENTS:pool-2-thread-13] [JDBCExceptionReporter] Deadlock found when trying to get lock; try restarting transaction 2012-05-06 15:39:19,484 ERROR [AtlassianEvent::0-BAM::EVENTS:pool-2-thread-13] [SessionImpl] Could not synchronize database state with session 2012-05-06 15:39:19,588 INFO [AtlassianEvent::0-BAM::EVENTS:pool-2-thread-13] [BrokenBuildPostProcessor] RAN119295352-MAIN1192953520-3 was rerun and still failed. Tracking entry not updated. Rerun builds not currently supported 2012-05-06 15:39:19,605 INFO [http-9087-Processor14] [AccessLogFilter] admin GET http://localhost:9087/bamboo/start.action 239259kb 2012-05-06 15:39:19,619 INFO [http-9087-Processor14] [AccessLogFilter] admin GET http://localhost:9087/bamboo/legacyDashboard.action 238856kb 2012-05-06 15:39:19,752 INFO [11-BAM::Test Agent 1::Agent:pool-18-thread-1] [CvsRepositoryManager] Getting list of commits for Thu Jan 26 15:39:07 UTC 2012 2012-05-06 15:39:20,038 INFO [http-9087-Processor18] [CvsRepositoryManager] Getting list of commits for Tue Nov 22 15:39:02 UTC 2011 2012-05-06 15:39:20,113 INFO [AtlassianEvent::0-BAM::EVENTS:pool-2-thread-13] [DashboardCacheListener] event: com.atlassian.bamboo.event.ChainCompletedEvent[source=com.atlassian.bamboo.chains.ChainExecutionManagerImpl@1d5ba63] plan=RAN119295352-MAIN1192953520 2012-05-06 15:39:20,198 INFO [AtlassianEvent::0-BAM::EVENTS:pool-2-thread-13] [DashboardCachingManagerImpl] Plan cache updated for 1 plans in 0:00:00.018 2012-05-06 15:39:20,204 INFO [AtlassianEvent::0-BAM::EVENTS:pool-2-thread-14] [DependencyChainListener] Dependant builds not checked since plan is not a master plan 2012-05-06 15:39:20,206 ERROR [AtlassianEvent::0-BAM::EVENTS:pool-2-thread-13] [NamedThreadFactory] Uncaught exception in thread AtlassianEvent::0-BAM::EVENTS:pool-2-thread-13 org.springframework.dao.ConcurrencyFailureException: Hibernate operation: Could not execute JDBC batch update; SQL []; Deadlock found when trying to get lock; try restarting transaction; nested exception is java.sql.BatchUpdateException: Deadlock found when trying to get lock; try restarting transaction Caused by: java.sql.BatchUpdateException: Deadlock found when trying to get lock; try restarting transaction com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1998) com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1443) com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeBatch(NewProxyPreparedStatement.java:1723) net.sf.hibernate.impl.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:54) net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:128) net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2436) net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2391) net.sf.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1819) net.sf.hibernate.impl.SessionImpl.find(SessionImpl.java:3650) net.sf.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:238) net.sf.hibernate.impl.CriteriaImpl.uniqueResult(CriteriaImpl.java:385) com.atlassian.bamboo.resultsummary.BuildResultsSummaryHibernateDao$29.doInHibernate(BuildResultsSummaryHibernateDao.java:1082) org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:370) org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:337) com.atlassian.bamboo.resultsummary.BuildResultsSummaryHibernateDao.findFirstResultAfter(BuildResultsSummaryHibernateDao.java:1078) sun.reflect.GeneratedMethodAccessor983.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy41.findFirstResultAfter(Unknown Source) com.atlassian.bamboo.resultsummary.BuildResultsSummaryManagerImpl.findFirstResultAfter(BuildResultsSummaryManagerImpl.java:1120) sun.reflect.GeneratedMethodAccessor982.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) com.atlassian.bamboo.security.acegi.intercept.aopalliance.AuthorityOverrideMethodSecurityInterceptor.invoke(AuthorityOverrideMethodSecurityInterceptor.java:29) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy43.findFirstResultAfter(Unknown Source) com.atlassian.bamboo.plan.PlanStatePersisterImpl.checkAndUpdateDeltaStatesOfFollowingBuild(PlanStatePersisterImpl.java:232) com.atlassian.bamboo.plan.PlanStatePersisterImpl.persistChainState(PlanStatePersisterImpl.java:172) sun.reflect.GeneratedMethodAccessor981.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) com.atlassian.bamboo.author.AuthorCreatorServiceInterceptor.invoke(AuthorCreatorServiceInterceptor.java:45) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy55.persistChainState(Unknown Source) com.atlassian.bamboo.plan.PlanStatePersisterServiceImpl$3.run(PlanStatePersisterServiceImpl.java:62) com.atlassian.util.concurrent.ManagedLocks$ManagedLockImpl.withLock(ManagedLocks.java:333) com.atlassian.bamboo.plan.PlanStatePersisterServiceImpl.persistChainState(PlanStatePersisterServiceImpl.java:58) com.atlassian.bamboo.chains.ChainExecutionManagerImpl.finaliseChainStateIfChainExecutionHasCompleted(ChainExecutionManagerImpl.java:894) com.atlassian.bamboo.chains.ChainExecutionManagerImpl.access$400(ChainExecutionManagerImpl.java:88) com.atlassian.bamboo.chains.ChainExecutionManagerImpl$1.run(ChainExecutionManagerImpl.java:443) com.atlassian.util.concurrent.ManagedLocks$ManagedLockImpl.withLock(ManagedLocks.java:333) com.atlassian.bamboo.chains.ChainExecutionManagerImpl.execute(ChainExecutionManagerImpl.java:361) com.atlassian.bamboo.chains.ChainExecutionManagerImpl.access$1300(ChainExecutionManagerImpl.java:88) com.atlassian.bamboo.chains.ChainExecutionManagerImpl$2.run(ChainExecutionManagerImpl.java:491) com.atlassian.util.concurrent.ManagedLocks$ManagedLockImpl.withLock(ManagedLocks.java:333) com.atlassian.bamboo.chains.ChainExecutionManagerImpl.handleEvent(ChainExecutionManagerImpl.java:471) sun.reflect.GeneratedMethodAccessor688.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) org.springframework.orm.hibernate.HibernateInterceptor.invoke(HibernateInterceptor.java:117) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy82.handleEvent(Unknown Source) sun.reflect.GeneratedMethodAccessor688.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) org.springframework.orm.hibernate.HibernateInterceptor.invoke(HibernateInterceptor.java:117) org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) $Proxy83.handleEvent(Unknown Source) com.atlassian.event.legacy.LegacyListenerHandler$LegacyListenerInvoker.invoke(LegacyListenerHandler.java:55) com.atlassian.bamboo.event.spi.EventInvokerRunnable.run(EventInvokerRunnable.java:23) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) com.atlassian.bamboo.build.pipeline.concurrent.NamedThreadFactory$2.run(NamedThreadFactory.java:50) java.lang.Thread.run(Thread.java:662) {code}",5 +BAM-11604,"ViewAgent action slow when there's a lot of data","ViewAgent action slow when there's a lot of data (either in ""Offline Remote Agents"" or in ""Elastic Agent History""). Most probably missing DB index. ",3 +BAM-11607,"Create reciprocal link from JIRA to Bamboo when manually linking result to issue","* Creating a manual link is done from the issues tab * Instead of ""Created from"" use ""Linked from""",1 +BAM-11608,"Create reciprocal link from JIRA to Bamboo when manually linking result to issue","* Creating a manual link is done from the issues tab * Instead of ""Created from"" use ""Linked from""",1 +BAM-11609,"Some reponsibility not being shown on the Wallboard","http://tardigrade.sydney.atlassian.com:8085/bamboo/browse/BDT-PGQSL-573 has Przemek as responsible but the Wallboard doesn't show him. Needs to investigate.",2 +BAM-11624,"Show X lines of logs on the error log summary if no error log summary has been set",NULL,1 +BAM-11626,"Notification when responsibility is manually changed","* Add notification for when the responsibility changes * only fire when humans make the change (not when Bamboo assigns responsibility) * Name ""Change in Responsibilities"" * Should have the failure colouring and status * Check the IM text * Remove the notifications enabled/disabled for Responsibilities out of the admin and the build admin. You have been made responsible for this build X has been made responsible for this build / X has been made not responsible for this build",2 +BAM-11627,"Add Linked JIRA Issue should be shown in dialog","* Add to Actions menu * Under Create Issue * Group Create and Link issue together * remove the ability to set a type",1 +BAM-11628,"Add Linked JIRA Issue should be shown in dialog","* Add to Actions menu * Under Create Issue * Group Create and Link issue together * remove the ability to set a type",1 +BAM-11629,"Keyboard shortcut for create issue","Pressing C then I on a result summary should show the create issue for build dialog",1 +BAM-11630,"Make HipChat plugin work for change in responsibilities notification type","And possibly make it more extensible in general so we dont have to edit the plugin for every notification type? i.e could it just use the IM content? - Maybe if we only send html IMs",1 +BAM-11631,"Going directly to Bamboo's configureGlobalPermissions.action erases all permissions","Create a user and give them access to use restricted admin in Bamboo. As that user go directly to the path: /builds/build/admin/configureGlobalPermissions.action If you refresh the page or go to the view page, you won't have any permissions to do that because they will have been erased. Effect: Data loss (in the form of who can do what), DoS (people can't use Bamboo), support costs (fixing it will be a PITA for our supporters). This was first picked up in OnDemand, but I think it is a bamboo + webwork problem. Tim Moore was able to reproduce this on a bamboo 4 standalone instance.",2 +BAM-11632,"Null environment variable values prevent builds from running","{noformat} com.atlassian.bamboo.task.TaskException: Failed to execute task at com.atlassian.bamboo.plugins.maven.task.Maven3BuildTask.execute(Maven3BuildTask.java:110) at com.atlassian.bamboo.task.TaskExecutorImpl.executeTasks(TaskExecutorImpl.java:180) at com.atlassian.bamboo.task.TaskExecutorImpl.execute(TaskExecutorImpl.java:88) at com.atlassian.bamboo.build.pipeline.tasks.ExecuteBuildTask.call(ExecuteBuildTask.java:84) at sun.reflect.GeneratedMethodAccessor510.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149) at org.springframework.orm.hibernate.HibernateInterceptor.invoke(HibernateInterceptor.java:117) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at $Proxy563.call(Unknown Source) at com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent.build(DefaultBuildAgent.java:202) at com.atlassian.bamboo.v2.build.agent.BuildAgentControllerImpl.waitAndPerformBuild(BuildAgentControllerImpl.java:103) at com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent$1.run(DefaultBuildAgent.java:109) at com.atlassian.bamboo.build.pipeline.concurrent.NamedThreadFactory$2.run(NamedThreadFactory.java:50) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.NullPointerException at java.lang.ProcessEnvironment.validateValue(ProcessEnvironment.java:102) at java.lang.ProcessEnvironment.access$400(ProcessEnvironment.java:44) at java.lang.ProcessEnvironment$Value.valueOf(ProcessEnvironment.java:185) at java.lang.ProcessEnvironment$StringEnvironment.put(ProcessEnvironment.java:224) at java.lang.ProcessEnvironment$StringEnvironment.put(ProcessEnvironment.java:203) at java.util.AbstractMap.putAll(AbstractMap.java:256) at com.atlassian.utils.process.ExternalProcess.createProcess(ExternalProcess.java:237) at com.atlassian.utils.process.ExternalProcess.start(ExternalProcess.java:283) at com.atlassian.utils.process.ExternalProcess.execute(ExternalProcess.java:408) at com.atlassian.bamboo.process.ProcessServiceImpl.executeProcess(ProcessServiceImpl.java:176) at sun.reflect.GeneratedMethodAccessor951.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.atlassian.plugin.osgi.hostcomponents.impl.DefaultComponentRegistrar$ContextClassLoaderSettingInvocationHandler.invoke(DefaultComponentRegistrar.java:129) at $Proxy141.executeProcess(Unknown Source) at sun.reflect.GeneratedMethodAccessor951.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.atlassian.plugin.osgi.bridge.external.HostComponentFactoryBean$DynamicServiceInvocationHandler.invoke(HostComponentFactoryBean.java:154) at $Proxy141.executeProcess(Unknown Source) at com.atlassian.bamboo.plugins.maven.task.Maven3BuildTask.execute(Maven3BuildTask.java:75) ... 18 more {noformat} We should probably change nulls to empty strings in ProcessUtils whenever ProcessBuilder.environment().put/putAll() is called.",1 +BAM-11938,"Exception on My Bamboo -> My Broken Plans","Seen on Tardigrade {code} Error in action: com.atlassian.bamboo.brokenbuildtracker.ui.ViewResponsibilitiesForUser@20674f89 Expression fn.hasPlanPermission('BUILD', build) is undefined on line 89, column 10 in fragments/plan/displayBuildPlansList.ftl. The problematic instruction: ---------- ==> if fn.hasPlanPermission('BUILD', build) [on line 89, column 5 in fragments/plan/displayBuildPlansList.ftl] in user-directive displayPlanListOperations [on line 77, column 13 in fragments/plan/displayBuildPlansList.ftl] in user-directive planList.displayBuildPlansList [on line 4, column 5 in panels/myResponsibilities.ftl] ---------- Java backtrace for programmers: ---------- freemarker.core.InvalidReferenceException: Expression fn.hasPlanPermission('BUILD', build) is undefined on line 89, column 10 in fragments/plan/displayBuildPlansList.ftl. at freemarker.core.TemplateObject.assertNonNull(TemplateObject.java:124) at freemarker.core.Expression.isTrue(Expression.java:145) at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:77) at freemarker.core.Environment.visit(Environment.java:210) at freemarker.core.MixedContent.accept(MixedContent.java:92) at freemarker.core.Environment.visit(Environment.java:210) at freemarker.core.Macro$Context.runMacro(Macro.java:183) at freemarker.core.Environment.visit(Environment.java:603) at freemarker.core.UnifiedCall.accept(UnifiedCall.java:118) at freemarker.core.Environment.visit(Environment.java:210) at freemarker.core.MixedContent.accept(MixedContent.java:92) at freemarker.core.Environment.visit(Environment.java:210) at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:167) at freemarker.core.Environment.visit(Environment.java:417) at freemarke {code}",1 +BAM-11939,"Mismatch between 'merged' status of XML and BuildDefinition","Causes 'build definition snapshot' problem - the build definition is no longer taken from the master chain.",3 +BAM-11950,"Combine ""Automatic Detection"" and ""Automatic removal"" into a single ""Automatically manage branches"" feature","* Implement mockup (see attached) ** For Subversion, the branches root section should still be at the top of the screen! * heading ""Automatic Branch Detection"" change to ""Automatically Manage branches"" ** Description ""Bamboo will automatically manage the creation of new branches when Bamboo detects a new branch in your version control system and the removal of the branch from Bambooo after a specified period of inactivity. Detection of new branches runs every 5 minutes."" ** ""Enabled checkbox"" becomes ""Automatically manage branches"" * Remove after ""Enabled"" checkbox is removed and remove after becomes part of the same section as ""Automatically manage branches"" * Remove after description ""Branches will be automatically removed after a specified period if no commits to the VCS branch have been made. You can exclude individual Branches on their Branch Details pages. Branches will not be removed from your Version Control System and cleanup runs daily at 3am."" * Create an upgrade task to disable automatic removal if the automatically manage branches checkbox is disabled. ** Since enabling automatic creation and automatic removal will be combined, it wont be possible to enable, disable or change the automatic removal value * Move ""Notifications"" section to the very bottom of the page * If the expiry is zero, do not expire branches ",2 +BAM-11952,"Create Branch error handling looks broken","\The spinner will continue to spin, and the error message sits weird.",1 +BAM-11956,"Get more tasks link on task browser is broken","* File a bug with AMKT (ecosystem.atlassian.net) for the broken link * Directly to category https://marketplace.atlassian.com/plugins/app/bamboo/popular?category=Bamboo+Tasks",1 +BAM-12037,"A user can manually link any branch to any issue.","* Handle situations where the manual linking was wrong or didn't work * Link the branch to an issue if there is not one already set * Remove the issue that is linked to the branch * Should be only be able to link to ONE issue * Field should go on Branch details ",2 +BAM-12285,"Improve the UX of the custom build dialog","!https://extranet.atlassian.com/download/attachments/2013305598/run-with-revision.png?modificationDate=1343797439081&effects=border-simple,blur-border! * An empty text input should mean that we will use the latest revision. * In this dialog we should re-use the same Variables widget that we use to override variables in the Branch config and NOT the one from JBAM. * the inline overriding of Stages: We already have this in the current dialog (hidden in a tab) - all we are doing is moving all of the operations onto a single screen. * What do we want to do if there's a long list of stages? Anything? Just scroll? Maybe switch the order of the fields around? -> For the moment, we should just scroll. * You can only specify revisions for the default repository (for the moment) ",2 +BAM-12286,"Pass the revision to build via REST","Ask James what he had exactly on mind. Was it about ""queue"" resource to accept additional parameter like ""customRevision""? I envisioned that this (or similar) issue will be done as a part of BDEV-1082 anyway... ",1 +BAM-12287,"Ensure that once off builds are clearly differentiated from normal builds"," !https://extranet.atlassian.com/download/attachments/2013305598/buildtypes-result-summary.png?version=1&modificationDate=1346118879586&effects=border-simple,blur-border! !https://extranet.atlassian.com/download/attachments/2013305598/buildtypes-result-list.png?version=1&modificationDate=1346119274450&effects=border-simple,blur-border! !https://extranet.atlassian.com/download/attachments/2013305598/buildtypes-summary.png?version=1&modificationDate=1346118918062&effects=border-simple,blur-border!",2 +BAM-12288,"Bundle Heroku plugin into Bamboo","* We need a plan to test the plugin on our Bamboo server (it has tests) * Bundle into download and OnDemand",2 +BAM-12384,"Allow ""re-running this build"" without triggering dependant child-plans.","!https://extranet.atlassian.com/download/attachments/2013305598/rerun-this-build-menu.png?version=2&modificationDate=1343795054858&effects=border-simple,blur-border! * User may only want to re-run the single plan without triggering dependant builds. * When you click re-run this build a dialog should popup * Checkbox to disable the dependencies ** ""Disable building dependencies""",2 +BAM-12388,"Doc pages that need updating","https://developer.atlassian.com/display/REST/_Version+Compatibility+for+REST+Plugin https://developer.atlassian.com/display/SAL/_Version+Compatibility+for+Shared+Access+Layer",1 +BAM-14118,"Add the MSTest Agent to stock Windows Elastic Image","The MS Test command line utility is very useful for running Microsoft Framework Unit Test. By utilizing the MS Test Agent installer, you do not have to fully install Visual Studio on the elastic image. This can allow folks to utilize MS Test on the Elastic Images without having to customize and AMI. [MS Test Agent 2010|http://www.microsoft.com/en-us/download/details.aspx?id=1334] [MS Test Agent 2012|http://www.microsoft.com/en-us/download/details.aspx?id=38186] Notes and comments from the support team are located here: [https://support.atlassian.com/browse/JST-70692]",3 diff --git a/Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/clover.csv b/Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/clover.csv new file mode 100644 index 0000000..d74a836 --- /dev/null +++ b/Anul 3/Semestrul 1/Proiect Colectiv/StoryPointEstimator/data/clover.csv @@ -0,0 +1,385 @@ +issuekey,title,description,storypoint +CLOV-1086,"Line coverage data is inconsistent","I'm running 2.4.1 on IDEA 7 and get inconsistent line and branch coverage in the editor: every line that is hit by the a test always gets ""1"" as the hitcount. ",2 +CLOV-379,"Surefire classpath is incorrect when depending on a jar and a test-jar from the same maven module","We have two different applications that have the same symptom. Their test cases work properly when executed without clover, but when we run them with clover, they fail because classes or resource files are missing from the classpath. When running the builds with clover, the test cases are executed multiple times. Only the last time they run they fail. When checking the maven debug output (using the -X option), I found that the last time the test cases are run, a JAR file is missing from the classpath. With both applications it is a jar file from a maven module for which we both depend on the jar and test-jar types of the module. For example we have the following in the pom.xml file: ${parent.groupId} server-data-access ${version} test-jar test ${parent.groupId} server-data-access ${version} And for some reason, when the test cases are executed for the last time, the following second dependency is not included in the list of jars in the classpath. I have attached the pom.xml files from the module for which the test cases fail (server-web.pom), the pom.xml files from its parents, the pom.xml file for the module that generates both a jar and a test-jar (server-data-access.pom) and the log file that I get when running maven with the -X option. This is the classpath when the test cases fail (notice that /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-data-access/target/server-data-access-1.0.2-SNAPSHOT.jar is missing): build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-web/target/test-classes build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-web/target/classes build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/xml-apis/xml-apis/1.3.04/xml-apis-1.3.04.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-model/target/server-model-1.0.2-SNAPSHOT.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/commons-lang/commons-lang/2.1/commons-lang-2.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-actions/target/server-actions-1.0.2-SNAPSHOT.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/log4j/log4j/1.2.13/log4j-1.2.13.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/util/8.19.0/util-8.19.0.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/tk-util/8.19.0/tk-util-8.19.0.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/jboss/netty/netty/3.0.0.GA/netty-3.0.0.GA.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/springframework/spring/2.5.6/spring-2.5.6.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-core/target/server-core-1.0.2-SNAPSHOT.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-data-access/target/server-data-access-1.0.2-SNAPSHOT-tests.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate/3.2.6.ga/hibernate-3.2.6.ga.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/commons-collections/commons-collections/2.1.1/commons-collections-2.1.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/antlr/antlr/2.7.6/antlr-2.7.6.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/cglib/cglib/2.1_3/cglib-2.1_3.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/asm/asm/1.5.3/asm-1.5.3.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-annotations/3.3.0.ga/hibernate-annotations-3.3.0.ga.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-commons-annotations/3.3.0.ga/hibernate-commons-annotations-3.3.0.ga.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-validator/3.0.0.ga/hibernate-validator-3.0.0.ga.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-search/3.0.0.GA/hibernate-search-3.0.0.GA.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/apache/lucene/lucene-core/2.2.0/lucene-core-2.2.0.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/drools/drools-core/4.0.7/drools-core-4.0.7.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/mvel/mvel/1.3.1-java1.4/mvel-1.3.1-java1.4.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/commons-io/commons-io/1.4/commons-io-1.4.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/javax/j2ee/1.3/j2ee-1.3.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/sun/xml/bind/jaxb-impl/2.1.3/jaxb-impl-2.1.3.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/javax/activation/activation/1.1/activation-1.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/common/common-configuration/1.0.25/common-configuration-1.0.25.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/opensymphony/oscache/2.1.1/oscache-2.1.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/bml-core/8.20.0-SNAPSHOT/bml-core-8.20.0-SNAPSHOT.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/cache/8.20.0-SNAPSHOT/cache-8.20.0-SNAPSHOT.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/common/common-spring-util/1.0.25/common-spring-util-1.0.25.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/esper/esper/2.2.0/esper-2.2.0.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/org/antlr/stringtemplate/3.1-b1/stringtemplate-3.1-b1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/quartz/quartz/1.5.2/quartz-1.5.2.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/mockrunner/mockrunner/0.3.1/mockrunner-0.3.1.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/common/common-abstract-unit-tests/1.0.25/common-abstract-unit-tests-1.0.25-tests.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/unittest/8.20.0-SNAPSHOT/unittest-8.20.0-SNAPSHOT.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-data-access/target/server-data-access-1.0.2-SNAPSHOT-tests.jar build 20-Nov-2008 08:47:57 [DEBUG] /opt/bamboo/.m2/repository/com/oracle/oracle_jdbc/10.2.0.2.0/oracle_jdbc-10.2.0.2.0.jar This is the classpath for when it succeeds: build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-web/target/test-classes build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-web/target/classes build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/xml-apis/xml-apis/1.3.04/xml-apis-1.3.04.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-model/target/server-model-1.0.2-SNAPSHOT.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/commons-lang/commons-lang/2.1/commons-lang-2.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-actions/target/server-actions-1.0.2-SNAPSHOT.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/log4j/log4j/1.2.13/log4j-1.2.13.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/util/8.19.0/util-8.19.0.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/tk-util/8.19.0/tk-util-8.19.0.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/jboss/netty/netty/3.0.0.GA/netty-3.0.0.GA.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/springframework/spring/2.5.6/spring-2.5.6.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-core/target/server-core-1.0.2-SNAPSHOT.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-data-access/target/server-data-access-1.0.2-SNAPSHOT.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate/3.2.6.ga/hibernate-3.2.6.ga.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/commons-collections/commons-collections/2.1.1/commons-collections-2.1.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/antlr/antlr/2.7.6/antlr-2.7.6.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/cglib/cglib/2.1_3/cglib-2.1_3.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/asm/asm/1.5.3/asm-1.5.3.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-annotations/3.3.0.ga/hibernate-annotations-3.3.0.ga.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-commons-annotations/3.3.0.ga/hibernate-commons-annotations-3.3.0.ga.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-validator/3.0.0.ga/hibernate-validator-3.0.0.ga.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/hibernate/hibernate-search/3.0.0.GA/hibernate-search-3.0.0.GA.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/apache/lucene/lucene-core/2.2.0/lucene-core-2.2.0.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/drools/drools-core/4.0.7/drools-core-4.0.7.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/mvel/mvel/1.3.1-java1.4/mvel-1.3.1-java1.4.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/commons-io/commons-io/1.4/commons-io-1.4.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/javax/j2ee/1.3/j2ee-1.3.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/sun/xml/bind/jaxb-impl/2.1.3/jaxb-impl-2.1.3.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/javax/xml/bind/jaxb-api/2.1/jaxb-api-2.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/javax/activation/activation/1.1/activation-1.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/common/common-configuration/1.0.25/common-configuration-1.0.25.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/opensymphony/oscache/2.1.1/oscache-2.1.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/bml-core/8.20.0-SNAPSHOT/bml-core-8.20.0-SNAPSHOT.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/cache/8.20.0-SNAPSHOT/cache-8.20.0-SNAPSHOT.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/common/common-spring-util/1.0.25/common-spring-util-1.0.25.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/esper/esper/2.2.0/esper-2.2.0.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/org/antlr/stringtemplate/3.1-b1/stringtemplate-3.1-b1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/quartz/quartz/1.5.2/quartz-1.5.2.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/mockrunner/mockrunner/0.3.1/mockrunner-0.3.1.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/common/common-abstract-unit-tests/1.0.25/common-abstract-unit-tests-1.0.25-tests.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/i4commerce/bml/unittest/8.20.0-SNAPSHOT/unittest-8.20.0-SNAPSHOT.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/Bamboo/xml-data/build-dir/MONITORING-NIGHTLY/monitoring-server/server-data-access/target/server-data-access-1.0.2-SNAPSHOT-tests.jar build 20-Nov-2008 08:45:07 [DEBUG] /opt/bamboo/.m2/repository/com/oracle/oracle_jdbc/10.2.0.2.0/oracle_jdbc-10.2.0.2.0.jar",2 +CLOV-1083,"Setting special instrumentation output dir to a source dir deletes all source!",NULL,1 +CLOV-579,"Add method/statement level instrumentation setting in project properties page ",NULL,1 +CLOV-582,"Make Test Run Explorer perform better and stop locking the UI thread",NULL,4 +CLOV-1085,"Message in Balloon after clean snapshot is bogus","# Clean shapshot # First Optimised test run the balloon message is ok (see CIJ-272 re my thoughts on it) # Second optmised test run has some odd figures in it relating to expected savings and total test run time. ",2 +CLOV-1084,"No instrumentation Done, Always get two Tests run.","Although 0 instr. was done, I still see two tests run. {code} 2009-05-08 14:19:48,851 [8933804] INFO - a.clover.core_v2.5.0-build-dev - Updating existing database at '/Users/niick/work/CLOV-trunk/.clover/coverage.db'. 2009-05-08 14:19:49,638 [8934591] INFO - a.clover.core_v2.5.0-build-dev - Processing files at 1.5 source level. 2009-05-08 14:19:52,664 [8937617] INFO - a.clover.core_v2.5.0-build-dev - Clover all over. Instrumented 0 files (0 packages). 2009-05-08 14:19:52,664 [8937617] INFO - a.clover.core_v2.5.0-build-dev - Elapsed time = 3.026 secs. (0 files/sec, 0 srclines/sec) 2009-05-08 14:19:52,664 [8937617] INFO - over.idea.build.CloverCompiler - completed Instrumentation. 2009-05-08 14:19:53,738 [8938691] INFO - a.clover.core_v2.5.0-build-dev - Clover estimates having saved around 41 seconds on this optimized test run. The full test run takes approx. 41 seconds 2009-05-08 14:19:53,738 [8938691] INFO - a.clover.core_v2.5.0-build-dev - Clover included 2 test classes in this run (total # test classes : 84) 2009-05-08 14:19:54,689 [8939642] INFO - CloverProgressIndicator - Creating database 2009-05-08 14:19:54,690 [8939643] INFO - CloverProgressIndicator - Loading registry file 2009-05-08 14:19:56,686 [8941639] INFO - CloverProgressIndicator - Building Index 2009-05-08 14:19:56,686 [8941639] INFO - CloverProgressIndicator - Loading coverage data 2009-05-08 14:19:56,758 [8941711] INFO - CloverProgressIndicator - Reading per-test data 2009-05-08 14:19:56,995 [8941948] INFO - CloverProgressIndicator - Resolving coverage data 2009-05-08 14:19:57,345 [8942298] INFO - CloverProgressIndicator - Creating tree 2009-05-08 14:19:57,480 [8942433] INFO - CloverProgressIndicator - Tree model ready {code}",1 +CLOV-573,"Clover should prompt to rebuild a project if its flush or initstring settings change",NULL,1 +CLOV-701,"Test Columns are empty (or -1) in project.js when generated via a JSON report ","When a JSON report is generated, the test fields: ""ErroneousTests"":0,""FailingTests"":0,""FilteredElements"":0.42738318,""PassingTests"":0,""PcErroneousTests"":-1,""PcFailingTests"":-1,""PcPassingTests"":-1,""TestExecutionTime"":0,""Tests"":0, are all -1 or 0 in the project.js. e.g. https://bamboo.extranet.atlassian.com/browse/CCD-WCLV-488/artifact/Clover-HTML/project.js The test data is definitely available in the HTML report.",2 +CLOV-906,"Clover-for-Grails generates an exception when using the -clover.view option on the Grails command line.","Clover-for-Grails generates an exception when using the -clover.view option on the Grails command line. According to Nick's assessment so far, this is a Windows-specific problem. See output below: {noformat} C:\grails-1.2.1\samples\petclinic>grails test-app -clover.on -clover.view Welcome to Grails 1.2.1 - http://grails.org/ Licensed under Apache Standard License 2.0 Grails home is set to: C:\grails-1.2.1 Base Directory: C:\grails-1.2.1\samples\petclinic Resolving dependencies... Dependencies resolved in 2641ms. Running script C:\grails-1.2.1\scripts\TestApp.groovy Environment set to test Clover: Using config: [on:true, view:true] Using clover license path: C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\plugins\clover-0.2\grails-app\conf\clover\clover-evaluation. license [clover-env] Loading clover.xml: jar:file:/C:/Documents%20and%20Settings/Giles%20Gaskell/.ivy2/cache/com.cenqua.clover/clover/jars/clover-3.0.0-m3.jar!/clover.x ml Using default clover-setup configuration. Clover: directories: [src/java, src/groovy, test, grails-app] includes: [**/*.groovy, **/*.java] excludes [**/conf/**, **/plugins/**] [clover-setup] Clover Version 3.0.0-m3, built on February 26 2010 (build-780) [clover-setup] Loaded from: C:\Documents and Settings\Giles Gaskell\.ivy2\cache\com.cenqua.clover\clover\jars\clover-3.0.0-m3.jar [clover-setup] Clover Evaluation License registered to Clover Grails Plugin. [clover-setup] You have 23 day(s) before your license expires. [clover-setup] Clover is enabled with initstring 'C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover\db\clover.db' Clover: Forcing a clean to ensure Clover instrumentation occurs. Disable by setting: clover.forceClean=false [delete] Deleting directory C:\grails-1.2.1\samples\petclinic\target\classes [delete] Deleting directory C:\grails-1.2.1\samples\petclinic\target\test-classes [delete] Deleting directory C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover Clover: Compile start. [mkdir] Created dir: C:\grails-1.2.1\samples\petclinic\target\classes [groovyc] Compiling 2 source files to C:\grails-1.2.1\samples\petclinic\target\classes [clover-setup] Creating new database at 'C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover\db\clover.db'. [groovyc] Compiling 17 source files to C:\grails-1.2.1\samples\petclinic\target\classes [clover-setup] Creating new database at 'C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover\db\clover.db'. [mkdir] Created dir: C:\grails-1.2.1\samples\petclinic\target\test-reports\html [mkdir] Created dir: C:\grails-1.2.1\samples\petclinic\target\test-reports\plain Starting unit test phase ... [mkdir] Created dir: C:\grails-1.2.1\samples\petclinic\target\test-classes\unit [groovyc] Compiling 1 source file to C:\grails-1.2.1\samples\petclinic\target\test-classes\unit [clover-setup] Updating existing database at 'C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover\db\clover.db'. ------------------------------------------------------- Running 1 unit test... Running test org.grails.samples.OwnerControllerTests...PASSED Tests Completed in 2015ms ... ------------------------------------------------------- Tests passed: 6 Tests failed: 0 ------------------------------------------------------- Starting integration test phase ... [copy] Copying 1 file to C:\grails-1.2.1\samples\petclinic\target\test-classes\integration [copy] Copying 1 file to C:\grails-1.2.1\samples\petclinic\target\test-classes [copy] Copied 3 empty directories to 2 empty directories under C:\grails-1.2.1\samples\petclinic\target\test-classes Clover: Compile start. [groovyc] Compiling 1 source file to C:\grails-1.2.1\samples\petclinic\target\classes [clover-setup] Updating existing database at 'C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover\db\clover.db'. [copy] Copying 1 file to C:\grails-1.2.1\samples\petclinic\target\classes Clover: Compile start. [groovyc] Compiling 1 source file to C:\grails-1.2.1\samples\petclinic\target\classes [clover-setup] Updating existing database at 'C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover\db\clover.db'. [junitreport] Processing C:\grails-1.2.1\samples\petclinic\target\test-reports\TESTS-TestSuites.xml to C:\DOCUME~1\GILESG~1\LOCALS~1\Temp\null1750708552 [junitreport] Loading stylesheet jar:file:/C:/Documents%20and%20Settings/Giles%20Gaskell/.ivy2/cache/org.apache.ant/ant-junit/jars/ant-junit-1.7.1.jar!/org/apac he/tools/ant/taskdefs/optional/junit/xsl/junit-frames.xsl [junitreport] Transform time: 735ms [junitreport] Deleting: C:\DOCUME~1\GILESG~1\LOCALS~1\Temp\null1750708552 Tests PASSED - view reports in target\test-reports Clover: Tests ended [clover-historypoint] Clover Version 3.0.0-m3, built on February 26 2010 (build-780) [clover-historypoint] Loaded from: C:\Documents and Settings\Giles Gaskell\.ivy2\cache\com.cenqua.clover\clover\jars\clover-3.0.0-m3.jar [clover-historypoint] Clover Evaluation License registered to Clover Grails Plugin. [clover-historypoint] You have 23 day(s) before your license expires. [clover-historypoint] Writing report to 'C:\grails-1.2.1\samples\petclinic\.cloverhistory\clover-20100305112533.xml.gz' [clover-html-report] Clover Version 3.0.0-m3, built on February 26 2010 (build-780) [clover-html-report] Loaded from: C:\Documents and Settings\Giles Gaskell\.ivy2\cache\com.cenqua.clover\clover\jars\clover-3.0.0-m3.jar [clover-html-report] Clover Evaluation License registered to Clover Grails Plugin. [clover-html-report] You have 23 day(s) before your license expires. [clover-html-report] Not overwriting existing history point 'C:\grails-1.2.1\samples\petclinic\.cloverhistory\clover-20100305112533.xml.gz'. To force, set overw rite=""true"". [clover-html-report] Loading coverage database from: 'C:\Documents and Settings\Giles Gaskell\.grails\1.2.1\projects\petclinic\clover\db\clover.db' [clover-html-report] Loading historical coverage data from: 'C:\grails-1.2.1\samples\petclinic\.cloverhistory' [clover-html-report] Writing HTML report to 'C:\grails-1.2.1\samples\petclinic\build\clover\report' [clover-html-report] Done. Processed 1 packages in 3047ms (3047ms per package). [clover-html-report] Writing historical report to 'C:\grails-1.2.1\samples\petclinic\build\clover\report' [clover-html-report] Read 3 history points. [clover-html-report] using movers interval of 18 hours [clover-html-report] using movers interval of 18 hours [clover-html-report] Writing JSON historical-data to: C:\grails-1.2.1\samples\petclinic\build\clover\report\historical-json.js [clover-html-report] Done. Error executing script TestApp: java.lang.StringIndexOutOfBoundsException: String index out of range: 1 gant.TargetExecutionException: java.lang.StringIndexOutOfBoundsException: String index out of range: 1 at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:331) at gant.Gant$_dispatch_closure6.doCall(Gant.groovy:334) at gant.Gant$_dispatch_closure6.doCall(Gant.groovy) at gant.Gant.withBuildListeners(Gant.groovy:344) at gant.Gant.this$2$withBuildListeners(Gant.groovy) at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source) at gant.Gant.dispatch(Gant.groovy:334) at gant.Gant.this$2$dispatch(Gant.groovy) at gant.Gant.invokeMethod(Gant.groovy) at gant.Gant.processTargets(Gant.groovy:495) at gant.Gant.processTargets(Gant.groovy:480) Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 1 at java.lang.String.charAt(String.java:687) at java.util.regex.Matcher.appendReplacement(Matcher.java:703) at java.util.regex.Matcher.replaceAll(Matcher.java:813) at java.lang.String.replaceAll(String.java:2190) at _Events.launchReport(_Events.groovy:138) at _Events$_run_closure6.doCall(_Events.groovy:108) at _GrailsEvents_groovy$_run_closure5.doCall(_GrailsEvents_groovy:58) at _GrailsEvents_groovy$_run_closure5.call(_GrailsEvents_groovy) at _GrailsTest_groovy$_run_closure1.doCall(_GrailsTest_groovy:214) at TestApp$_run_closure1.doCall(TestApp.groovy:102) at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:324) ... 10 more Error executing script TestApp: java.lang.StringIndexOutOfBoundsException: String index out of range: 1 Application context shutting down... Application context shutdown. {noformat}",1 +CLOV-930,"Implement Test Optimization for Grails: -clover.optimize","Running -clover.optimize will: * save a clover.snapshot on the first build * use this, to discern the optimal set of tests and their order, to run for subsequent builds based on: ** which source files have been modified ** length of test ** test result - failed tests will always be re-run",2 +CLOV-940,"clover + ant + GWT does not compile and test with clover.","https://support.atlassian.com/browse/BSP-2952 It looks like the GWT.clover.xxx are not executed. build 06-May-2010 17:24:30 Build sequence for target(s) `clover.fullclean' is [clover.clean, clover.fullclean] build 06-May-2010 17:24:30 Complete build sequence is [clover.clean, clover.fullclean, clover.save-history, GWT.clover.report, GWT.clover.json, checkstyle, common.checkstyle, buildonly, dist-dev, tools, apicheck-nobuild, apicheck, test, verify, common.all, build, doc, dist, -compile.emma.if.enabled, dev, GWT.with.clover, compile.emma.if.enabled, common.clean, GWT.clover.fullclean, common.build, GWT.clover.current, presubmit, all, GWT.clover.clean, GWT.clover.save-history, clover.snapshot, clover.json, clover.report, user, clover.log, common.compile.emma.if.enabled, ci, common.-compile.emma.if.enabled, GWT.clover.log, bikeshed, emma.merge, GWT.test, with.clover, jni, clean, clover.all, common.-create.emma.coverage.if.enabled, clover.xml, common.verify, -create.emma.coverage.if.enabled, buildtools, clover.current, samples, dist-bikeshed, soyc, GWT.clover.all, GWT.clover.xml, common.test, servlet, GWT.clover.snapshot, ] However targets without GWT are executed.",3 +CLOV-951,"Assertion failing (call not made from EDT)","{code} Access is allowed from event dispatch thread only. Details: Current thread: Thread[ApplicationImpl pooled thread,5,Idea Thread Group] 1631384517 Our dispatch thread:Thread[AWT-EventQueue-1 9.0.2#IU-95.66, eap:false,6,Idea Thread Group] 1360788520 SystemEventQueueThread: Thread[AWT-EventQueue-1 9.0.2#IU-95.66, eap:false,6,Idea Thread Group] 1360788520 java.lang.Throwable com.intellij.openapi.diagnostic.Logger.error(Logger.java:55) com.intellij.openapi.application.impl.ApplicationImpl.a(ApplicationImpl.java:860) com.intellij.openapi.application.impl.ApplicationImpl.assertIsDispatchThread(ApplicationImpl.java:847) com.cenqua.clover.idea.coverage.DefaultCoverageManager.setCoverageTree(DefaultCoverageManager.java:176) com.cenqua.clover.idea.coverage.DefaultCoverageManager.clearCache(DefaultCoverageManager.java:160) com.cenqua.clover.idea.coverage.DefaultCoverageManager.setContextFilter(DefaultCoverageManager.java:151) com.cenqua.clover.idea.ProjectPlugin.getCoverageManager(ProjectPlugin.java:219) com.cenqua.clover.idea.config.ContextFilterPane.(ContextFilterPane.java:16) com.cenqua.clover.idea.config.ProjectConfigPanel.getFilterPane(ProjectConfigPanel.java:200) com.cenqua.clover.idea.config.ProjectConfigPanel.getTabbedContent(ProjectConfigPanel.java:120) com.cenqua.clover.idea.config.ProjectConfigPanel.getLicensedPanel(ProjectConfigPanel.java:82) com.cenqua.clover.idea.config.ProjectConfigPanel.initComponents(ProjectConfigPanel.java:63) com.cenqua.clover.idea.config.ProjectConfigPanel.(ProjectConfigPanel.java:54) com.cenqua.clover.idea.ProjectPlugin.createComponent(ProjectPlugin.java:328) com.intellij.openapi.options.newEditor.OptionsEditor$Simple.(OptionsEditor.java:1113) com.intellij.openapi.options.newEditor.OptionsEditor.b(OptionsEditor.java:350) com.intellij.openapi.options.newEditor.OptionsEditor.access$2100(OptionsEditor.java:63) com.intellij.openapi.options.newEditor.OptionsEditor$6$1.run(OptionsEditor.java:328) com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:695) com.intellij.openapi.options.newEditor.OptionsEditor$6.run(OptionsEditor.java:326) com.intellij.openapi.application.impl.ApplicationImpl$5.run(ApplicationImpl.java:329) java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) java.util.concurrent.FutureTask.run(FutureTask.java:138) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) java.lang.Thread.run(Thread.java:637) com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:125) Access is allowed from event dispatch thread only. Details: Current thread: Thread[ApplicationImpl pooled thread,5,Idea Thread Group] 1631384517 Our dispatch thread:Thread[AWT-EventQueue-1 9.0.2#IU-95.66, eap:false,6,Idea Thread Group] 1360788520 SystemEventQueueThread: Thread[AWT-EventQueue-1 9.0.2#IU-95.66, eap:false,6,Idea Thread Group] 1360788520 java.lang.Throwable com.intellij.openapi.diagnostic.Logger.error(Logger.java:55) {code}",2 +CLOV-953,"Occasionally clover is getting broken on the Hudson ","We are using Grails 1.2.2 , Hudson, clover From time to time Hudson fails with the following console output. Without any changes the next build can be fine. Licensed under Apache Standard License 2.0 Grails home is set to: D:\Apps\grails-1.2.2 Base Directory: D:\Apps-Pub\HUDSON_HOME\jobs\LifePoints\workspace\Lifepoints WARNING: Dependencies cannot be resolved for plugin [clover-3.0.2] due to error: null Resolving dependencies... Dependencies resolved in 1422ms. Running script D:\Apps\grails-1.2.2\scripts\TestApp.groovy Environment set to test Clover: Using config: [on:true] Using clover license path: D:\Apps-Pub\HUDSON_HOME\jobs\LifePoints\workspace\Lifepoints/clover.license [taskdef] Could not load definitions from resource cloverlib.xml. It could not be found. Error executing script TestApp: Problem: failed to create task or type clover-env Cause: The name is undefined. Action: Check the spelling. Action: Check that any custom tasks/types have been declared. Action: Check that any / declarations have taken place. : Problem: failed to create task or type clover-env Cause: The name is undefined. Action: Check the spelling. Action: Check that any custom tasks/types have been declared. Action: Check that any / declarations have taken place. org.apache.tools.ant.UnknownElement.getNotFoundException(UnknownElement.java:484) org.apache.tools.ant.UnknownElement.makeObject(UnknownElement.java:416) org.apache.tools.ant.UnknownElement.maybeConfigure(UnknownElement.java:160) _Events.toggleCloverOn(_Events.groovy:302) _Events$_run_closure3.doCall(_Events.groovy:56) _GrailsEvents_groovy$_run_closure5.doCall(_GrailsEvents_groovy:58) _GrailsEvents_groovy$_run_closure5.call(_GrailsEvents_groovy) _GrailsEvents_groovy.run(_GrailsEvents_groovy:62) _GrailsEvents_groovy$run.call(Unknown Source) _GrailsClean_groovy$run.call(Unknown Source) _GrailsClean_groovy.run(_GrailsClean_groovy:29) _GrailsClean_groovy$run.call(Unknown Source) TestApp.run(TestApp.groovy:44) TestApp$run.call(Unknown Source) gant.Gant.processTargets(Gant.groovy:494) gant.Gant.processTargets(Gant.groovy:480) Error executing script TestApp: Problem: failed to create task or type clover-env Cause: The name is undefined. Action: Check the spelling. Action: Check that any custom tasks/types have been declared. Action: Check that any / declarations have taken place.",3 +CLOV-964," does not work with Ant groovyc task","Since TestSourceSet is not Serializable it doesn't work with Ant/groovyc. {noformat}Clover failed to integrate with java.io.NotSerializableException: com.cenqua.clover.tasks.TestSourceSet at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302) at java.util.ArrayList.writeObject(ArrayList.java:569) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917) ... at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302) at com.atlassian.clover.instr.java.InstrumentationConfig.saveToFile(InstrumentationConfig.java:427) at com.atlassian.clover.ant.groovy.GroovycSupport.newConfigDir(GroovycSupport.java:360) at com.atlassian.clover.ant.groovy.GroovycSupport.augmentCompilationClasspath(GroovycSupport.java:350) at com.atlassian.clover.ant.groovy.GroovycSupport.taskStarted(GroovycSupport.java:160) at org.apache.tools.ant.Project.fireTaskStarted(Project.java:2182){noformat} ",1 +CLOV-977,"Clover's embedding of GSON brings in ""assembly-descriptor.xml"" into clover.jar which causes problems for ejbdoclet, others","see support case https://support.atlassian.com/browse/CLV-5576 and forum post http://forums.atlassian.com/thread.jspa?messageID=257357810 the solution is to simply exclude this file when building the clover.jar ",1 +CLOV-987,"Cannot select contexts in IDEA 10.0.2","I select either the filter button in the coverage panel or go via the project settings (same either way) to get to the clover setting dialog. I select the 3rd tab (Contexts) and check the check-boxes 'catch bosy' and 'property methods'. The boxes become checked but the Apply button remains disabled (this is the main issue). I add a new custom context - and the Apply button is enabled. I click apply and the check boxes all reset back to their un-set state. The custom context remains. ",1 +CLOV-991,"Ternary clauses never executed still get coverage","I don't know if this is disoverable at all, but the following example will work with any ternary statement: @Test public void testTernaryStatement() { ternaryStatement(true); } public static void ternaryStatement(boolean bool) { String value = bool ? ""true"" : ""false""; System.out.println(value); } This will mark the entire ternary statement as covered, while the false branch was in fact never triggered. Since Clover is primarily a coverage tool, I marked this issue Major.",2 +CLOV-1007,"clover2:check fails with negative coverage if no class to instrument","This happens either if no java class was found for instrumentation or if they were all excluded. Clover then reports a negative coverage of -100%. To my mind, this is not correct : strictly speaking, if no java class has to be tested for coverage, there is no relevant coverage value (I guess it is what the -100% means) but check should be OK. ",1 +CLOV-1011,"Coverage data not showing up in Intellij","I've got the dev build from CLOV-1004, which worked for Intellij 10.3 but since I upgraded to 10.5.1, neither the latest public rev (3.1.0.v20110608114626-dev) nor the dev version of the plugin from CLOV-1004 works. In the projects view, it looks like the code is instrumented. But after I run a test, no coverage information is displayed. When I explicitly update the clover database, nothing is updated. The ""Test Runs"" view behaves as if I never ran a test.",1 +CLOV-1015,"Test Optimization says 0 tests should run but all tests are run anyway","Recently upgraded my Maven builds to use the Maven Surefire plugin version 2.9. Now my builds that run Clover2:optimized and say 0 tests should run, run all tests anyway. The upshot of this is that our optimized test runs are now taking over an hour versus the 15 to 20 minutes they were when the tests were correctly optimized away. Here is a section of the log file that shows the problem: {noformat} [shell] cd dba; mvn -PPERSONAL,UnitTests,Clover.optimize -Djava.awt.headless=true --offline -Dforkmode=once -Dmaven.download.meter=silent -DskipAssembly -Dmaven.test.failure.ignore=true -Dmaven.test.redirectTestOutputToFile=false -Dmaven.clover.licenseLocation=/prodinfolocal/BambooHome/clover.license -Dclover.plugin.version=3.1.0 -Dclover.version=3.1.0 install clover2:aggregate clover2:clover [INFO] NOTE: Maven is executing in offline mode. Any artifacts not already in your local repository will be inaccessible. [INFO] Scanning for projects... [WARNING] Profile with id: 'PERSONAL' has not been activated. [WARNING] Profile with id: 'UnitTests' has not been activated. [INFO] ------------------------------------------------------------------------ [INFO] Building dba [INFO] task-segment: [install] [INFO] ------------------------------------------------------------------------ [INFO] [clover2:setup {execution: clover}] [INFO] No Clover instrumentation done on source files in: [/Users/mhusby/workarea/dba/src/main/java] as no matching sources files found [INFO] No Clover instrumentation done on source files in: [/Users/mhusby/workarea/dba/src/test/java] as no matching sources files found [WARNING] Using [Squid:configuration:jar:1.0-SNAPSHOT], built on Fri Jul 22 15:44:02 EDT 2011 even though a Clovered version exists but it's older (lastModified: Fri Jul 22 15:43:02 EDT 2011 ) and could fail the build. Please consider running Clover again on that dependency's project. [INFO] [resources:resources {execution: default-resources}] [WARNING] Using platform encoding (MacRoman actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 2 resources [INFO] Copying 1 resource [INFO] [compiler:compile {execution: default-compile}] [INFO] Nothing to compile - all classes are up to date [INFO] [resources:testResources {execution: default-testResources}] [WARNING] Using platform encoding (MacRoman actually) to copy filtered resources, i.e. build is platform dependent! [INFO] Copying 6 resources [INFO] [compiler:testCompile {execution: default-testCompile}] [INFO] Nothing to compile - all classes are up to date [INFO] [clover2:optimize {execution: clover}] [INFO] Adding fileset: directory=/Users/mhusby/workarea/dba/target/clover/src-test-instrumented, includes=[**/*Tests.*, **/*Test.*, **/Test*.*, qxjShouldNeverMatchAClass], excludes=[**/*TestCase.*, **/Test*Servlet.*, **/Abstract*.*, **/*FormModuleTests.*, **/*.xml, **/*$*.*] [INFO] Clover estimates having saved around 44 seconds on this optimized test run. The full test run takes approx. 44 seconds [INFO] Clover included 0 test classes in this run (total # test classes : 22) [INFO] [surefire:test {execution: default-test}] [INFO] Surefire report directory: /Users/mhusby/workarea/dba/target/surefire-reports ------------------------------------------------------- T E S T S ------------------------------------------------------- Running edu.mit.broad.prodinfo.dba.BlobDefTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.327 sec Running edu.mit.broad.prodinfo.dba.LongDefTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Running edu.mit.broad.prodinfo.dba.ExceptionWrapperTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec Running edu.mit.broad.prodinfo.dba.DoubleDefTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Running edu.mit.broad.prodinfo.dba.CacheMapTest Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.108 sec Running edu.mit.broad.prodinfo.dba.OurDBsTest Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.596 sec Running edu.mit.broad.prodinfo.dba.VArrayDefTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 sec Running edu.mit.broad.prodinfo.dba.VArrayFormatterTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.006 sec Running edu.mit.broad.prodinfo.dba.RowDefTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.311 sec Running edu.mit.broad.prodinfo.dba.BigDecimalDefTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec Running edu.mit.broad.prodinfo.dba.DoubleFormatterTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec Running edu.mit.broad.prodinfo.dba.DateFormatterTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.007 sec Running edu.mit.broad.prodinfo.dba.LongFormatterTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec Running edu.mit.broad.prodinfo.dba.ClobDefTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 sec Running edu.mit.broad.prodinfo.dba.DBTest Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.778 sec Running edu.mit.broad.prodinfo.dba.DataIteratorTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec Running edu.mit.broad.prodinfo.dba.ProcedureDefTest Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.052 sec Running edu.mit.broad.prodinfo.dba.VArrayListTest Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec Running edu.mit.broad.prodinfo.dba.DBPoolTest Tests run: 8, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 39.08 sec Running edu.mit.broad.prodinfo.dba.StringDefTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec Running edu.mit.broad.prodinfo.dba.DataDefIteratorTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec Running edu.mit.broad.prodinfo.dba.RowTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.54 sec Results : Tests run: 49, Failures: 0, Errors: 0, Skipped: 1 [INFO] [clover2:snapshot {execution: clover}] [INFO] No span specified, using span of: 48s [INFO] Saving snapshot to: /Users/mhusby/.clover/Squid-dba/clover.snapshot [INFO] Clover Version 3.1.0, built on May 31 2011 (build-821) [INFO] Loaded from: /Users/mhusby/.m2/repository/com/cenqua/clover/clover/3.1.0/clover-3.1.0.jar [INFO] Clover: Academic License registered to Broad/MIT Institute. [INFO] Updating snapshot '/Users/mhusby/.clover/Squid-dba/clover.snapshot' against Clover database at '/Users/mhusby/workarea/dba/target/clover/clover.db' {noformat}",5 +CLOV-1018,"Can't Use ""Google App Engine"" Run Configuration in IDEA 10.5 when Clover Plug-in is Installed","I am trying to start a GAE run configuration in IDEA 10.5 - after compilation and the web artifact being built, the process simply fails to start, with no errors. I uninstalled the plug-in and the process once again starts correctly. I also attempted to create a plain Java Application run configuration to start the process instead and this also fails with the same issue. The GAE libraries are pulled in as module libraries, via a Maven POM. I'm not sure if this is linked, but there definitely seems to be a problem with Run configurations when the main Java class being run is located in an external library, rather than being part of the project code-base. I've checked the IDEA logs and no errors are thrown. The plain Java Application run configuration had the following settings: Main Class: com.google.appengine.tools.development.DevAppServerMain VM Parameters: -Dappengine.sdk.root= -javaagent:/lib/agent/appengine-agent.jar Program Parameters: --disable_update_check Working Directory: ",2 +CLOV-1025,"Log the actual percentage coverage instead of ""Coverage check PASSED"".","Clover logs the minimum percentage: Checking for coverage of [90.0%] for database But not the actual percentage. Coverage check PASSED Please add this logging, in order to help us know when it's safe to bump the threshold higher.",1 +CLOV-1056,"IDEA 11 error turning OFF Clover coverage","Error during dispatching of java.awt.event.MouseEvent[MOUSE_CLICKED,(691,256),absolute(1963,178),button=1,modifiers=Button1,clickCount=1] on frame0 java.lang.NullPointerException clover.net.sf.jtreemap.swing.JTreeMap$Zoom.setNewDimension(JTreeMap.java:694) clover.net.sf.jtreemap.swing.JTreeMap$Zoom.execute(JTreeMap.java:664) clover.net.sf.jtreemap.swing.JTreeMap.zoom(JTreeMap.java:570) clover.net.sf.jtreemap.swing.JTreeMap$HandleMouseClick.mouseClicked(JTreeMap.java:616) java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270) java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:269) java.awt.Component.processMouseEvent(Component.java:6507) javax.swing.JComponent.processMouseEvent(JComponent.java:3321) java.awt.Component.processEvent(Component.java:6269) java.awt.Container.processEvent(Container.java:2229) java.awt.Component.dispatchEventImpl(Component.java:4860) java.awt.Container.dispatchEventImpl(Container.java:2287) java.awt.Component.dispatchEvent(Component.java:4686) java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501) java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) java.awt.Container.dispatchEventImpl(Container.java:2273) java.awt.Window.dispatchEventImpl(Window.java:2713) java.awt.Component.dispatchEvent(Component.java:4686) java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) java.awt.EventQueue.access$000(EventQueue.java:101) java.awt.EventQueue$3.run(EventQueue.java:666) java.awt.EventQueue$3.run(EventQueue.java:664) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) java.awt.EventQueue$4.run(EventQueue.java:680) java.awt.EventQueue$4.run(EventQueue.java:678) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.awt.EventQueue.dispatchEvent(EventQueue.java:677) com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:694) com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:530) com.intellij.ide.IdeEventQueue.b(IdeEventQueue.java:416) com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:374) java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) java.awt.EventDispatchThread.run(EventDispatchThread.java:90) ",2 +CLOV-1062,"Clover-for-Groovy failed to instrument Groovy sources having methods overridden by metaClass ","We were able to get clover report from maven-clover2-plugin even for groovy classes successfully. However when we try to override a method via Groovy metaclass in some tests, clover plugin fails on these tests. We simply added the following lines to our tests. MyClass.metaClass.myMethod = { return ""called"" } Clover plugin gave the following error. Exception in thread ""main"" BUG! exception in phase 'instruction selection' in source unit Test.groovy Clover-for-Groovy failed to instrument Groovy source: Test.groovy I attached the full stacktrace for further details.",13 +CLOV-1077,"Missing icons on TreeView and Cloud Report tabs","On IDEA 11 the ""Tree View"" and ""Cloud Report"" tabs have missing icons. See attached screenshot. ",2 +CLOV-1082,"Write up on CAC how to get Clover working with Maven and integration tests","In particular: * numClients=1 should be set in the config * that the test runner JVM should not have -Dclover.distributed.coverage=ON set as this will override the numClients setting * that a context listener that starts on webapp start needs to be registered in web.xml so that the webapp Clover runtime connects back to the test runner JVM so that tests proceed ",1 +CLOV-1087,"Prepare tutorial how to configure distributed coverage for web applications","Extend a following page: http://confluence.atlassian.com/display/CLOVER/Working+with+Distributed+Applications or add a subpage. Prepare a step-by-step tutorial how to set compile options, deploy artifacts and set container options in order to test web applications. Things to be considered (not a complete list): * fact that -Dclover.distributed.coverage=ON it will use the default settings including the default numClients=0 * numClients must be set to 1 in order to have blocking unit tests * we need a servlet context listener to avoid circular dependency: unit tests are waiting for business code to connect, but business code will not connect until first request (which will be triggered by unit tests)",1 +CLOV-1090,"Consistent statistics reporting in IDE and HTML reports for subpackages","See https://answers.atlassian.com/questions/11664/package-summary-including-sub-packages A problem is as follows. In IDE (IntelliJ/Eclipse) in the Coverage view when we see statistics for given package it is a aggregated summary of the package and all its subpackages. By clicking ""Flatten packages"" we can see statistics for a package without subpackages. See idea1.png. In HTML report we can see aggregated coverage only for the whole project. When we click on a certain package, we see statistics gathered only from classes from given package and not its subpackages. See html1.png and html2.png. The expected behaviour is as follows: 1) When we click on the ""Coverage"" link in top-left frame in HTML report, the functionality shall be as it is now. I.e. it should open in the right (main) frame a list of packages, a statistics panel in the top-right corner will show stats for whole project, clicking on a package on the list will open a package details frame with stats in top-right corner for the package only. 2) When we click on the ""Coverage (Aggregate)"" link in top-left frame, it will open in right frame list of package and a statistics panel for whole project (as it is now). But when user clicks on a package from list it will open a different package details frame with aggregated stats in top-right corner for the package and all subpackages. 3) A stats panel for option 1 shall have a label like ""Statistics for package (without subpackages) "" and for option 2 like ""Statistics for package (with subpackages) "" 4) A stats panel should have a link ""show with subpackages"" / ""show without subpackages"" for easy switch between reports. See html3.png *Update:* In new HTML report introduced in Clover 4, a package-level page could look this way: [^clover4-adg-package.png] so that toggle buttons would be similar to those a project-level page: [^clover4-adg-project.png] ",3 +CLOV-1092,"Finish About+Clover-for-Grails page","Complete content on http://confluence.atlassian.com/display/CLOVER/About+Clover-for-Grails and make it visible. Expand http://confluence.atlassian.com/display/CLOVER/Coverage+Legend Retake screengrab - with more context - i.e. bigger image and provide an explanation of the columns. Expand http://confluence.atlassian.com/display/CLOVER/Source+Cross-Referencing+in+Reports Add image with mouse pointer - i.e. hyperlinks within the code. Try to avoid getting the tooltip in the image as it is unrelated to the (point of the) hyperlink itself. Add more examples for advanced setuptask / reporttask configuration. ",1 +CLOV-1097,"Guide users through Eclipse setup","Our current Clover-for-Eclipse documentation is hard to follow. First it tells you how to enable Clover for your projects, mentions briefly that the views will pop up but won't have anything interesting on them yet, and then goes into great detail about each view. It would be helpful to instead walk the user through how to enable Clover for a project, and then go straight to configuration. There's no need to explain the views until there's something to show on them! It would also be helpful to describe how a project should be laid out. Do you need your test classes in the same Eclipse project as your source code, for example? ",2 +CLOV-1100,"Drop support for Eclipse 3.4, 3.5 and RAD 7.5","Drop support for Eclipse 3.4.x and RAD 7.5. These tools are practically unused. Background: According to the latest 2012 [Eclipse community survey|http://ianskerrett.wordpress.com/2012/06/08/eclipse-community-survey-result-for-2012/] the 3.4 version is being used by 0.7% of users; 3.5 is used by 2.3% of users. Rational Application Developer 8.0 which is based on Eclipse 3.6 is available since September 2010, so since nearly two years - i.e. we can expect that IBM customers had a lot of time to upgrade to the latest RAD. The previous version of RAD 7.5 (based on Eclipse 3.4) was released in 2008. To do: * update http://confluence.atlassian.com/display/CLOVER/Supported+Platforms page * update clover-for-eclipse build scripts and manifest files ",1 +CLOV-1105,"license information inconsistent in IDEA","see screenshot",1 +CLOV-1106,"bad alignment of ""About"" box in IDEA","see screenshot",1 +CLOV-1108,"Eclipse does not exclude filtered-out methods from statistics","When we define certain methods to be filtered-out in Eclipse, they are being marked as not executed (hit count = 0) instead of not being taken into consideration at all (no hit count). What's interesting, an HTML report generated from Eclipse use filters correctly. Metrics in Eclipse says: 4 methods, 4 statements; Metrics in HTML says: 3 methods, 3 statements. See attached screenshots.",1 +CLOV-1109,"Unit test failure during Clover2 custom lifecycle do not fail builds","The Maven Clover2 plugin creates a custom lifecycle. When the unit tests are run in that lifecycle the build will not fail if there are test failures. This is because the lifecycle.xml file forces the Surefire plugin's testFailureIgnore configuration property to false. This is especially problematic in Jenkins builds where unit tests should fail the build (rather than allowing them to be unstable). Please remove this configuration or replace it with a mechanism that can be set in the POM. The file in question is src/main/resources/META-INF/maven/lifecycle.xml. See the [related Answers discussion|https://answers.atlassian.com/questions/61973/clover-ignore-dmaven-test-failure-ignore-false].",2 +CLOV-1111,"Prepare tutorial how to instrument RCP application under Eclipse","Prepare manual on confluence.atlassian.com describing how to instrument and run RCP application under Eclipse IDE. Topics to be covered: * ""Run with Clover as ..."" vs ""Run as ..."" * various options in Run Configuration dialog * adding Clover dependency via Xbootclasspath or manually created plugin * exporting instrumented code (plugins, fragments, features, product) * config.ini for product and Xbootclasspath - running exported product (separately) and running it in IDE Prepare also code example showing how we can use Clover with RCP application. Open issue: how to distribute it with Clover-for-Eclipse. Options: * prepare sample aside and attach as zip to manual on confluence * implement a wizard so that using ""File > New > Example > Clover RCP Example"" will generate sample projects in workspace (preferred solution, but more work effort) ",1 +CLOV-1112,"Reading clover database across platforms does not resolve path correctly for FileInfo","Clover database contains FileInfo objects for every source file. One of FileInfo fields is an absolute path to given file. When database is written, it uses current platform file separator for file name ('\' for windows, '/' for Linux/MacOS). However, when database is read it interprets file name using again current platform file separator. As a consequence, when database is generated on Windows and report generated on Linux, it cannot resolve file name properly - it takes whole path as a single path segment, resulting in paths like: /path/from/report/generation/sourcepath/D:/path/from/instrumented/build/file.java As a consequence report generation does create html file containing source code with highlighted coverage.",1 +CLOV-1129,"Prepare manual how to set-up cross-platform testing","Write how to set up Clover in case when someone is using a test framework not written in Java - for example shell scripts, C/C++ code. How to wrap this so that Clover can not only execute, but also optimize such tests. ",1 +CLOV-1131,"Unicode CR/LF characters in javadoc causes Eclipse/IntelliJ editors get out of sync","Try the following example: {code:java} class Unicode { void foo() { System.out.println(""1""); /** {@code \u000a} LF */ } void goo() { System.out.println(""2""); /** {@code \u000d} CR */ } void hoo() { System.out.println(""3""); } } // end {code} In Eclipse editor, every CR/LF written in unicode causes that it interprets it as newline character. As a result left ruler ""sees"" more lines and all subsequent coverage blocks are shifted down. In IntelliJ it's even worse, as we get exception. Stack trace: {noformat} Error during dispatching of java.awt.event.InvocationEvent[INVOCATION_DEFAULT,runnable=com.cenqua.clover.idea.content.ContentPlugin$1@789e7511,notifier=null,catchExceptions=false,when=1343648365649] on sun.awt.windows.WToolkit@2018aa27: Wrong end: 270; document length=249; start=246 java.lang.IllegalArgumentException: Wrong end: 270; document length=249; start=246 com.intellij.openapi.editor.impl.RangeMarkerImpl.(RangeMarkerImpl.java:47) com.intellij.openapi.editor.impl.DocumentImpl.createRangeMarker(DocumentImpl.java:303) com.intellij.openapi.editor.impl.RangeHighlighterImpl.(RangeHighlighterImpl.java:58) com.intellij.openapi.editor.impl.MarkupModelImpl.a(MarkupModelImpl.java:119) com.intellij.openapi.editor.impl.MarkupModelImpl.addRangeHighlighter(MarkupModelImpl.java:135) com.cenqua.clover.idea.content.DocMarkupPlugin$HighlightMarkupBuilder.highlightStatement(DocMarkupPlugin.java:286) com.cenqua.clover.idea.content.DocMarkupPlugin$HighlightMarkupBuilder.process(DocMarkupPlugin.java:220) com.cenqua.clover.idea.content.DocMarkupPlugin.updateMarkups(DocMarkupPlugin.java:136) com.cenqua.clover.idea.content.DocMarkupPlugin.refresh(DocMarkupPlugin.java:424) com.cenqua.clover.idea.content.ContentPlugin$1.run(ContentPlugin.java:96) java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) java.awt.EventQueue.dispatchEventImpl(EventQueue.java:646) java.awt.EventQueue.access$000(EventQueue.java:84) java.awt.EventQueue$1.run(EventQueue.java:607) java.awt.EventQueue$1.run(EventQueue.java:605) java.security.AccessController.doPrivileged(Native Method) java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) java.awt.EventQueue.dispatchEvent(EventQueue.java:616) com.intellij.ide.IdeEventQueue.f(IdeEventQueue.java:627) com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:508) com.intellij.ide.IdeEventQueue.b(IdeEventQueue.java:405) com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:369) java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) java.awt.EventDispatchThread.run(EventDispatchThread.java:122) {noformat} ",2 +CLOV-1132,"Fix Clover-for-IDEA compatibility with IntelliJ IDEA 12","IDEA12 is going to be released quite soon. Make sure that Clover will work on it properly: http://blogs.jetbrains.com/idea/2012/08/meet-august-with-new-intellij-idea-12-eap-build-120305/ http://confluence.jetbrains.net/display/IDEADEV/Leda+120.305+Release+Notes http://confluence.jetbrains.net/display/IDEADEV/IDEA+12+EAP",4 +CLOV-1135,"Coverage ruler does not read settings from Preferences","A left ruler showing code coverage markers is always reading default color values (defined in plugin.xml), instead of current settings from IDE (Window > Preferences > ... Text editors > Annotations). Note that color in text editor is updated correctly. See attached screenshot. ",1 +CLOV-1136,"Coverage ruler does not refresh correctly when all source code annotations are disabled","A left Clover coverage ruler does not refresh correctly after change in coverage in case when we don't have Clover-related source code annotations enabled. Steps to reproduce: - install Clover, enable it for a Moneybags project, perform full rebuild - open MoneyBagTest -> coverage is red - open Window > Preferences > Editors > Text editors > Annotations - for all ""Clover: xxx"" annotation types disable ""Vertical ruler"", ""Overview ruler"" and ""Text as"" checkboxes - run opened test case (right click, run as, junit test) Result: - JUnit view shows that tests were executed, Coverage Explorer view is also updated correctly, but the ruler is still highlighted in red - now scroll the text editor up and down - ruler refreshes during repaint; (the same happens when editor is reopened or resized) See attached screenshot. Expected result: 1) ruler should refresh automatically when coverage data is changed, no matter whether source annotation is enabled or not OR 2) ruler should not draw any color if corresponding source code annotation is disabled ",2 +CLOV-1137,"Remove grover*.jar after build","A maven-clover2-plugin creates a groover*.jar file in $java.io.tmpdir directory. This JAR is next being dynamically added as a build dependency artifact. It must be available till end of the build. Unfortunately Maven has nothing like post-build-cleanup phase (which would be always executed at end of build). We need a workaround for this, for example: 1) Create a new Clover goal, like clover2:post-build-cleanup, which will remove this file. 2) Alternatively, find a way to add Clover groovy runtime classes to classpath, so that creation of JAR file would not be needed anymore. As soon as this bug is fixed, a corresponding update of Bamboo Clover Plugin is necessary. See linked issue. *Solution implemented:* Instead of playing with post-build cleanup, there are two new options available in taks (Ant) and clover2:setup / clover2:instrument goals (Maven): * skipGroverJar - if set to true it will not extract artifact at all (can be used only if there's no Groovy code in a project) * groverJar - target location of grover.jar file (fixed name and location instead of generating temporary file name in java.io.tmpdir) ",2 +CLOV-1138,"Create utility for upgrading third party libraries bundled in Clover","In Clover-for-Ant we have an upgrade.xml Ant script, which can repackage clover.jar and install new version of jfreechart library into it. We shall extend this script to support replacement of all third party libraries used in Clover. Such script should be also available for Clover-for-Eclipse and Clover-for-IDEA. Keep in mind that we have to retrotranslate third party classes during repackaging to have them compatible with Java 1.4. Keep in mind that we have to prefix java packages with ""clover."" in order to avoid name space conflicts. Packages: * com.google.gson * com.atlassian.* (Atlassian API) * com.keypoint.* * com.lowagie.* * gnu.cajo.* * it.unimi.dsi.fastutil.* * org.apache.commons.* * org.apache.log4j.* * org.apache.oro.* * org.apache.velocity.* * org.codehaus.groovy.antlr (?) * org.jfree * retrotranslator * org.apache.tools.ant.* (?) ",1 +CLOV-1140,"Make Clover-for-Android prototype publicly available","Take a ShipIt prototype prepared by Michael, merge with the latest Clover version, make it working on Eclipse ADT, publish manual how to use it on CAC/Clover-for-Android page. ",5 +CLOV-1141,"Refresh Clover-for-Scala prototype","Tasks: * take Scala prototype https://confluence.atlassian.com/display/DEV/ShipIt+12+Delivery+-+Clover+for+Scala, * change the code so that it will use new Clover Service Provider Interface - CLOV-1142 * make it working with the latest Clover code base (version 4.0.x), ",13 +CLOV-1142,"Expose a Service Provider Interface for Clover for handling new languages","Create a Service Provider Interface for Clover, which will allow to attach new source code and/or byte code instrumenters. It will allow us to create a pluggable architecture so that new programming languages (e.g. Scala, JRuby, Jython, Closure) could be supported. *Rough idea:* * new language instrumenters can be attached by META-INF/services ** they can provide some callback like canInstrument(File) or canInstrument(InstrumentationSource) ** clover shall pass file/instrumentation source to such instrumenter together with Clover's configuration and an open instrumentation session ** extension instruments on its own calling session.enterXyz()/exitXyz() methods ** extension writes output file on its own ** language instrumenter could work also with an Abstract Syntax Tree (e.g. Groovy or Scala - we may need a different way of attaching here) * new language renderers can be attached by META-INF/services - move to another issue? ",8 +CLOV-1143,"Remove obsolete pages from Clover 3.1 space","Hi Melanie, May I ask your team to delete following pages from CLOVER space? All of them are obsolete or available in spaces for older Clover releases. They are unnecessarily cluttering current documentation. https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.3.2+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.3+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.0+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.5.1+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.5.0+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.3+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.2+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.1+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.0+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.2-beta5+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.2-beta4+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.2-beta3+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.2-beta2+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.1-beta1+for+IDEA https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.3+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.2+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.0+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.5.1+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.5.0+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.3+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.2+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.0+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.2+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.1+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.2.1+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.1.0+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.3+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.2+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.1+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.0+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.0.b2_1+for+Eclipse https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.3+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.2+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.0+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.5.1+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.5.0+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.3+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.2+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.0+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.2+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.1+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.0+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.2.1+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.2.0+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.1.0+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0b2+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0b1+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0a5+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0a4+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0a3+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0a2+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0a1+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.3+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.2+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.1+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.0.0+for+Ant https://confluence.atlassian.com/display/CLOVER/Changes+in+2.6.0+for+Maven+2 https://confluence.atlassian.com/display/CLOVER/Changes+in+2.5.0+for+Maven+2 https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.3+for+Maven+2 https://confluence.atlassian.com/display/CLOVER/Changes+in+2.4.2+for+Maven+2 https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.2+for+Maven+2 https://confluence.atlassian.com/display/CLOVER/Changes+in+2.3.0+for+Maven+2 https://confluence.atlassian.com/pages/viewpage.action?pageId=110035179 https://confluence.atlassian.com/pages/viewpage.action?pageId=134873325 https://confluence.atlassian.com/pages/viewpage.action?pageId=103710921 https://confluence.atlassian.com/display/CLOVER/%5BTRASH%5D+Using+Clover+for+Maven+2+with+the+gwt-maven-plugin https://confluence.atlassian.com/display/CLOVER/%5BTRASH%5D+Using+Clover+with+the+GWT-maven+plugin https://confluence.atlassian.com/pages/viewpage.action?pageId=93683890 https://confluence.atlassian.com/pages/viewpage.action?pageId=71599635 https://confluence.atlassian.com/display/CLOVER/%5BTRASH%5D+Clover-for-Eclipse+User%27s+Guide https://confluence.atlassian.com/display/CLOVER/%28hidden+draft%29+Clover-for+Eclipse+Upgrade+Guide ",1 +CLOV-1144,"Support *.groovy files in src/main/java folder for groovy-eclipse-plugin","*Problem:* Clover fails during instrumentation of *.groovy files in case when sources are put in src/main/java directory, instead of src/main/groovy and when the groovy-eclipse-plugin is used. *Steps to reproduce:* * create a project with groovy-eclipse-plugin and maven-clover2-plugin * put a *.groovy file inside src/main/java * run build *Expected error:* {noformat} [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.201s [INFO] Finished at: Mon Sep 10 10:16:48 CDT 2012 [INFO] Final Memory: 7M/18M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal com.atlassian.maven.plugins:maven-clover2-plugin:3.1.7:setup (default-cli) on project test.project: Clover has failed to instrument the source files in the [C:\workspaces\workspace\TestProject\target\clover\src-instrumented] directory -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.atlassian.maven.plugins:maven-clover2-plugin:3.1.7:setup (default-cli) on project test.project: Clover has failed to instrument the source files in the [C:\workspaces\workspace\TestProject\target\clover\src-instrumented] directory org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217) org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319) org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) org.apache.maven.cli.MavenCli.main(MavenCli.java:141) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:597) org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) Caused by: org.apache.maven.plugin.MojoExecutionException: Clover has failed to instrument the source files in the [C:\workspaces\workspace\TestProject\target\clover\src-instrumented] directory com.atlassian.maven.plugin.clover.internal.instrumentation.AbstractInstrumenter.instrumentSources(AbstractInstrumenter.java:197) com.atlassian.maven.plugin.clover.internal.instrumentation.AbstractInstrumenter.instrument(AbstractInstrumenter.java:72) com.atlassian.maven.plugin.clover.CloverInstrumentInternalMojo.execute(CloverInstrumentInternalMojo.java:309) com.atlassian.maven.plugin.clover.CloverSetupMojo.execute(CloverSetupMojo.java:31) org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) ... 19 more [ERROR] [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException *** ERROR: No source files specified USAGE: com.cenqua.clover.CloverInstr [OPTIONS] PARAMS [FILES...] {noformat} A reason is that Java compiler is involved here, Clover is called, it filters out all files which do not have *.java extension and as a consequence it passes wrong argument to CloverInstr. *Solution:* 1) Add check to AbstractInstrumenter (maven-clover2-plugin) so it does not call CloverInstr in case no matching files are found 2) Add support for src/main/java, src/test/java directories for Groovy - probably in GroovySourceScanner + CloverInstrumentInternalMojo *Workaround:* Put Groovy files in correct location i.e. src/main/groovy - they'll be handled correctly by Clover. *Background:* According to groovy-eclipse-plugin documentation, they recommend putting groovy files inside java folder - it's not nice, but it's the fastest set-up. http://groovy.codehaus.org/Groovy-Eclipse+compiler+plugin+for+Maven",3 +CLOV-1148,"Implement integration with Maven Tycho Plugin","Currently Clover-for-Maven cannot handle maven build with the maven-tycho-plugin. More details here: https://answers.atlassian.com/questions/1919/maven-3-tycho-and-clover To be done: hack the maven-tycho-plugin and intercept its internal call of javac compiler and instrument sources on the fly.",4 +CLOV-1149,"Make possible to see instrumented sources in Clover-for-Eclipse","Clover-for-Eclipse: Clover instrumentation in performed in memory during compilation. As a consequence when there is any build error, we can see original source only and cannot check whether the problem lies in the Clover instrumenter itself. For example, in Clover-for-IDEA we can see instrumented sources because they're stored in temporary directory. To be implemented: add an option to get instrumented sources in Eclipse too.",1 +CLOV-1150,"Clover does not instrument groovy source files, (groovy-eclipse compiler) when located in src/main/groovy","When building a groovy project with maven, I am trying to get clover code coverage reports. With all source files in .java and in src/main/java, clover works fine. However, with all source files in .groovy and in src/main/groovy, clover can not instrument the files (clover2:instrument, or clover2:setup). Everything that I can find is saying that clover versions after 3.1.3 support the maven groovy eclipse compiler (so long as the groovy files are located in src/main/groovy). See this ticket: https://jira.atlassian.com/browse/CLOV-1021?page=com.atlassian.jira.plugin.system.issuetabpanels:changehistory-tabpanel There is another support ticket that I found that seems to cover the same issue, however I cannot access it. Here is the link https://support.atlassian.com/browse/CLV-5878 A partial output log is included here. I will try to come up with a small test project that I can upload here. Any help would be appreciated. ",5 +CLOV-1151,"Clover fails to find coverage snapshot files when IBM JRE is used","*Problem:* it seems that IBM JRE implementation differs from Oracle JRE in such way that Object.hashCode() can return a negative value. As a consequence, file name suffix generated for coverage snapshot and test slice snapshot may be composed not only of '0-9a-z_' characters, but also have minus ""-"" sign in it. As a result such file name does not match regular expression used for searching of coverage files and coverage is not read. *Workaround:* rename coverage snapshot file(s) and remove ""-"" character. ",1 +CLOV-1154,"Inconsistent popup menu in different IDEA versions","IDEA 10 and newer is not showing the ""Exclude from compile"" option when sources are instrumented. In IDEA9 it was working fine. See 'popup_menu_in_ideas.png' screenshot. My suspicion is that IDEA somehow does not treat instrumented file as a source code, thus hiding this option from popup menu. What's more, when you click on the ""Jump to source"" it opens the Explorer window, instead of opening the source file in IDEA. See also: META-INF/plugin.xml com.cenqua.clover.idea.CloverPlugin.initComponent() com.intellij.openapi.actionSystem.IdeActions; @NonNls String GROUP_COMPILER_ERROR_VIEW_POPUP = ""CompilerErrorViewPopupMenu""; com.intellij.compiler.imp.CompilerErrorTreeView.addExtraPopupMenuActions(); ",2 +CLOV-1155,"Simple installer for Clover-for-IDEA","When someone downloads the Clover-for-IDEA from www.atlassian.com he gets clover-idea-x.x.x.jar file. What to do next? Of course you have to open IDEA, select Settings > Plugins > Install from disk, but user might not know. Especially when taking into account that ""Install from disk"" is not available in older IDEA versions. New feature: provide simple installer for Clover-for-IDEA. When user double-clicks on a JAR, a GUI installer starts (class defined in MANIFEST.MF) which asks for location of IDEA installation. Simple check whether selected folder contains config/plugins directory and copy jar into given location. Show also message how it can be installed from IDEA GUI. Business value: makes Clover evaluation easier. ",2 +CLOV-1156,"Refresh clover.atlassian.com","The http://clover.atlassian.com/ page was not updated for last 2 years. Re-activate Bamboo builds related with this site to have live data. Add a link to this page on main Clover product page: http://www.atlassian.com/software/clover/overview ",1 +CLOV-1157,"Run with Clover as on a project with no Clover","Clover-for-Eclipse. When you have a project with Clover disabled, the ""Run with Clover as"" and ""Run optimized"" buttons are still active. It makes no sense, buttons should be grayed-out.",1 +CLOV-1158,"Test Run Explorer does not show test contribution with optimized run","When you execute optimized test runs, the Test Run Explorer does snow show test contribution data.",1 +CLOV-1159,"Create small legend for Top Risks and Quick Wins in Cloud report","Currently user does not know what the font size and colour means until he reads the documentation. Add small legend box or at least a single-line description for these two reports. Affects HTML report as well as Eclipse/IDEA views. ",1 +CLOV-1160,"Change default sort order in coverage report for packages/classes/methods","Coverage report - show the least covered packages/classes/methods first. Table should not start with the highest coverage (starting from 100%) at the top, because developer is not interested in code which is already covered and tested, but in white spots. Add the possibility to sort by any column. Affected: HTML/IDE",2 +CLOV-1161,"Add drop-down with two options for coverage","Add the ""drop-down"" listbox which will have ""show cumulative coverage"" and ""show coverage from last run"" options. It should be added in Eclipse and IDEA. Note that the ""span"" option is already available (Window > Preferences > Clover) but we can have either: * have time-based span or * set it to 0seconds which means load everything. Background reason: coverage is cumulative. Some customer have pointed out that coverage data for successive incremental change/save/compile/test cycles can lie and show coverage that's no longer there. That's because we aggregate all coverage data since the last full rebuild. We will hopefully have a better way of showing this in the future. In the meantime, scrubbing the coverage for a project and re-running the tests will show the coverage of tests just run. ",2 +CLOV-1162,"Generate cumulative statement / complexity metric for need of methodContext filtering","A method context has maxComplexity / maxStatements attributes which allow to reduce the scope of context filter for methods where these metrics are lower than defined level (by default maxComplexity/maxStatements is Int.MAX_VALUE, i.e. all methods are taken into account). Example: {code:xml} {code} However, customer reported a problem that it excludes methods containing inline classes, for instance: {code:java} // the getListener() method has only one statement: ""return ;"" // if you use // then the whole code block will be filtered-out, including the actionPerformed() method ActionListener getListener() { return new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println(""statement #1""); System.out.println(""statement #2""); } }; } {code} In the case above ActionListener() is an inner class so it has their own metrics. And because of fact that context filters are ""cumulative"" (so that whenever any code pattern is matched, then the whole block is excluded), the whole getListener() method is filtered-out, including inner class. *Solution:* We cannot change existing metrics (without breaking backward compatibility) and we cannot change the way how blocks are excluded (it would make no sense). But we can create new metrics called: cumulativeComplexity and cumulativeStatements. It would work as follows: * for every interface, class, enum or method find all inner classes, interfaces, enums or methods (*) ** this can be checked by matching occupied code regions (on a database level during metric calculation - preferred) or during instrumentation (code parser) * calculate cumulativeComplexity and cumulativeStatements by adding cumulative value from all inner objects to current entity complexity/statements value * add maxCumulativeComplexity / maxCumulativeStatments to Ant clover-setup/clover-instr and Maven clover2:setup / clover2:instr goals ** html reports would probably remain unchanged (just grey-out) (*) yes we should make code more flexible in order to make it ready to support code constructs like default methods in Java8 interfaces or Scala's functions inside functions etc ",8 +CLOV-1165,"Fix AbstractAntLogger","The AbstractAntLogger class logs the message only if Ant Task is not null: {noformat} protected void antLog(Project proj, Task task, String aMsg, int antLogLevel) { if (task != null) { proj.log(task, aMsg, antLogLevel); } } {noformat} As a consequence, no log is availalbe in case when code it's called outside Ant - problem was found in open-source Gradle Clover Plugin.",1 +CLOV-1166,"Clover does not work with Groovy 2.x","*Problem:* Clover instrumentation fails for Groovy 2.x with a stack trace like below: {noformat} BUILD FAILED c:\Work\support\clv-5892-groovyjarjarasm\tutorial\build.xml:32: java.lang.IncompatibleClassChangeError at com.atlassian.clover.instr.groovy.bytecode.RecorderGetterBytecodeInstruction.visit(RecorderGetterBytecodeInstruction.java:109) at org.codehaus.groovy.classgen.AsmClassGenerator.visitBytecodeSequence(AsmClassGenerator.java:1771) at org.codehaus.groovy.classgen.BytecodeSequence.visit(BytecodeSequence.java:64) at org.codehaus.groovy.classgen.asm.StatementWriter.writeBlockStatement(StatementWriter.java:81) at org.codehaus.groovy.classgen.asm.OptimizingStatementWriter.writeBlockStatement(OptimizingStatementWriter.java:155) at org.codehaus.groovy.classgen.AsmClassGenerator.visitBlockStatement(AsmClassGenerator.java:455) at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:112) at org.codehaus.groovy.classgen.AsmClassGenerator.visitStdMethod(AsmClassGenerator.java:319) at org.codehaus.groovy.classgen.AsmClassGenerator.visitConstructorOrMethod(AsmClassGenerator.java:276) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123) at org.codehaus.groovy.classgen.AsmClassGenerator.visitMethod(AsmClassGenerator.java:396) at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1056) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50) at org.codehaus.groovy.classgen.AsmClassGenerator.visitClass(AsmClassGenerator.java:180) at org.codehaus.groovy.control.CompilationUnit$14.call(CompilationUnit.java:786) at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1027) at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:564) at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:542) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:519) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:498) at org.codehaus.groovy.tools.FileSystemCompiler.compile(FileSystemCompiler.java:57) at org.codehaus.groovy.tools.FileSystemCompiler.doCompilation(FileSystemCompiler.java:213) at org.codehaus.groovy.ant.Groovyc.runCompiler(Groovyc.java:947) at org.codehaus.groovy.ant.Groovyc.compile(Groovyc.java:994) at org.codehaus.groovy.ant.Groovyc.execute(Groovyc.java:630) {noformat} *Reason:* RecorderGetterBytecodeInstruction extends org.codehaus.groovy.classgen.BytecodeInstruction and implements a following method: public void visit(groovyjarjarasm.asm.MethodVisitor methodVisitor) In Groovy 1.x MethodVisitor is an interface. In Groovy 2.x MethodVisitor is a class. Although RecorderGetterBytecodeInstruction compiles correctly with both Groovy versions, it fails at runtime during bytecode verification, becase visit() method gets different bytecode signature. *Solution:* Compile RecorderGetterBytecodeInstruction against two different Groovy versions. Load proper version using reflections at runtime. ",2 +CLOV-1167,"Grails Clover Plugin does not intercept 'testc' compiler","Grails 2.x has introduced a new compiler for building unit tests (from test/unit directory). The 'testc' task is the *org.codehaus.groovy.grails.test.compiler.GrailsTestCompiler* Build log looks like this: {noformat} |Compiling 1 source files ... [testc] ... \test\unit\clover\test\UnitTests.groovy |Compiling 1 source files ... [groovyc] ... \test\integration\IntegrationServiceTests.groovy {noformat} Clover does not intercept this compiler call (it supports Groovyc, Grailsc, GrailsCompiler). As a consequence unit tests are not instrumented and not included in coverage.",1 +CLOV-1170,"CloverOptimizerMojo does not support full include/exclude syntax","*Problem:* CloverOptimizerMojo does not support full include/exclude syntax, which can be handled by maven-surefire-plugin. Two cases are not handled right now: (1) multiple paths separated by comma {noformat} **/Test1.java, **/Test2.java {noformat} (2) regular expression instead of Ant-style pattern {noformat} %regex[.*Test.class] {noformat} See: http://maven.apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html *Workaround:* (1) use separate entries, like: {noformat} **/Test1.java **/Test2.java {noformat} (2) not available; user can try to replace regexp by set of Ant-style patterns *Implementation:* CloverOptimizerMojo relies an Ant-style patterns underneath. The CloverOptimizerMojo.createFileSet() method has {noformat} private FileSet createFileSet(Project antProject, final File directory, List includes, List excludes) { FileSet testFileSet = new FileSet(); ... testFileSet.appendIncludes((String[]) includes.toArray(new String[includes.size()])); } {noformat} fix for (1) - split every element in includes/excludes arrays using the comma delimiter and pass expanded arrays to appendIncludes() fix for (2) - find all elements from includes/excludes arrays having %regexp keyword, run file search on _directory_ using a filename matcher with regexp, create include/exclude for every file matched ",1 +CLOV-1173,"Add maxComplexity / maxStatements for Clover-for-Maven","Ant has extra maxComplexity and maxStatements attributes available which are not supported in Maven plugin, for example: {code:xml} {code} in Maven we have _name_ and _regexp_ attributes only: {code:xml} ((.* )?public .*(get|set|is)[A-Z0-9].* {code} *Possible solution* Create which would accept entries like: {code:xml} simple_method (.* )?public .*(get|set|is)[A-Z0-9].* 10 10 20 20 ... more ... {code} Alternatively, extend parsing of existing tag so whenever it finds the entry it will not treat it as name of new context but as a structure from sample above. See also CLOV-1162.",2 +CLOV-1175,"Make HTML report more consistent about number of classes","See attached screenshot. HTML report should list interfaces too.",2 +CLOV-1176,"The clover-log should use default test detection if testSources are not defined","*Steps to reproduce:* 1) Add following target to clover-ant-X.Y.Z/tutorial/build_completed.xml: {code:xml} {code} 2) Run {noformat} ant -f build_completed.xml -Dtest.target=test.run clover.all {noformat} It will produce output like: {noformat} clover.log: [clover-log] Report for code : APPLICATION [clover-log] Coverage:- [clover-log] Methods: 61/62 (98,4%) [clover-log] Statements: 171/178 (96,1%) [clover-log] Branches: 40/48 (83,3%) [clover-log] Total: 94,4% ... [clover-log] Report for code : TEST [clover-log] Coverage:- [clover-log] Methods: 0/0 ( - ) [clover-log] Statements: 0/0 ( - ) [clover-log] Branches: 0/0 ( - ) [clover-log] Total: - ... [clover-log] Report for code : ALL [clover-log] Coverage:- [clover-log] Methods: 61/62 (98,4%) [clover-log] Statements: 171/178 (96,1%) [clover-log] Branches: 40/48 (83,3%) [clover-log] Total: 94,4% {noformat} *Result:* All classes were qualified to APPLICATION; if we compare it with XML or HTML reports, test and application classes are distinguished there. This is normal behaviour because requires the tag to be defined, for instance: {code:xml} {code} works fine. *Improvement:* Try to use the [default test detection algorithm|https://confluence.atlassian.com/display/CLOVER/Clover+test+detection] in order to find test classes. It would work in the same way as [|https://confluence.atlassian.com/display/CLOVER/clover-setup] task when the tag is not defined. ",3 +CLOV-1177,"Errors in ErrorLog when toggling between projects with Dashboard view active","1) Toggle between cloverized projects. Dashboard visible. Message: Unexpected URI in the Dashboard view: C:\Users\Marek\.workspace-eclipse-3.4.2\Moneybags\.clover\report\dashboard-eclipse.html {noformat} java.net.URISyntaxException: Illegal character in opaque part at index 2: C:\Users\Marek\.workspace-eclipse-3.4.2\Moneybags\.clover\report\dashboard-eclipse.html java.net.URI$Parser.fail(Unknown Source) java.net.URI$Parser.checkChars(Unknown Source) java.net.URI$Parser.parse(Unknown Source) java.net.URI.(Unknown Source) com.cenqua.clover.eclipse.views.dashboard.DashboardLocationListener.changing(DashboardLocationListener.java:62) {noformat} 2) Right click on a closed project, which was cloverized before. Dashboard view visible. Message: Error creating the dashboard {noformat} java.lang.NullPointerException com.cenqua.clover.eclipse.views.dashboard.DashboardGenerator.execute(DashboardGenerator.java:41) com.cenqua.clover.eclipse.views.dashboard.DashboardView.generateReport(DashboardView.java:100) com.cenqua.clover.eclipse.views.dashboard.DashboardView.projectSelected(DashboardView.java:91) com.cenqua.clover.eclipse.views.dashboard.DashboardView.selectionChanged(DashboardView.java:130) org.eclipse.ui.internal.AbstractSelectionService.firePostSelection(AbstractSelectionService.java:179) org.eclipse.ui.internal.AbstractSelectionService$2.selectionChanged(AbstractSelectionService.java:71) {noformat} 3) Cloverized project selected in Package Explorer, Dashboard view opened. Close the selected project. Message: Problem generating Dashboard report {noformat} java.lang.NullPointerException com.cenqua.clover.eclipse.views.dashboard.DashboardView.ensureReportFolderCreated(DashboardView.java:107) com.cenqua.clover.eclipse.views.dashboard.DashboardView.generateReport(DashboardView.java:97) com.cenqua.clover.eclipse.views.dashboard.DashboardView$1.run(DashboardView.java:153) org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) {noformat} ",1 +CLOV-1178,"Fix ruler coloring when include coverage from passed only is enabled","Eclipse. Java Editor. Left ruler showing coverage colours (green/yellow/blue). Rules shows ""yellow coverage"" when the ""include from passed only"" option is enabled. There should be no yellow colour in such case. Note: source code is highlighted correctly, metrics are fine too. See screenshot.",1 +CLOV-1179,"Highlight whole method body if method is not covered","If given method was not executed at all, the HTML report shows red highlighting only for method header. It's not a bug in code - our Velocity templates are just written this way. We should highlight the whole method body in red - in the same way as Eclipse/IntelliJ does. See screenshot. ",5 +CLOV-1181,"Multiple test cases in Test Run Explorer in IDEA","Quickly click 'run' button in order to execute multiple sets of unit tests in parallel. IDEA runs them in parallel, as a consequence we've got duplicated test cases on a list. See attached screenshot. Affects all supported IDEA versions. We should have test cases from last test run only.",2 +CLOV-1182,"Multiple test cases in Test Runs view in Eclipse","If unit tests are executed several times since the last build, the Test Run view shows multiple test results. Not a bug actually, but it could be improved by showing last results only. See screenshot. Affects all supported eclipse versions. ",3 +CLOV-1183,"Cloud Report in IDEA shows interfaces","Cloud Report in IDEA is inconsistent with a Cloud Report in Eclipse - it shows interfaces, which does not actually have any executable code. It shows also annotations. Fix: don't list objects (interfaces, classes) which do not have any statements in the Cloud Report. Note that simple check if !isInterface() is not sufficient as interfaces in Java8 will have default methods with code.",2 +CLOV-1184,"Check Now button does not work if project is not opened in IDEA","Install the latest Clover plugin version in IDEA. Click Settings > IDE Settings > Clover > Auto Update > Check now button. If project is opened then pop-up is shown that the latest version is already installed. If no project is opened (i.e. you're on a IDEA's welcome page), pop-up is not shown. See attached images. Problem occurs on IDEA 11.x and 12.x. ",1 +CLOV-1185,"Test optimization is broken in IDEA11 and above","JetBrains have changed sth in IDEA 11 regarding unit test run configuration, as a consequence Clover does not ""see"" and thus does not optimize all unit tests. Problem does not occur on IDEA 9.x, 10.x, 10.5.x. It is present on IDEA 11.x and probably also on 12.x. See attached images.",2 +CLOV-1186,"IDEA12 JavaSourceTransformingCompiler functionality has been removed","Since build 122.694 Clover 3.1.8 cannot work with IDEA12 EAP, because the ""external"" build functionality was introduced and the JavaSourceTransformingCompiler is no longer supported. See issue http://youtrack.jetbrains.com/issue/IDEA-94612",5 +CLOV-1187,"Don't spam the console with println anytime clover grails plugin is installed","From looking at the _Events.groovy hooks in the plugin, there are several println statements which will execute in all contexts, not just testing and not just when clover.on is specified. Specifically, the set classpath and compile start/end hooks will happen everytime any Grails command is run. This is bad practice for a plugin. The println statements should be changed to use the grailsConsole which is available automatically println ""foo"" => grailsConsole.log ""foo"" or grailsConsole.updateStatus ""foo"" Secondly, this should probably be wrapped in a helper which only prints if the the clover is enabled, ie: def logStuff(msg) { if( config.on ) grailsConsole.log msg }",1 +CLOV-1188,"Aggregate coverage by current author and commit regex","I love CIJ. When I use git, I find myself making a lot of commits, and I want to see my test coverage aggregated by the jira ticket I've put in my commit log. For example, let's say I'm working on a project for 3 days. I might make 50 commits. All throughout my development, I'd like to keep a running track of how the test coverage is *for my code, bounded by a commit regex*. In other words, I'd like to use something like git blame, married with coverage, to give me feedback like ""Hey Zim, the feature you're working on only has 52% coverage"". Awesome-er still would be something like the class coverage pane, but using only lines I've changed. So I could have a window that shows the classes I've changed, and a summary of the coverage for the lines that I've changed, again bounded by a the jira ticket in my commit logs. This would be crazy to do in something other than a lightning fast DVCS like git or mercurial...but I have totally drunk the git cool aid.",13 +CLOV-1190,"The tag from is not passed to groovyc","As in subject. As a consequence, the DefaultTestDetector is always used for Groovy code. *Fix:* Build proper TestDetector instance in GroovycSupport, which will be next serialized into InstrumentationConfig (instrumentation.ser file), so that next the Grover can deserialize it and pass to InstrumentingCodeVisitor. ",2 +CLOV-1192,"Create ClassInfo objects for anonymous inline classes","During implementation of CLOV-1162 I've found that anonymous inline classes does not have their own ClassInfo object crated. Instead of this, methods of inline class are added to the enclosing class. For instance, a following code: {code:java} public class AggregatedMetrics { /** * Inner class, case with a method having an inline anonymous class * statements = 3 (sum of direct methods' statements) * aggregatedStatements = 5 (sum of direct methods' aggregated statements) */ class C { /** * Method: statements = 2; aggregatedStatements = 4 (method's statements + inline class aggregated statements) */ Iterator methodThree() { int d = 4; /** * Inline class: statements = aggregatedStatements = 2 (sum of its methods) */ return new InstrumentationSessionImplTestSample2() { /** statements = aggregatedStatements = 1 */ public boolean hasNext() { return false; } /** statements = aggregatedStatements = 1 */ public Object next() { return null; } /** statements = aggregatedStatements = 0 */ public void remove() { } }; } /** statements = aggregatedStatements = 1 */ void methodFour() { int e = 5; } } } {code} is stored in clover database in this way: {code:xml} {code} It means that on reports the AggregatedMetrics.C class is presented as having 5 methods, while it has 2 actually. It's not a bug. There was a design decision to not present anonymous classes in a report. Possible improvement: * create ClassInfo objects for anonymous classes * add option for reporting whether to show anonymous classes (like InstrumentationSessionImplTestSample2$1) or not ",5 +CLOV-1193,"as a developer I don't need to run Clover on JDK1.4 anymore","*Idea:* Sun Java 1.4 has: * end of public updates - Oct 2008 * end of Premier Support - Feb 2010 * end of Extended Support - Feb 2013 * see http://www.oracle.com/technetwork/java/eol-135779.html IBM Java 1.4: * is no longer Generally Available (GA) since Dec 2004; * its End Of Servcie (EOS) will expire on September 2013: * see https://www.ibm.com/developerworks/java/jdk/lifecycle/ According to various sources, most popular are Java6 and Java7; Java1.4 has a fraction of market right now: * http://www.statowl.com/java.php although the report above shows Java version in web browser. Production environment may be different (especially regarding IBM Java). *Benefits:* Dropping support for Java 1.4 would ease Clover development a lot, as we could: * directly use Java5 generics in code * replace raw collections (List, Map, Set etc) by typed collections (List etc) in code * get rid of Retrotranslator (2x faster build ) * it opens a door to introduce generic-based libraries in Clover code (for example replace Apache Commons by Guava) *Tasks:* * update Supported-Platforms page * remove retrotranslator from build scripts * update bamboo / maven configurations * affects Clover, Clover-for-Maven2&3, Clover-for-Eclipse, Clover-for-IDEA (note that Clover-for-Grails already need JDK1.5 or above) *Out of scope:* * replacing existing raw collections by typed ones (like List -> List ), introducing foreach loops etc ** this will be done gradually during daily development ",1 +CLOV-1195,"Groovy 2.x @CompileStatic annotation causes static methods to be ignored by Clover","Adding @CompileStatic to a tested Groovy class results in 0% coverage for static methods. e.g. {code} //All ok here class MyClass{ String sayHello(){ 'hello' //Full coverage shown by Clover } static String sayHelloAgain(){ 'hello again' //Full coverage shown by Clover } } //Same class with the annotation @CompileStatic class MyClass{ String sayHello(){ 'hello' //Full coverage shown by Clover } static String sayHelloAgain(){ 'hello again' //***No coverage shown by Clover*** } } {code} Can anyone confirm this? Thanks. ",8 +CLOV-1196,"Add testSources parameter for clover2:clover mojo","The Ant task has an optional nested parameter where user can specify an Ant path that Clover should use when looking for source files. Thanks to this, it is possible to generate report using sources from a different location (on a different machine, for instance). Such option is missing for Maven clover2:clover MOJO. The workaround which can be used is to create a custom report descriptor, as described on https://confluence.atlassian.com/display/CLOVER/Creating+custom+reports, which is not convenient actually. Fix: add parameter for clover2:clover MOJO.",1 +CLOV-1197,"Perform migration of CLMVN and CLMVNONE from studio.plugins.atlassian.com","The site studio.plugins.atlassian.com is deprecated. All new projects shall be migrated to bitbucket.org or eventually to ecosystem.atlassian.net. *Deadline:* * final deadline 5.03.2013 * it's recommended to finish it before 5.02.2013 *Scope:* -1) Migrate SVN repositories- * https://studio.plugins.atlassian.com/svn/CLMVN * https://studio.plugins.atlassian.com/svn/CLMVNONE -to Mercurial on Bitbucket- -2) Migrate Bamboo builds (if necessary) from- * https://studio.plugins.atlassian.com/builds/browse/CLMVN-TRUNK -Note: CLMVNONE has no builds configured- -to new Bamboo location.- -3) There is no need to migrate Wiki pages and Code reviews (practically empty).- -4) Migrate JIRA issues from- * https://studio.plugins.atlassian.com/browse/CLMVNONE * https://studio.plugins.atlassian.com/browse/CLMVN -to- * https://jira.atlassian.com/browse/CLOV -if this is feasible and set component ""Maven 1 Plugin"" and ""Maven Plugin"", respectively.- -Alternatively, create new issue trackers on Bitbucket or Ecosystem, copy all issues ""as is"" and set projects read-only with a message that issue tracking shall be done in JAC CLOV project.- -5) Update build scripts (Maven / Ant) and handle:- * -new repository type (tagging)- * -new way of deployment of binaries (optional)- -Update also BEAC builds.- ",3 +CLOV-1202,"Compile maven-clover2-plugin using JDK1.5","Currently we have two executions of maven-compiler-plugin: * one with source/target=1.3 for src/main * one with source/target=1.5 for src/test Use source/target=1.5 for the whole module. ",1 +CLOV-1203,"Update Supported-Platforms page","On http://confluence.atlassian.com/display/CLOVER/Supported+Platforms: * set JRE/JDK = 1.5 or later * add footnote that support for JDK 1.5 has ended with 3.1.x ",1 +CLOV-1204,"Remove retrotranslator","Remove all retrotranslator stuff: * jar files (several extlib locations) * build.xml and upgrade.xml files * about boxes in Eclipse and IDEA * etc/rights license files ",1 +CLOV-1205,"CLMVNONE new property: maven.clover.instrumentationLevel","Moved from https://studio.plugins.atlassian.com/browse/CLMVNONE-14 This should only be set to 'method' if used in conjunction with Test Optimization if the default level (statement) is not performant enough. Valid values are ""statement"" and ""method"".",1 +CLOV-1206,"CLMVNONE Use includes, instead of nested include to allow more than one pattern when merging","Moved from https://studio.plugins.atlassian.com/browse/CLMVNONE-9 For Maven1 plugin: It would be better to change the following code in the clover:merge goal from: {noformat} {noformat} to: {noformat} {noformat} ",1 +CLOV-1207,"CLMVNONE Integrate Distributed coverage","Moved from https://studio.plugins.atlassian.com/browse/CLMVNONE-13 Integrate Distributed coverage with Clover-Maven1-Plugin ",3 +CLOV-1208,"Show warning if new update is out of scope of the current license","Case: * user has a valid license key with a certain end-of-maintenance date * new Clover version is released but the release date is later than maintenance end * IDEA / Eclipse gives user an ability to upgrade but * after upgrading user cannot use Clover anymore (!) Improvement: * check end-of-maintenance date from current license key, if it is < than release date of the upgrade we want to download, put additional warning about it the the upgrade dialog box",1 +CLOV-1209,"Auto update version check reports new version when version strings are identical","Under File > Settings > IDE Settings: Clover > Auto Update, when you press ""Check now"" a window pops up saying: ""New version available: 3.1.10.v20130108000000, you have 3.1.10.v20130108000000 Would you like to upgrade?"" ",3 +CLOV-1227,"Add element for and ","Enhance Ant tasks by adding new sub-types and attributes: {code:xml} {code} coverageRecorder * fixed - default value as now, fixed-size coverage recorder requiring presence of clover.db to read the size * growable - like for Android, no need to have clover.db * shared - for Grails app, not only with dynamic size, but also reusing the same instance of recorder if initstring is the same Parse it on Ant level, pass it to InstrumentationConfig and Instrumenter. ",2 +CLOV-1228,"Document element on CAC","Write documentation for: * http://confluence.atlassian.com/display/CLOVER/clover-setup * http://confluence.atlassian.com/display/CLOVER/clover-instr * https://confluence.atlassian.com/display/CLOVER/Advanced+setup+configuration ",1 +CLOV-1229,"Add profiles for InstrumentationConfig",NULL,1 +CLOV-1230,"Embed clover profile array in instrumented classes","Enhance existing instrumentation and embed an array of CloverProfile in instrumented sources/classes, pass this array to Clover.getRecorder(). Java: source based instrumentation RecorderInstrEmitter + Clover.getRecorder() - add static field for _CLR class of *CloverProfile[]* type Groovy: byte code instrumentation - instantiate new CloverProfile[] { new CloverProfile(), ... } array at getRecorder() call ",5 +CLOV-1231,"Use GrowableBitSet for PerTestRecorder.One","In PerTestRecorder.One - wrap 'coverage' and coverageShortcut into a helper class (x) set() method - if index is out of bounds then it shall resize 'coverage' BitSet and 'coverageShortcut' array (/) refactor PerTestRecorder.Any, None, One, Many to top-level classes (/) refactor ThreadVisibilityStrategy to top-level class (/) write unit tests for (/) ThreadVisibilityStrategy.SingleThreaded ThreadVisibilityStrategy.Synchronized ThreadVisibilityStrategy.Volatile ",3 +CLOV-1232,"Create GrowableBitSet class","extend CloverBitSet, add() method shall check index vs size() and call growToInclude(); make it thread-safe - check how antlr.collections.impl.BitSet.growToInclude() is implemented ",2 +CLOV-1235,"Dynamically select coverage recorder based on clover.profile","Clover.getRecorder(): Read -clover.profile system property and if securityexcetion or null then fallback to ""default"". If list of profiles is empty or given profile name was not found, fallback to fixed coverage recorder. Should read coverageRecorder value and instantiate proper recorder type Should fetch from cache using one of: recorderKey = initString + """" + dbVersion + """" + cfgbits; recorderKey = initString; Add debug log messages for actions taken. Prepare necessary tests for java and groovy (assert on log messages). ",2 +CLOV-1236,"Add 'clover.enabled' system property","If set to 'false' it should disable recording of the coverage data at runtime.",1 +CLOV-1237,"as a developer I'd like not to deploy clover.jar to app server","*Embed clover-runtime.jar into created JAR/WAR/EAR* *Problem:* Instrumenting code by Clover is not enough, user has to manually add clover.jar to the runtime classpath. Otherwise it gets ""ClassNotFoundException com_cenqua_clover/CoverageRecorder"" error. There are over 6'000 views on answers.atlassian.com about this problem (it's #1 on the list) *Solution:* Create a possiblity to automatically or manually embed clover-runtime.jar into produced JAR/WAR/EAR artifacts. *Tasks:* 1) (/) Restructure Clover modules and find exact set of runtime classes, create clover-runtime.jar artifact out of it (will be published on Maven Central). Such subset was already found for Clover-for-Android, but it does not have classes for Distributed Coverage feature. See linked issue. 2) Create Ant task like which will allow to manually put runtime classes into it. 3) Check if it would be possible to intercept all calls as well and do it automatically. Add option to disable this automatic integration and/or to specify regular expression pattern which jars shall be enhanced. 4) Create Maven goal like clover2:embed-runtime-jar with property. 5) Check how to automatically embed Clover runtime classes. Possibilities: * extract clover-runtime.jar into target/classes or target/classes-clover * scan build reactor, intercept packaging tasks like maven-ear-plugin, maven-jar-plugin, maven-rar-plugin, maven-war-plugin, maven-assembly-plugin * modify maven project at runtime and add clover:clover-runtime dependency 6) Eclipse integration - we already have -Xbootclasspath for ""Run with Clover as..."" but it's not enough if user has web application for example. Extract clover-runtime.jar into project's build folder so that other packaging tools could automatically pick these classes. Add pre-build or post-clean event handler to make sure that these classes will be still present after rebuild. Add some option in Window > Preferences or Project > Properties for this. 7) IDEA integration - put these classes into out/production and out/test. Add option in File > Settings > Project Settings or File > Settings > IDE Settings for this. 8) Grails integration - t.b.d.",40 +CLOV-1238,"Split clover-core into clover-runtime + clover-core","1) Use class dependency analyzer. Check for classes loaded via reflections too!!! (/) _class dependency analyzer was also used to strip third party libraries from unused classes_ 2) Move runtime classes to clover-runtime module. (/) 3) -Rename packages to com.atlassian.clover.runtime.* but keep few core classes in com_atlassian_clover. Reason: Clover-for-Ant will still have single clover.jar probably and it will use FileInputStream(clover.jar) to dynamically extract classes form archive so we must be able to distinguish them.- (/) _cancelled; too many changes in referenced classes and runtime still ""borrows"" few classes from core_ 4) Enhance build script to publish this as com.atlassian.clover:clover-runtime artefact on Atlassian Central and Maven Central. (/) Note: - for backward compatibility clover-core shall still contain runtime classes and it's name will not change (com.atlassian.clover:clover) (/) - -we can add dependency to clover-runtime in pom.xml, however - just to keep programmers informed about this change- (/) _dependency not added as clover-core already bundles the clover-runtime_ 5) Update documentation on CAC and inform that new, small artifact is available since version 4.0.x. (/) _done_ 6) Update UML in clover-maven-module-structure.graphml (/) _done_ 7) Test it with Clover-for-Android (original clover-core exceeds method limit in Dalvik image) (/) _couldn't test as Android Studio uses Gradle now and is based on IDEA not Eclipse_",5 +CLOV-1239,"Create task","Create Ant task: {noformat} {noformat} which will put all Clover's runtime classes into targetFile. Unzip all com_cenqua_clover.* and com.atlassian.clover.runtime.* classes from clover.jar archive which is currently on a classpath (we've got a trick how to find it - see searching for clover.license) into a temporary directory and next put them into jar (use Ant task for this or handle zip directly).",3 +CLOV-1240,"Create clover2:embed-runtime-jar goal","Create MOJO for: {noformat} clover2:embed-runtime-jar {noformat} which will read the property and do the same what Ant task does. Difference: we might use maven-assembly-plugin and download clover-runtime artifact for this.",3 +CLOV-1241,"Maven extracts clover-runtime into target/classes or target/classes-clover","Automatic integration for unknown plug-ins: extract clover-runtime artifact into current build folder (target/classes for clover2:setup and target/classes-clover for clover2:instrument). Thanks to this these runtime classes might be automatically picked up and packaged. Check if there is any Maven's build property holding list of classes which have to be updated. Add configuration option for this, like: {noformat} extractCloverRuntimeIntoTargetClasses=true {noformat} ",3 +CLOV-1242,"Maven: intercept maven-jar-plugin and add clover-runtime","Check if it would be possible to define some Maven property for maven-jar-plugin which would allow to define directory or list of files to be added to the archive. If yes, then extract clover-runtime into e.g. target/clover/runtime (note: it shall not interfere with CLOV-1241 somehow) and pass it to maven-jar-plugin. ",5 +CLOV-1243,"Maven: intercept maven-ear-plugin and add clover-runtime","The same as CLOV-1242 but for maven-ear-plugin",3 +CLOV-1244,"Maven: intercept maven-rar-plugin and add clover-runtime","The same as CLOV-1242 but for maven-rar-plugin",3 +CLOV-1245,"Maven: intercept maven-war-plugin and add clover-runtime","The same as CLOV-1242 but for maven-war-plugin",3 +CLOV-1246,"Maven: intercept maven-cargo-plugin and add clover-runtime dependency","The maven-cargo-plugin is the most popular plugin for running in-container tests. Add for clover-runtime there. Add configuration option to have a possibility to disable this.",5 +CLOV-1247,"Eclipse: extract clover-runtime classes into build directory","Extract clover-runtime.jar into project's build folder so that other packaging tools could automatically pick these classes. Add pre-build or post-clean event handler to make sure that these classes will be still present after rebuild. Add some option in Window > Preferences or Project > Properties for this.",5 +CLOV-1248,"IDEA: extract clover-runtime classes into build directories","IDEA integration - put these classes into: * out/production and * out/test. Add option in File > Settings > Project Settings or File > Settings > IDE Settings for this.",5 +CLOV-1249,"Grails: extract clover-runtime into build directory","Usually it's here: \.grails\X.Y.Z\projects\\classes",8 +CLOV-1250,"Prepare integration tests for GrowableCoverageRecorder","Integration tests like: * GrowableCoverageRecorder on a large code base * GrowableCoverageRecorder with different strategies ** PerTestRecorder.One / Many / None ** ThreadVisibilityStrategy.SingleThreaded / Volatile / Synchronized => especially check if/how per-test code coverage is affected by multithreaded tests of multithreaded application * GrowableCoverageRecorder with DistributedCoverage ",5 +CLOV-1251,"Prepare integration tests for SharedCoverageRecorder","Integration tests like (all with partial global and per-test coverage): * SharedCoverageRecorder with single InstrumentationSession and many classes * SharedCoverageRecorder with multiple InstrumentationSessions, classes from sessions running together * SharedCoverageRecorder with multiple clover databases (different initstrings) * SharedCoverageRecorder with the same class compiled multiple times, different versions are running with coverage measurement, ",5 +CLOV-1253,"Some of per-test recording strategies do not work for multi-threaded applications","*Introduction* We've got five per-test recording strategies: * Diffing - clover.pertest.coverage=diff * Null - clover.pertest.coverage=off * SingleThreaded - clover.pertest.coverage= and clover.pertestcoverage.threading= - DEFAULT POLICY * Synchronized clover.pertest.coverage= and clover.pertestcoverage.threading=synchronized * Volatile - clover.pertest.coverage= and clover.pertestcoverage.threading=volatile *Current status* 1) A SingleThreaded does not work with multi-threaded apps. Of course it's designed for single thread only. But at least it should have a correct value of coverage for a test case from a current thread. Expected number of hit counts is between: {noformat} hits(current test) <= ... <= hits(curent test + all other concurrent tests) {noformat} but currently actualHits can be < than hits(current test) due to fact that CloverBitSet.set\(n\) is not thread-safe. 2) A Volatile strategy has a similar problem. CloverBitSet.set\(n\) is not thread safe. Starting/ending of test slices works fine. 3) A Synchronized is correct because we've got 'CloverBitSet.set\(n\)' wrapped in a synchronized block. Starting/ending of test slices works fine. 4) A Diffing needs more tests. *Possible fix* CloverBitSet could have two variants: * compact - store hits as bit mask in long[] array - set\(n\) is not thread-safe, can be used for report generation as it consumes less memory * exploded - store hits as boolean[] array - set\(n\) \{ arr[n] = true \} would be thread-safe, used for runtime recording; it consumes 8x more memory but on the other hand we usually don't have 10'000 tests running in parallel; number of parallel tests is ~ number of processor cores available ",5 +CLOV-1254,"Add Ant dependendency to com.cenqua.clover:clover maven artifact","Problem occurs in Gradle framework. When developer declares dependency to Clover artefact and tries to instrument project with Clover, it fails with a not-very-informative error: {noformat} [clover-setup] Detected groovyc compiler org.codehaus.groovy.ant.Groovyc [groovyc] Compiling 1 source file to ....... [groovyc] ERROR: Clover-for-Groovy encountered an error while loading config: {noformat} Debug logging reveals more information: {noformat} [groovyc] ERROR: Clover-for-Groovy encountered an error while loading config: Clover-for-Groovy encountered an error while loading config: : org/apache/tools/ant/BuildException [groovyc] java.lang.NoClassDefFoundError: org/apache/tools/ant/BuildException [groovyc] java.lang.Class.getDeclaredFields0(Native Method) [groovyc] java.lang.Class.privateGetDeclaredFields(Unknown Source) ... [groovyc] com.atlassian.clover.instr.java.InstrumentationConfig.loadFromStream(InstrumentationConfig.java:439) [groovyc] com.atlassian.clover.instr.groovy.Grover.newConfigFromResource(Grover.java:241) [groovyc] com.atlassian.clover.instr.groovy.Grover.(Grover.java:210) {noformat} A reason is that normally this code is being called from Ant so the ant.jar is provided. In Gradle it's not available by default. Workaround: add ant.jar dependency in the project build file. ",4 +CLOV-1255,"Prepare code example for Grails","Prepare sample Grails project with domain classes, controllers and unit tests which will use the 'shared' coverage recorder.",2 +CLOV-1257,"Add clover.coverageRecorder field for Clover-for-Grails plugin","*A follow-up of CLOV-1189:* Support the coverageRecorder natively in the plugin config. It would be nice to go back to using the simpler configuration instead of the setuptask/reporttask closures. Like: {noformat} clover { coverageRecorder: 'SHARED' } {noformat} *Implementation:* If coverageRecorder field is defined, then create a single profile named ""default"" with coverageRecorder as specified and undefined distributedCoverage. In case clover.setuptask is specified, then settings from this closure will override clover.coverageRecorder value. ",3 +CLOV-1258,"Upgrade third party libraries used by Clover","Upgrade third party libraries to their latest versions: * jebrains annotations 13.0 (/) * ASM 5.0 (/) we're using ASM 3.0, 4.1 and 5.0 actually (for different purposes) * commons-codec 1.9 (/) * commons-collections 3.2.1 (/) * commons-lang 2.6 (/) * guava 18.0 (/) * JCommon 1.0.23 (/) * JFreeChart 1.0.19 (/) * Log4J 1.2.17 (/) * Velocity 1.7 (/) ",8 +CLOV-1259,"Reduce friction in tutorial","Make Clover evaluation easier by simplifying the tutorial. The build.xml shall contain full Clover set-up so that just typing ""ant"" shall produce all reports. So swap build.xml <-> build_completed.xml, fix ""test"" target name, add default=""clover.all"" etc. Futhermore, Ant and Maven configuration in tutorial shall be unified - use 'target' directory for both of them. Get rid of clutter like 'clover', '.clover', 'build' directories. Update tutorial page on CAC. Consider adding groovy-all-1.7.0.jar into /lib directory so that user won't need to define GROOVY_HOME path.",5 +CLOV-1260,"Add url for 'utils.js' home page","In Clover-for-Eclipse and Clover-for-IDEA ""About"" dialogs the Utils.js link does not open the library home page. ",2 +CLOV-1261,"PDF report with ""include failed test coverage"" option fails","Eclipse Install Clover-for-Eclipse, open tutorial project, select Run new report > PDF report > select ""Include failed test coverage"" > click Finish. PDF report generation fails with error log message: ""The JVM report process failed with error code 1 - see log for details"" !pdf_fail.png! Increasing heap size from 512M to 768M solved the problem. To do: check why such small project requires so much memory. Check also PDFReporter, Clover-for-IDEA.",2 +CLOV-1262,"IDEA Darcula theme ignores ","Clover's ""About"" dialog looks ugly when the ""Darcula"" theme is selected in IDEA 12. Despite having
in JEditorPane(""text/html""), it shows table with a border. Example: !clover_about_idea12_themes.png!",3 +CLOV-1263,"Race condition in IDEA during full rebuild and test execution","Clover-for-IDEA. Race condition during database cleanup and running unit tests at the same time. Steps to reproduce; 1. Open ""Moneybags"" tutorial project 2. Prepare 'run all unit tests' configuration 3. Click ""Delete Coverage Database"" button in the ""Cloverage"" view 4. Click ""Rebuild now"" in the prompt dialog 5. Quickly click ""Run (Shift+F9)"" Problem: Project is being rebuilt and clover.db is recreated, at the same time unit tests are compiled and also clover.db is being modified. There's a warning in console log like this: {noformat} WARN: CLOVER: Clover database: 'C:\Work\release\testing-sandbox\clover-ant-3.1.11\tutorial\.clover\coverage.db' is no longer valid. Min required size for currently loading class: 172, actual size: 96 WARN: CLOVER: Coverage data for some classes will not be gathered. Tests taking too long? Try Clover's test optimization. 2 test classes found in package '' {noformat} ",8 +CLOV-1264,"Performance problem with SHARED coverage recorder in Grails app","Follow up of CLOV-1189. {noformat} setuptask = { ant, binding, plugin -> ant.'clover-setup'(initstring: "".clover/common.db"") { ant.fileset(dir: ""grails-app"", includes: ""**/domain/**, **/controllers/**, **/jobs/**, **/services/**, **/taglib/**, **/utils/**"") { } ant.fileset(dir: ""src"", includes: ""**/*.groovy, **/*.java"", excludes: ""**/script@*.groovy, **/system/generator/**, **/system/database/generators/**, **/castor/**"") { } ant.fileset(dir: ""test"", includes: ""**/*.groovy"") { } // ant.testsources(dir: ""test"", enabled: false) { } ant.profiles { ant.profile(name: ""default"", coverageRecorder: ""SHARED"") } } } {noformat} If I uncomment the testsources enabled:false line, it runs about as quickly as before. Normally our coverage run takes about 42 minutes. With the above configuration it's been running for about 3 hours and is about half finished.",5 +CLOV-1265,"as a developer I'd like to track build events in IDEA12 external build","*Prepare empty plugin for external build.* analyze external build API, prepare a simple plugin which will log compilation progress (module name, file name being compiled) and send notifications about it to IDE; it should also notify about ""compilation finished"" event.",5 +CLOV-1266,"Check how clover.db can be accessed from build server and IDE processes at once","probably there are two possible ways to interact with build server process and the IDEA IDE process: 1) build server performs (parallel) instrumentation in memory and at the end of the whole build writes or updates clover.db (it has write access); next it sends notification to IDE which refreshes views and editors; potential problems: deletion of database during build, locking files 2) build server performs (parallel) instrumentation sending information about code structure back to IDEA IDE, which manages the database and sends back indexes of elements; potential problems: high messaging overhead -> need to send at most one message per file -> need to introduce local offset constant per each file;",13 +CLOV-1267,"Check how parallel instrumentation can be handled","External build supports parallel compilation. Modules are built in parallel, while files in a single module are compiled sequentially. Clover expects that at least a single file is instrumented sequentially (the FileInto getCoverageMask which returns bitmask based on index range), so that the clover database contains continuous range of indexes for code elements from a single file. It means that we need to synchronize per file. It should not be a problem that subsequent files in database are from different modules. possible solutions: 1) simple lock per whole file in some synchronized block; drawback: turns parallel build into single-threaded one. 2) batch operations, like first instrument whole file using relative indexes, next lock database and store information about whole file, database would return base offset value; still in sychronized block but locked for shorter amount of time; 3) change clover.db structure so that elements could be registered in any order; change FileInfo getCoverageMask function (and related); check for any data structures which needs to be made thread-safe; ",8 +CLOV-1268,"Implement clover.db sharing between build server and IDE processes","Based on analysis",13 +CLOV-1269,"Implement parallel compilation handling","Based on analysis of CLOV-1267",13 +CLOV-1270,"Write sequential integration tests for build server","Prepare integration tests for external build feature. Test the scenario when 'parallel compilation' for 'external build' is disabled. Check if any helper test classes for it are available in IDEA code based. ",13 +CLOV-1271,"Test IDEA IDE - build server interaction","Exploratory tests in user interface.",5 +CLOV-1273,"Reduce coverage requirements for groovy safe operator","Currently any usage of the groovy safe operator requires that that reference be tested with a null and non-null value. This adds significant overhead in the case where multiple calls are chained together with the safe operator. It would be more useful as a coverage measurement if the chain was treated as one call. Look at the following line as an example. def value = a.getB()?.getC()?.getD()?.getE() This line of code should require a test that sets value to null and a test that sets value to something non-null. It should not however require a test where B is null a test where c is null a test where d is null and a test where e is null to reach 100% conditional coverage. While I hope that lines that look like the above are not written very often, it still could happen, and having to write a bunch of tests to cover one line seems like a heavy burden. ",8 +CLOV-1279,"Document how to configure Clover + Bamboo with 'mvn deploy' goal on CAC","The problem is that if 'mvn deploy' is used with Clover, it will deploy instrumented JARs into repository. There's no documentation on confluence.atlassian.com in the BAMBOO space how such separation can be achieved. Create a page with a description like: If you use ""Automatically integrate Clover into this build"" option, then Bamboo will add clover2:setup + clover2:clover goals into every Maven task found in the Job (more details can be found here). It means that you shall not use ""mvn deploy"" together with automatic Clover integration. There are at least three ways to solve this problem: 1) Create a separate Plan (or Job) in which automatic Clover integration is enabled and the Maven 2.x task does not deploy artifacts (""mvn verify"" is used for instance). So this plan would be used only for Clover reporting. Benefits: full Clover separation from the Plan (or Job) performing deployment Drawbacks: doubled Plan (or Job) or 2) Use manual Clover integration (""Clover is already integrated into this build"") but run Clover in a parallel build lifecycle. It means that you'd have to configure Clover goals manually in the pom.xml and use the ""clover2:instrument"" instead of ""clover2:setup"". You could have then just one Maven task with ""mvn clean deploy"". Instrumented jars would have -clover.jar suffix. Benefits: build is executed only once Drawbacks: sometimes there might be problems with resolving correct (""cloverized"") dependent artifacts for multi-module projects or deploying the instrumented war to test server or 3) Use manual Clover integration, but run Clover in a default build lifecycle. It means that you'd have to configure Maven task manually and use ""clover2:setup"" goal. Then you have to use two Maven tasks - one with ""... clover2:setup test ..."" and one with ""deploy"". This is an approach you have followed (according to screenshots I see in attached pdf). Benefits: no problems with artifact dependencies Drawbacks: two Maven tasks Recommendation: approach #3. Steps for approach #3: clean clover2:setup test clover2:aggregate clover2:clover b) define ""Clover Report"" artifact On the 'Artifacts' tab, click Create Definition and complete the form as follows: Name This should begin with with ""Clover Report"". Location This should point to the HTML report directory (e.g. target/site/clover) Copy Pattern Use **/*.* More details on https://confluence.atlassian.com/display/BAMBOO/Enabling+the+Clover+add-on#EnablingtheCloveradd-on-ManualCloverintegration ",1 +CLOV-1280,"Error when trying to Check for an Update","I just recently upgraded from IntelliJ IDEA 10.5.4 to 12.1.1 and now 12.1.2. I think my last update to Clover was BEFORE I updated IDEA versions.",5 +CLOV-1281,"Improve message for NoSuchRegistryException","See https://confluence.atlassian.com/x/AIP3F A message ""Clover registry file: does not exist."" is too general and does not help developer to understand what the exact problem is. Find a more meaningful message. ",1 +CLOV-1285,"Write parallel integration tests for build server","Create IT for external build process with a parallel compilation enabled.",13 +CLOV-1286,"as a developer I'd like to build projects using 'classic' build in IDEA12","Make sure that new 'external build' feature support does not break the old build functionality when the compilation is performed in IDEA IDE process. It shall still use JavaSourceTransformingCompiler class, old Project structure, event handling etc. ",13 +CLOV-1287,"Code instrumentation using jps-builders","scope: * java code instrumentation * statement/method contexts * test detection ",20 +CLOV-1288,"Implement communication between IDEA IDE and JPS builder"," * notifications about build events, progress, error handling * model refreshes",13 +CLOV-1289,"Support custom metrics in PDF report","Currently the PDF report does not handle element so it's not possible to have a custom set of metrics in the summary. ",5 +CLOV-1291,"PDF report with class-level and method-level summary","The PDF report contains package-level coverage table. Add an option for: * Ant task * clover2:clover mojo * 'generate report' button in Eclipse * 'generate report' button in IDEA which would allow user to select report detail level: * package (default) * class * method for PDF file format. ",8 +CLOV-1292,"Check how parallel instrumentation sessions can be handled","External build will start/close single instrumentation session in which modules will be compiled in parallel (see CLOV-1267). However, a parallel build in ant/maven might involve starting multiple instrumentation sessions at once (just think about + in Ant for instance). Check how we could deal with this. Possible problems: * clover.db file locking (appending instrumentation session) Areas for prototyping: * clover db shared in memory * clover db structure change - adding top-level index for sessions/files/classes etc, possibility to interleave data from several instrumentation sessions * etc ...",13 +CLOV-1294,"Implement Clover data serialization from IDE to JPS","The following data must be serialized and passed to JPS builder: * global configuration - other.xml (license key, sid, install date) * project settings - .ipr (flush policy, initstring etc ...) * module settings - .iml (exluding entire module from instrumentation) * idea test detector (default test detector + all test source folders) * state of some buttons in UI (FeatureManager) (e.g. 'toggle build with clover')",20 +CLOV-1295,"Prepare documentation on CAC and AAC","On Clover-for-IDEA pages: * screenshot with ""Compiler"" settings page from IDEA ** external build can be enabled ** incremental build shall be disabled (recommended) ** parallel build must be disabled (refer to future story) On supported platforms page: * info that IDEA12.0-12.1 + Clover 3.1.8-3.1.11 must have 'external build' disabled Release notes about this new nice feature Update quiestion on AAC",3 +CLOV-1297,"HTML report shows only one test result per file if external XML JUnit files are used","In the we can define element which causes that test results are being read from JUnit-compatible XML files, instead of from Clover's coverage recording files. This works as long as the test name can be mapped to the method name (which is usually the case). However, in case of the Spock framework, test cases are named using a free text like: {noformat} def ""check if this test does xyz"" {noformat} which is later translated to a method named like: {noformat} $spock_feature_0_0 {noformat} As a consequence Clover is not able to match test name to the method name (in order to link to sources). It uses an empty test id to store the test result (SLICE_ID = -1). If there are more than one non-matched method in the same XML file, all get the same ID=-1, thus overwriting each other in hashmap. As a consequence only one is listed. *Fix:* Generate a unique test id using the test name - a String.hashCode() for instance. ",5 +CLOV-1298,"Contributed and unique coverage are equal","Possible bug. Investigate why these values are identical for MoneyBags tutorial. !unique_and_contributed_coverage.png!",3 +CLOV-1299,"Find workaround or fix for IDEA-108852","See http://youtrack.jetbrains.com/issue/IDEA-108852",8 +CLOV-1301,"Add more values for a 'threads' drop-down in report dialog","The 'Generate Report' dialog has max 4 threads: !report_generation_threads.png! In age of multi-core multi-threaded processors, we shall have it up to 16 at least. ",2 +CLOV-1302,"The 'include line info' toggle works in the opposite way","This toggle !include_line_info.png! works exactly opposite: when selected, the XML report does NOT contain tags; and vice versa.",2 +CLOV-1303,"Exclusion icon decoration is not visible in IDEA","Affects IDEA versions 10.5.x-12.1.x (works under IDEA 9.0.x). The toggle 'Annotate icons on included/excluded files ...' does not work: !icon_decoration_do_not_work.png!",5 +CLOV-1326,"Class loader fails on clover.jar package-info","Occurs in Bamboo, for instance. {noformat} 2013-07-15 12:16:10,250 ERROR [http-9087-Processor12] [[default]] Servlet.service() for servlet default threw exception java.lang.ClassFormatError: Illegal class name ""com/google/common/collect/package-info"" in class file com/google/common/collect/package-info at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) at java.lang.ClassLoader.defineClass(ClassLoader.java:615) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1876) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:889) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1353) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1232) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:249) at java.lang.Package.getPackageInfo(Package.java:352) at java.lang.Package.getAnnotation(Package.java:367) at org.codehaus.jackson.xc.JaxbAnnotationIntrospector.findAnnotation(JaxbAnnotationIntrospector.java:885) at org.codehaus.jackson.xc.JaxbAnnotationIntrospector.findAccessType(JaxbAnnotationIntrospector.java:265) at org.codehaus.jackson.xc.JaxbAnnotationIntrospector.findAutoDetectVisibility(JaxbAnnotationIntrospector.java:216) at org.codehaus.jackson.map.AnnotationIntrospector$Pair.findAutoDetectVisibility(AnnotationIntrospector.java:1018) {noformat} ",3 +CLOV-1328,"as a Clover developer I'd like to use the latest version of ANTLR","Clover uses ANTLR 2.x currently which is few light-years from the latest version, which is ANTLR 4.x. Upgrade to the latest ANTLR library version. * check ANTLR 4.x license (it's different from 2.x) whether we can actually use it; if not - try to use 3.x, if possible * check if there's any Java grammar (the best for Java 8) available for Antlr 4 * estimate whether it's better to use completely new grammar file and embed clover stuff there or to upgrade our existing grammar file from 2.x to 4.x ** watch out for our custom extensions like unicode escape sequence handling, annotations etc",13 +CLOV-1333,"as a developer I'd like to instrument Java8 new language features","This is an enhancement of CLOV-1139. Clover should be able not only to parse Java8 syntax without error, but also be able to add it's own code statements in order to measure code coverage for: * lambda expressions * ??? Scope: * instrumentation (java.g file) Out of scope: * database format * reporting",20 +CLOV-1335,"as a developer I'd like to generate reports with Java8 sources","New language features might require enhancements of existing reports. Evaluate how to represent lambdas - for instance: - as a separate entity in the report, like a class or a method - as an integral part of enclosing scope - similarly as the inline class is being handled by Clover Scope: * HTML, XML, JSON, PDF reports ",13 +CLOV-1336,"as a developer I'd like to have information about lambdas in the Clover database","1) Evaluate how to represent Java8 lambdas - for instance: - as a separate entity in the model, like a class or a method - as an integral part of enclosing scope - similarly as the inline class is being handled by Clover 2) Design the DB format having in mind a future extensibility (like functions, functions-in-functions, global variables etc) for other JVM-based languages (like Scala or Closure) 3) Implement it. Scope: * database format Out of scope: * source code instrumentation ",20 +CLOV-1337,"as a developer I want be able to select 1.8 language level","The ""1.8"" language level shall be available for: * Ant tasks * clover2:setup clover2:instrument goal * project settings in Clover-for-Eclipse, Clover-for-IDEA Add such option, if necessary, write unit tests. ",3 +CLOV-1338,"Warn if directory selected on Test Classes tab is disabled on Source Files tab","On the ""Project Properties > Clover > Source Files"" tab user can select which source folders shall be instrumented by Clover. By de-selecting the checkbox, the whole source root becomes excluded from instrumentation: !source_files.png! On the ""Test Classes"" files user can select which source roots contain test sources: !test_classes.png! It it possible to have such combination that: * source root is excluded * source root is marked as a test root This can be misleading. Add appropriate warning for it.",3 +CLOV-1339,"The does not match constructors","*Problem:* If you declare custom test detector, for instance: {code:xml} {code} Then the test detector does not match constructors. As a consequence, a class like this: {code:java} public class SomeException extends Exception { public SomeException(String s) { super(s); } } {code} will be treated as APPLICATION not as TEST code. *Background reason:* {code:java} public boolean isMethodMatch(SourceContext sourceContext, MethodContext methodContext) { final MethodSignature signature = methodContext.getSignature(); return methodMatches(signature.getName()) && methodAnnotationMatches(signature.getModifiers()) && methodReturnPatternMatches(signature.getReturnType()) && methodTagMatches(signature.getTags()); } public boolean methodReturnPatternMatches(String methodReturnType) { return methodReturnType != null && (methodReturnTypePattern == null || methodReturnTypePattern.matcher(methodReturnType).matches()); } {code} The methodReturnType==null for constructors, thus constructor do not match the pattern. *Solution:* We could rewrite check like this: {code:java} return methodReturnTypePattern == null || (methodReturnType != null && methodReturnTypePattern.matcher(methodReturnType).matches()); {code} However, this would require entirely new handling of code instrumentation for constructors. The reason is that code would be currently rewritten like: {code:java} public SomeException(String s) { __CLR3_1_12_100hjv4vvu6.R.globalSliceStart(getClass().getName(), 0); int $CLV_p$ = 0; java.lang.Throwable $CLV_t$ = null; try { __CLR3_1_12_162c4pt0(s); // <<< ORIGINAL CONSTRUCTOR $CLV_p$ = 1; } catch (java.lang.Throwable $CLV_t2$) { if ($CLV_p$ == 0 && $CLV_t$ == null) { $CLV_t$ = $CLV_t2$; } __CLR3_1_12_100hjv4vvu6.R.rethrow($CLV_t2$); } finally { __CLR3_1_12_100hjv4vvu6.R.globalSliceEnd(getClass().getName(), ""SomeException.SomeException"", 0, $CLV_p$, $CLV_t$); } } private __CLR3_1_12_162c4pt0(String s) { // << COMPILATION FAILURE, MISSING RETURN TYPE super(s); __CLR3_1_12_100hjv4vvu6.R.inc(1); __CLR3_1_12_100hjv4vvu6.R.inc(0); } {code} Problems: * call to super() must be first * we should not move constructor body into another method ",20 +CLOV-1341,"Implicit return in Groovy switch statement is instrumented incorrectly","*Problem:* Consider the following code: {code:java} def create(boolean b) { switch (b) { case true: new Integer(10) break case false: new String(""abc"") break } } {code} * switch statement is the last statement in function, so it's value is being returned from a function call * new Integer() / new String() are last statements before 'break' which is a function's exit point * thus 10 or ""abc"" are returned Clover instruments code as follows: {code:java} def create(boolean b) { recorder.inc(0); switch (b) { case true: recorder.inc(1); new Integer(10) recorder.inc(2); break case false: recorder.inc(3); new String(""abc"") recorder.inc(4); break } } {code} * as a consequence, the last statement before 'break' becomes recorder.inc(), which returns void; as a result the create() function returns null *Workaround:* Use return instead of break in a switch statement, e.g.: {code:java} case true: return new Integer(10) // no break {code} *Fix:* * do not add recorder.inc() before 'break'; drawback of the solution: we loose tracking of empty breaks, see below. {code:java} def foo(int i) { switch (i) { case 1: recorder.inc(1); println(""one"") /*recorder.inc(2); not added*/ break; case 2: case 3: /*recorder.inc(3); not added*/ break; } } foo(1) foo(2) {code} in the code above it would be nice to have ""case2: case 3: recorder.inc(3); break;"" colored in green, despite that code makes nothing ... ",5 +CLOV-1344,"Added LICENSES.html file to Clover artfiacts","Add the LICENSES.html file containing a table with: * name of third party library * link to home page (download sources / binaries) * link to the license file into the following artifacts: * Clover-for-Ant ZIP * Clover-for-Eclipse update site ZIP * Clover-for-IDEA plug-in JAR Note: * there's no need to add such file in the Clover-for-Grails and Clover-for-Maven2&3, because these plug-ins do not contain any third party libraries embedded in it (just references in pom.xml / BuildConfig.groovy) Reason for change: * ensuring that we obey requirements imposed by various open source licences ",3 +CLOV-1348,"review navigation links on a page summary","frames/no frames - deleted show help - exists on some of pages overview/package/file - moved to breadcrumbs on a page header todo: discuss with UX designer how breadcrumbs shall show the structure, e.g.: - shall we display report name and a project name only? - or some main section? - or the entire path - if so, shall we have: Report > Project > Test/App/Clouds > Package > FIle/Class > (Test) or something else?",2 +CLOV-1350,"Add ADG navigation bar in the HTML report"," * probably should be optional, because we embed reports in Bamboo -> how to handle this? all links from navigation bar shall be available somewhere else? * what to put in the nav bar? we don't have 'create issue' button for sure ;-)",1 +CLOV-1352,"Create code samples with java8 syntax","annontations on java types repeating annotations lambdas virtual extension methods",13 +CLOV-1353,"Prepare unit tests compiling and instrumenting code samples","test: compile code samples from CLOV-1352 using JDK1.8 javac instrument these code samples using Clover expected: no instrumentation of lambdas yet, just test if files are parsed correctly",13 +CLOV-1354,"Set up a Bamboo build for JDK1.8","run all clover tests, including tests of java8 syntax on JDK1.8 on Bamboo",3 +CLOV-1355,"Add new grammar rules for java8 syntax","just to correctly parse new syntax, do not add clover instrumentation to these new code constructs something like: lambda : ( lambdaNoArgs | lambdaImplicitTypesArgs | lambdaExplicitTypesArgs ) '->' ( lambdaExpressionLikeStatement | lambdaCodeBlock ) plus extend the method definition and add 'default' keyword as optional; probably won't need to distinguish between method declaration in interface and in a class",3 +CLOV-1357,"as an administrator I need to monitor Clover usage on machines","As a system administrator I need to have a way to track down usage of Clover licenses within my organization in order to make sure that Clover is not installed or used on more machines than the license allows to. Currently there is no tool for this purpose and the only indirect way is to scan for clover license files. One of possible solutions: * add the environment variable which will enable tracking of clover license usage, such variable could be set on all machines in users' profiles by system administrator * the variable would point to the URL which will collect data about license usage, e.g.: {noformat} -Dclover.license.usage.url=http://path.to.web.server/clover.php?someoptions {noformat} * whenever code instrumentation or report generation is performed and the environment variable is defined, clover will connect to the specified URL using simple HTTP GET request * it would be up to the system administrator to collect data from such HTTP GET requests (e.g. parsing apache logs, using some php script to store data in database ...) * options of HTTP GET {noformat} ?LicenseID=ABCDEF&LicenseExpiryDate=YYYY-MM-DD&MaintenanceExpiryDate=YYYY-MM-DD&Organisation=CompanyName&NumberOfUsers=NN&LicenseTypeName=DESKTOP_OR_SERVER {noformat} Scope: clover core (would work in ant, maven, grails, eclipse, idea ...)",13 +CLOV-1358,"Enhance Clover database to keep full instrumentation history","*Problem:* Currently Clover database keeps list of instrumentation sessions plus information about classes which is a sum of all previous instrumentation sessions in such way that for given class only the latest class version is stored. There are two limitations of current design: 1) Test optimization might not work correctly for some test frameworks for Groovy language. This is due to nature of the Groovy language itself, where compiler allows to compile code which does not have all symbols resolved (they're being resolved at runtime). As a consequence if a dependent application class is changed, this does not to have trigger recompilation of the test class. See comment for more details. 2) Syntax highlighting in HTML report is always based on the latest class version, so if someone has older source file, it can be rendered incorrectly. There's a warning for this in HTML report, but we could fetch the actual line/char indexes from the older class version. *Solution:* 1) Enhance UpdateableRegFile and keep all versions of classes. This should be optional and disabled by default. 2) Enhance RegFile API to allow querying for older versions of given file (by default it should always return the latest version). 3) Add new option for and to allow to keep full instrumentation history. Either as ""true/false"" or as a number (maximum number of versions of the single class to store). 4) Add API to calculate index bitset as a logical OR of bitsets from all versions of the given file or class. ",40 +CLOV-1359,"Fix test optimization and check all class versions","Depends on CLOV-1358 Test optimization should scan for hit count indexes of all versions of given class. This is necessary in order to workaround the problem of the groovyc compiler which resolves some of symbols at runtime and thus it does not always recompile test class if application class is not changed. ",13 +CLOV-1360,"Analyse how tests are converted by Spock ","Analyse how a test named like: {noformat} def ""my test name"" {noformat} is converted to a method like: {noformat} $spock_feature_1_0 {noformat} It's being done during AST transformation I guess. Check how it's possible to either: * reverse engineer this behaviour i.e. get a back-ward mapping $spock_feature_1_0 -> def ""my test name"" or * reproduce this behaviour, i.e. instrument methods in such order/way that Clover could 'calculate' the same method name ",13 +CLOV-1361,"Implement test name to method name mapping in Clover","Based on the investigation results from CLOV-1360 write proper mapping in Clover so that we could keep original names of test cases in Clover database (like ""my test name"" instead of $spock_feature_1). And these tests should properly ""link"" to appropriate sections in source code - for instance in order to allow navigation in HTML report from test result to the test class source code.",13 +CLOV-1362,"Add Spock test name patterns in default test detector ","Clover's default test detector should properly recognize Spock-framework test classes and which methods are test ones and which are helper ones. We shall not see stuff like this in the test summary: {noformat} Tests Started Status Time (secs) Message OpsWiseJobQueryTestSpec. 12 mar 10:32:50 PASS 0 // BAD OpsWiseJobQueryTestSpec.$spock_feature_1_0 12 mar 10:32:49 PASS 0,001 // OK, but use original name OpsWiseJobQueryTestSpec. 12 mar 10:32:49 PASS 0 // BAD OpsWiseJobQueryTestSpec.setup 12 mar 10:32:49 PASS 0,009 // BAD {noformat} ",8 +CLOV-1363,"Ensure that reports show the test name and not the method name","Make sure that HTML, XML, PDF, JSON reports will display the test name (like ""my test name"" taken from def) rather than the actual name of test method (like $spock_feature). ",8 +CLOV-1369,"as a developer I don't need to run Clover on JDK1.5 anymore","*Idea:* Sun Java 1.5 has: * end of public updates - Oct 2009 * end of Premier Support - May 2011 * end of Extended Support - May 2015 * see http://www.oracle.com/technetwork/java/eol-135779.html IBM Java 1.5: * its End Of Servcie (EOS) will expire on September 2015 * see https://www.ibm.com/developerworks/java/jdk/lifecycle/ According to various sources, most popular are Java6 and Java7 with Java8 growing up; Java1.5 has a fraction of market right now: * http://www.statowl.com/java.php although the report above shows Java version in web browser. Production environment may be different (especially regarding IBM Java). *Benefits:* Dropping support for Java 1.5 would improve Clover development, as we could: * use @Override for interfaces * use newer version of Guava (we're on Guava 9 (!) due to required JDK1.5 binary compatibility) * have all Clover modules and plugins on the same JDK level ** Groovy/Grails require JDK6+ to compile and execute ** Clover-for-IDEA (IDEA12 JPS) requires JDK6+ to compile and execute ** rest is on JDK5 *Tasks:* * update Supported-Platforms page * update guava library (and all others which are compiled against jdk6) * update build scripts * affects Clover Core, Clover-for-Ant, Clover-for-Maven2&3, Clover-for-Eclipse, Clover-for-IDEA, Clover-for-Grails *Out of scope:* * adding Override annotations - this will be done gradually during daily development ",5 +CLOV-1375,"Extend API for loading and manipulate coverage files ","Clover 3.2.0 published new interfaces describing a database model (com.atlassian.clover.api.registry). We need to reveal more Clover stuff via API in order to make it more usable by other developers. For example: * loading database and coverage files, handling instrumentation sessions * manipulating coverage files",8 +CLOV-1376,"Change signature of getXyz() methods in HasXyz interfaces","Current signatures have , for example: {code:java} List getMethods() {code} This works fine for Clover's internal data structures (as there are subclasses), but it's not usable by developers using this API. It should be possible to have an assignment like: {code:java} List methodMetrics = classInfo.getMethods() {code} Fix: change to . Note: We may need to expose additional methods in interface. They could throw Exception(""not implemented"") or return nulls.",5 +CLOV-1377,"Create interfaces and factory methods for loading Clover database","*Problem:* Database entities are already in c.a.c.api.registry package. However, in order to load the database you have to call an inner class, for example: {code:java} import com.atlassian.clover.CloverDatabase; // XXX internal class import com.atlassian.clover.CoverageDataSpec; // XXX internal class import com.atlassian.clover.api.registry.ProjectInfo; // ... CloverDatabase db = CloverDatabase.loadWithCoverage(args[0], new CoverageDataSpec()); ProjectInfo projectInfo = db.getRegistry().getProject(); {code} *Fix:* Create proper interfaces and a factory hiding the CoverageDataSpec and CloverDatabase. ",3 +CLOV-1378,"Create interfaces and some template class for handling instrumentation sessions","*Problem:* In order to update content of a database and store new instrumentation session a number of internal classes must be used, e.g.: {code:java} import com.atlassian.clover.context.ContextSet; import com.atlassian.clover.registry.Clover2Registry; import com.atlassian.clover.registry.FixedSourceRegion; import com.atlassian.clover.registry.entities.MethodSignature; import com.atlassian.clover.registry.entities.Modifier; import com.atlassian.clover.registry.entities.Modifiers; import com.atlassian.clover.registry.entities.Parameter; // ... registry = Clover2Registry.createOrLoad(dbFile, projectName); session = registry.startInstr(encoding) // ... session.enterMethod(new ContextSet(), new FixedSourceRegion(12, 1), methodSignature, false, false, 5, LanguageConstruct.Builtin.METHOD); {code} *Fix:* - move MethodSignature, Modifier, Modifiers, Parameter to API - create factory for FixedSourceRegion, ContextSet - enterMethod (and others) shall use ContextSet from API ",5 +CLOV-1379,"Create API for handling coverage recording files","*Problem:* Currently there's no API which would allow to create a global recording or a per-test recording file. Such API would be useful, e.g. for conversion of coverage data from other tools such as Cobertura or Emma. *Fix:* - publish global and per-test recording file format on CAC (including naming convention for files) - expose class for global coverage file (equivalent of FileBasedGlobalCoverageRecording) - expose class for per-test coverage file (equivalent of FileBasedPerTestRecording) ",8 +CLOV-1380,"Create API for handling optimization snapshot","*See:* * [Hacking Clover / Updating optimization snapshot file|https://confluence.atlassian.com/display/CLOVER/Updating+optimization+snapshot+file] * [src/it/optmized/snapshot-hacking|https://bitbucket.org/atlassian/maven-clover2-plugin] *Problem:* Internal classes are used to manipulate snapshot. {code:java} import com.atlassian.clover.registry.entities.TestCaseInfo; import com.atlassian.clover.optimization.Snapshot; // ... Snapshot snapshot = Snapshot.loadFrom(snapshotLocation); final Set allTestCaseInfos = db.getCoverageData().getTests(); for (TestCaseInfo tci : allTestCaseInfos) { ... } snapshot.store(); {code} *Fix:* Create proper interfaces/classes in c.a.c.api.optimization ",8 +CLOV-1381,"Add showInnerFunctions and showLambdaFunctions to clover2:setup","Command line tools and a Ant task have these options. Add: showInnerFunctions=false showLambdaFunctions=false to CloverReportMojo. Pass these values to a report descriptor. Define such values also in the default descriptor (clover-report.xml).",1 +CLOV-1382,"Add lambda toggle to report wizards in Eclipse and IDEA","Add toggles for showInnerFunctions and showLambdaFunctions in report wizards in Eclipse and IDEA plugins. Toggles shall be visible for HTML and XML reports. Consider using a drop down ""show lambda functions"": - NONE (inner=false, lambda=false) - FIELDS ONLY (inner=false, lambda=true) - FIELDS AND METHODS (inner=true, lambda=true) ",2 +CLOV-1384,"Fully qualified java.lang is not used for system properties in Clover.getRecorder ","Generated code: {code:java} R=com_cenqua_clover.Clover.getNullRecorder();_R=com_cenqua_clover.Clover.getNullRecorder();_R=com_cenqua_clover.Clover.getRecorder( ""\u0063....\u0064\u0062"", 1382598086449L,8589935092L,49,profiles, new String[]{""clover.distributed.coverage"",null}); ^^^^^ java.lang. is missing {code} ",2 +CLOV-1385,"Perform Scala spike","This task is time-boxed to 5 days. Take a look at: * our Scala prototype * SCCT * Scoverage to learn how instrumentation could be implemented. Expected outcome: * knowledge how scalac works (compilation phases, AST structure, plugging into it) * detailed list of tasks required * task estimation * prioritisation",5 +CLOV-1387,"Clover integration with Bamboo - enhancements","*THIS EPIC IS OPTIONAL* There is a number of open issues in Bamboo JIRA project related with a Clover plugin. Sorted by importance (in my opinion): * BAM-13564 (Remove the $\{buildKey\} from Clover plugin URLs) * BAM-12852 (Add Clover tab for Build Summary page) * BAM-13404 (Use BuildConfig's DSL to install Clover plugin) * BAM-13208 (Improve Automatic Clover integration for multi-module maven builds) * BAM-13610 (Facilitate Clover configuration for plans using automatic Clover integration) * BAM-13786 (Test Coverage History drops to zero on days with no tests) * BAM-12118 (Perform cleanup of clover_fs_rez* and grover*jar files) * BAM-13787 (Allow Clover test coverage history duration be customized for the graph) * BAM-11590 (Add job failure based on coverage threshold for Clover plugin) TODO: check which ones could be implemented for this release. ",40 +CLOV-1388,"as a developer I'd like to have Spock @Unroll annotation being recognized by Clover","The {noformat}@Unroll{noformat} annotation causes that a test name will be unrolled for every combination of test data. It means that we can have multiple tests having different name, which in fact are related with exactly the same test method, but ran with different input arguments. Examples (from http://docs.spockframework.org/en/latest/data_driven_testing.html): {code:java} // sequence index at the end @Unroll def ""maximum of two numbers""() { ... } maximum of two numbers[0] PASSED maximum of two numbers[1] FAILED // variable substitution @Unroll def ""maximum of #a and #b is #c""() { ... } maximum of 3 and 5 is 5 PASSED maximum of 7 and 0 is 7 FAILED {code} Problem for Clover: we don't know neither a number of tests nor their names during compilation. it would have to be deferred to runtime. => add some inner class for a test class which would monitoring the test name and somehow pass to the per-test coverage recorder? ",20 +CLOV-1389,"Instrumentation of a branch condition with a generic type leads to javac compilation error","*For a declaration like this:* {code:java} public T getFeatureValue(); ... if (client.getFeatureValue()) { {code} the instrumented line gets instrumented like: {code:java} _CLR3_1_113f23f2hnz3nmqe.R.inc(5146);if ((((client.getFeatureValue())&&(CLR3_1_113f23f2hnz3nmqe.R.iget(5147)!=0|true))||(_CLR3_1_113f23f2hnz3nmqe.R.iget(5148)==0&false))) {{ {code} which leads to compilation error: {noformat} error: bad operand types for binary operator '&&' {noformat} *Reason:* Javac performs autoboxing of the if condition. However it cannot deal properly if the same generic value is used with && or || operators. It looks like if javac wraps the entire if condition, not a single element. Look at the example: {code:java} public class BranchCoverageWithAutoboxing { interface Data { public T getValue(); } public boolean testGetValue(Data source) { if (source.getValue()) { // Implicit conversion to Boolean via autoboxing return true; } return false; } public boolean testGetValueWithBoolean(Data source) { if (source.getValue() && true) { // Error: Operator && cannot be applied to java.lang.Object, boolean return true; } return false; } public boolean testGetValueWithWrappedBoolean(Data source) { if (Boolean.valueOf(source.getValue().toString()) && true) { // Explicit conversion, compilation is successful return true; } return false; } } {code} *Workaround:* Don't rely on boolean autoboxing and change a generic type to Boolean. or Extract expression being autoboxed to a local variable and evaluate before ""if"". Use the variable in ""if"". {code:java} // original: if (source.getValue) // fixed: Boolean b = source.getValue(); if (b) {code} or surround problematic code block with ""///CLOVER:OFF"" and ""///CLOVER:ON"" inline comments (note that three slashes are used)",13 +CLOV-1390,"clover intrumented testcode with PersitenceConstructor and parameters fails ","If the integration tests running without clover instrumentation the test works fine, but with clover instrumentation the one test will fail. {code} org.springframework.data.mapping.model.MappingException: No property null found on entity class com.test.framework.Model.DataModel to bind constructor parameter to! org.springframework.data.mapping.model.PersistentEntityParameterValueProvider.getParameterValue(PersistentEntityParameterValueProvider.java:74) org.springframework.data.mapping.model.SpELExpressionParameterValueProvider.getParameterValue(SpELExpressionParameterValueProvider.java:63) org.springframework.data.convert.ReflectionEntityInstantiator.createInstance(ReflectionEntityInstantiator.java:71) org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:232) org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:212) org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:176) org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:172) org.springframework.data.mongodb.core.convert.MappingMongoConverter.read(MappingMongoConverter.java:75) org.springframework.data.mongodb.core.MongoTemplate$ReadDbObjectCallback.doWith(MongoTemplate.java:1841) org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1492) org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:1303) org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:475) org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:470) com.test.framework.DatabaseSpec.search User Query(DatabaseSpec.groovy:52) {code} its seem to be a problem with follow declaration {code} @PersistenceConstructor public DataModel(String username, String password) {code} ",1 +CLOV-1392,"as a code reviewer I'd like to see ADG fonts and colours in the HTML report",NULL,40 +CLOV-1393,"review ADG page layout in the HTML report","review layouting of various components on the page and an interaction between them",1 +CLOV-1395,"IDEA13 compatiblity issues","Compatiblity issues of Clover-for-IDEA with the latest IDEA13: 1) Attempt to load a license key from a file (About Clover box > License button > Load) fails with an error: {noformat} com.intellij.openapi.fileChooser.FileChooser.chooseFiles(Ljava/awt/Component;Lcom/intellij/openapi/fileChooser/FileChooserDescriptor;)[Lcom/intellij/openapi/vfs/VirtualFile;: com.intellij.openapi.fileChooser.FileChooser.chooseFiles(Ljava/awt/Component;Lcom/intellij/openapi/fileChooser/FileChooserDescriptor;)[Lcom/intellij/openapi/vfs/VirtualFile; java.lang.NoSuchMethodError: com.intellij.openapi.fileChooser.FileChooser.chooseFiles(Ljava/awt/Component;Lcom/intellij/openapi/fileChooser/FileChooserDescriptor;)[Lcom/intellij/openapi/vfs/VirtualFile; com.cenqua.clover.idea.config.LicenseConfigPanel.loadLicenseFile(LicenseConfigPanel.java:321) com.cenqua.clover.idea.config.LicenseConfigPanel.actionPerformed(LicenseConfigPanel.java:216) javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) java.awt.Component.processMouseEvent(Component.java:6505) javax.swing.JComponent.processMouseEvent(JComponent.java:3321) java.awt.Component.processEvent(Component.java:6270) java.awt.Container.processEvent(Container.java:2229) java.awt.Component.dispatchEventImpl(Component.java:4861) java.awt.Container.dispatchEventImpl(Container.java:2287) java.awt.Component.dispatchEvent(Component.java:4687) java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) java.awt.Container.dispatchEventImpl(Container.java:2273) java.awt.Window.dispatchEventImpl(Window.java:2719) java.awt.Component.dispatchEvent(Component.java:4687) java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729) java.awt.EventQueue.access$200(EventQueue.java:103) java.awt.EventQueue$3.run(EventQueue.java:688) java.awt.EventQueue$3.run(EventQueue.java:686) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) java.awt.EventQueue$4.run(EventQueue.java:702) java.awt.EventQueue$4.run(EventQueue.java:700) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.awt.EventQueue.dispatchEvent(EventQueue.java:699) com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:696) com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:520) com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:335) java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154) java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182) java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221) java.security.AccessController.doPrivileged(Native Method) java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219) java.awt.Dialog.show(Dialog.java:1082) com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:786) com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:462) com.intellij.openapi.ui.DialogWrapper.showAndGetOk(DialogWrapper.java:1543) com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1511) com.intellij.ide.actions.ShowSettingsUtilImpl.a(ShowSettingsUtilImpl.java:263) com.intellij.ide.actions.ShowSettingsUtilImpl.editConfigurable(ShowSettingsUtilImpl.java:228) com.intellij.ide.actions.ShowSettingsUtilImpl.editConfigurable(ShowSettingsUtilImpl.java:213) com.cenqua.clover.idea.AboutDialog$1.actionPerformed(AboutDialog.java:216) javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) java.awt.Component.processMouseEvent(Component.java:6505) javax.swing.JComponent.processMouseEvent(JComponent.java:3321) java.awt.Component.processEvent(Component.java:6270) java.awt.Container.processEvent(Container.java:2229) java.awt.Component.dispatchEventImpl(Component.java:4861) java.awt.Container.dispatchEventImpl(Container.java:2287) java.awt.Component.dispatchEvent(Component.java:4687) java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) java.awt.Container.dispatchEventImpl(Container.java:2273) java.awt.Window.dispatchEventImpl(Window.java:2719) java.awt.Component.dispatchEvent(Component.java:4687) java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729) java.awt.EventQueue.access$200(EventQueue.java:103) java.awt.EventQueue$3.run(EventQueue.java:688) java.awt.EventQueue$3.run(EventQueue.java:686) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) java.awt.EventQueue$4.run(EventQueue.java:702) java.awt.EventQueue$4.run(EventQueue.java:700) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.awt.EventQueue.dispatchEvent(EventQueue.java:699) com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:696) com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:520) com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:335) java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154) java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182) java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221) java.security.AccessController.doPrivileged(Native Method) java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219) java.awt.Dialog.show(Dialog.java:1082) com.intellij.openapi.ui.impl.DialogWrapperPeerImpl$MyDialog.show(DialogWrapperPeerImpl.java:786) com.intellij.openapi.ui.impl.DialogWrapperPeerImpl.show(DialogWrapperPeerImpl.java:462) com.intellij.openapi.ui.DialogWrapper.showAndGetOk(DialogWrapper.java:1543) com.intellij.openapi.ui.DialogWrapper.show(DialogWrapper.java:1511) com.cenqua.clover.idea.actions.AboutAction.actionPerformed(AboutAction.java:19) com.intellij.openapi.actionSystem.ex.ActionUtil.performActionDumbAware(ActionUtil.java:162) com.intellij.openapi.actionSystem.impl.ActionButton.a(ActionButton.java:170) com.intellij.openapi.actionSystem.impl.ActionButton.a(ActionButton.java:133) com.intellij.openapi.actionSystem.impl.ActionButton.processMouseEvent(ActionButton.java:311) java.awt.Component.processEvent(Component.java:6270) java.awt.Container.processEvent(Container.java:2229) java.awt.Component.dispatchEventImpl(Component.java:4861) java.awt.Container.dispatchEventImpl(Container.java:2287) java.awt.Component.dispatchEvent(Component.java:4687) java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) java.awt.Container.dispatchEventImpl(Container.java:2273) java.awt.Window.dispatchEventImpl(Window.java:2719) java.awt.Component.dispatchEvent(Component.java:4687) java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729) java.awt.EventQueue.access$200(EventQueue.java:103) java.awt.EventQueue$3.run(EventQueue.java:688) java.awt.EventQueue$3.run(EventQueue.java:686) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) java.awt.EventQueue$4.run(EventQueue.java:702) java.awt.EventQueue$4.run(EventQueue.java:700) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.awt.EventQueue.dispatchEvent(EventQueue.java:699) com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:696) com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:520) com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:335) java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) java.awt.EventDispatchThread.run(EventDispatchThread.java:91) {noformat} 2) Compilation of the project with Clover enabled fails with compilation error ""package com_cenqua_clover"" does not exist. The most probably Clover fails to add clover.jar to project's class path. {noformat} java: package com_cenqua_clover does not exist {noformat} 3) There is no option to enable/disable external build feature. It seems that the ""classic"" build functionality has been removed in IDEA13. ",13 +CLOV-1396,"""No such property: testTargetPatterns"" exception with Grails 2.3","Unable to use Clover-for-Grails with Grails 2.3. Build fails with an exception: {noformat} |Environment set to test ................................... [mkdir] Created dir: C:\Work\grails-clover-plugin-hg\testcases\petclinic233\target\test-reports\html . [mkdir] Created dir: C:\Work\grails-clover-plugin-hg\testcases\petclinic233\target\test-reports\plain .Error | Error executing script TestApp: No such property: testTargetPatterns for class: _Events groovy.lang.MissingPropertyException: No such property: testTargetPatterns for class: _Events at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:50) at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:49) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:231) at _Events$_run_closure3.doCall(_Events.groovy:75) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1086) at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:910) {noformat} *Reason:* In the Grails 2.3 the _GrailsTest.groovy has been refactored into GrailsProjectTestRunner and GrailsProjectTestCompiler. The testTargetPatterns property has been removed. *Probable fix:* Replace testTargetPattern by iterator over testNames. ",2 +CLOV-1397,"Java+Groovy compilation fails with Clover enabled in IntelliJ 12.1.x","When building my project in IntelliJ the build fails with the following exception. I saw a couple other similar comments about how using an external build can cause problems but I thought this was fixed with Clover 3.2? If I turn off the external build then the compilation does succeed. The project is a combined Java/Groovy project if that matters. Let me know if you need any more details. {noformat} Error: java.lang.IllegalArgumentException: org.jetbrains.jps.javac.TransformableJavaFileObject java.lang.RuntimeException: java.lang.IllegalArgumentException: org.jetbrains.jps.javac.TransformableJavaFileObject com.sun.tools.javac.main.Main.compile(Main.java:475) com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:132) org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:167) org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:364) org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:276) org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:190) org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:162) org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1018) org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:742) org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:790) org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:705) org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:526) org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:314) org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:179) org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:129) org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:220) org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:112) org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler$1.run(BuildMain.java:132) org.jetbrains.jps.service.impl.SharedThreadPoolImpl$1.run(SharedThreadPoolImpl.java:41) java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) java.util.concurrent.FutureTask.run(FutureTask.java:262) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) java.lang.Thread.run(Thread.java:744) Caused by: java.lang.IllegalArgumentException: org.jetbrains.jps.javac.TransformableJavaFileObject com.sun.tools.javac.file.JavacFileManager.inferBinaryName(JavacFileManager.java:660) javax.tools.ForwardingJavaFileManager.inferBinaryName(ForwardingJavaFileManager.java:84) com.sun.tools.javac.api.ClientCodeWrapper$WrappedJavaFileManager.inferBinaryName(ClientCodeWrapper.java:225) com.sun.tools.javac.jvm.ClassReader.fillIn(ClassReader.java:2524) com.sun.tools.javac.jvm.ClassReader.fillIn(ClassReader.java:2505) com.sun.tools.javac.jvm.ClassReader.complete(ClassReader.java:2143) com.sun.tools.javac.code.Symbol.complete(Symbol.java:421) com.sun.tools.javac.comp.Enter.visitTopLevel(Enter.java:298) com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:459) com.sun.tools.javac.comp.Enter.classEnter(Enter.java:258) com.sun.tools.javac.comp.Enter.classEnter(Enter.java:272) com.sun.tools.javac.comp.Enter.complete(Enter.java:484) com.sun.tools.javac.comp.Enter.main(Enter.java:469) com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:929) com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:824) com.sun.tools.javac.main.Main.compile(Main.java:439) ... 23 more {noformat} {panel:title=Problem summary|bgColor=yellow} This bug occurs when all of the following conditions are met: * IDEA 12.1.1 or later is used * Clover 3.1.12 or later is used * an ""external build"" feature is enabled (Settings > Compiler > Use external build) * project has a mixed Java + Groovy code It's an IDEA bug - http://youtrack.jetbrains.com/issue/IDEA-110835 - and has been fixed in IDEA13. Therefore: * in IDEA 12.x - disable the ""external build"" feature * in IDEA 13.x - problem does not occur {panel} ",13 +CLOV-1398,"Java 1.8 Exceptions not being propagated correctly","I have the following test stub (src/main/java) {code:java} public final class TestStub { TestStub() { throw new IllegalArgumentException(); } public static void getHandler() { new HashMap<>().computeIfAbsent(String.class, t -> new TestStub()); } } {code} And the following test (src/test/java) {code:java} public class FooTest { @Test(expected = IllegalArgumentException.class) public void test0() { TestStub.getHandler(); } } {code} Using maven It runs fine using ""clean install"" however using clover I get the following exception {noformat} java.lang.reflect.UndeclaredThrowableException com.sun.proxy.$Proxy12.apply(Unknown Source) java.util.HashMap.computeIfAbsent(HashMap.java:1118) org.cakeframework.internal.container.TestStub.getHandler(TestStub.java:26) org.cakeframework.internal.container.FooTest.test0(FooTest.java:29) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:483) org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:19) org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) org.junit.runners.ParentRunner.run(ParentRunner.java:309) org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264) org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124) org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:200) org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153) org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103) Caused by: java.lang.reflect.InvocationTargetException sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:483) org.cakeframework.internal.container.TestStub$__CLR3_2_0wqwqhpd53be5$1.invoke(TestStub.java:20) ... 28 more Caused by: java.lang.IllegalArgumentException org.cakeframework.internal.container.TestStub.(TestStub.java:22) org.cakeframework.internal.container.TestStub.lambda$getHandler$6(TestStub.java:26) org.cakeframework.internal.container.TestStub$$Lambda$13/1227074340.apply(Unknown Source) ... 33 more {noformat} If I replace with a standard anonymous class implementing java.util.function.Function it runs fine",3 +CLOV-1399,"Java 1.8 compilation fails when lambda is passed to a generic argument","The following piece of code fails to be instrumented {code:java} public class Fails { public final Iterable depthFirstTraversal(Class type) { return (Iterable) depthFirstTraversal(e -> type.isInstance(e)); } public final Iterable depthFirstTraversal(Predicate predicate) { return null; } } {code} Javac gives the following error message: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project cake-util: Compilation failure: Compilation failure: [ERROR] /Users/kasperni/workspace/CAKE/cake-util/cake-util/target/clover/src-instrumented/org/cakeframework/internal/util/tree/Fails.java:[27,67] reference to depthFirstTraversal is ambiguous [ERROR] both method depthFirstTraversal(java.lang.Class) in org.cakeframework.internal.util.tree.Fails and method depthFirstTraversal(java.util.function.Predicate) in org.cakeframework.internal.util.tree.Fails match [ERROR] /Users/kasperni/workspace/CAKE/cake-util/cake-util/target/clover/src-instrumented/org/cakeframework/internal/util/tree/Fails.java:[27,86] incompatible types: cannot infer type-variable(s) I,T [ERROR] (argument mismatch; java.lang.Class is not a functional interface) [ERROR] -> [Help 1]",3 +CLOV-1401,"Clover fails to instrument generic type with a constructor reference","This works fine: {code:java} myLambda = ArrayList::new; // javac error since JDK8 b114 myLambda = ArrayList::new; {code} But the following: {code:java} myLambda = ArrayList::new; myLambda = ArrayList::new; {code} fails with a parser error: {noformat} ERROR: Instrumentation errorInstrumentation error : c:\Work\clover-hg\clover-core\src\test\resources\javasyntax1.8\LambdaAndMethodReferences.java:78:28:unexpected token: ArrayList com.atlassian.clover.api.CloverException: c:\Work\clover-hg\clover-core\src\test\resources\javasyntax1.8\LambdaAndMethodReferences.java:78:28:unexpected token: ArrayList com.atlassian.clover.instr.java.Instrumenter.instrument(Instrumenter.java:158) com.atlassian.clover.CloverInstr.execute(CloverInstr.java:73) com.atlassian.clover.CloverInstr.mainImpl(CloverInstr.java:49) com.atlassian.clover.JavaSyntaxCompilationTestBase.instrumentSourceFile(JavaSyntaxCompilationTestBase.java:145) com.atlassian.clover.JavaSyntaxCompilationTestBase.instrumentAndCompileSourceFile(JavaSyntaxCompilationTestBase.java:111) com.atlassian.clover.JavaSyntax18CompilationTest.testLambdaAndMethodReferences(JavaSyntax18CompilationTest.java:84) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:483) junit.framework.TestCase.runTest(TestCase.java:168) junit.framework.TestCase.runBare(TestCase.java:134) junit.framework.TestResult$1.protect(TestResult.java:110) junit.framework.TestResult.runProtected(TestResult.java:128) junit.framework.TestResult.run(TestResult.java:113) junit.framework.TestCase.run(TestCase.java:124) junit.framework.TestSuite.runTest(TestSuite.java:243) junit.framework.TestSuite.run(TestSuite.java:238) org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) org.junit.runner.JUnitCore.run(JUnitCore.java:157) com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77) com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195) com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:483) com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) Caused by: line 78:28: unexpected token: ArrayList com.atlassian.clover.instr.java.JavaRecognizer.conditionalExpression(JavaRecognizer.java:4407) com.atlassian.clover.instr.java.JavaRecognizer.assignmentExpression(JavaRecognizer.java:4274) com.atlassian.clover.instr.java.JavaRecognizer.assignmentExpression(JavaRecognizer.java:4319) com.atlassian.clover.instr.java.JavaRecognizer.expression(JavaRecognizer.java:3366) com.atlassian.clover.instr.java.JavaRecognizer.statement(JavaRecognizer.java:2909) com.atlassian.clover.instr.java.JavaRecognizer.outerCompoundStmt(JavaRecognizer.java:2696) com.atlassian.clover.instr.java.JavaRecognizer.field(JavaRecognizer.java:2265) com.atlassian.clover.instr.java.JavaRecognizer.classBlock(JavaRecognizer.java:1728) com.atlassian.clover.instr.java.JavaRecognizer.classDefinition(JavaRecognizer.java:736) com.atlassian.clover.instr.java.JavaRecognizer.typeDefinition2(JavaRecognizer.java:666) com.atlassian.clover.instr.java.JavaRecognizer.typeDefinition(JavaRecognizer.java:524) com.atlassian.clover.instr.java.JavaRecognizer.compilationUnit(JavaRecognizer.java:445) com.atlassian.clover.instr.java.Instrumenter.instrument(Instrumenter.java:212) com.atlassian.clover.instr.java.Instrumenter.instrument(Instrumenter.java:121) ... 27 more {noformat} ",8 +CLOV-1403,"Cloverage view layout is crappy with the Coverage Summary panel","1. Not all buttons are visible by default. 2. Width/height proportion which triggers a change between horizontal/vertical layout is not set correctly. As a result we've got a crappy behavior as on the following screen shot: !cloverage_view_layout.png!",2 +CLOV-1404,"Source highlighting label is cropped in the settings dialog","Project Settings > Clover > View ""Out of date"" labels are cropped [^project_settings_clover.png]",2 +CLOV-1406,"URISyntaxException from Clover IDEA plugin under IDEA13 on Mac OS X","{noformat} java.net.URISyntaxException: Illegal character in path at index 37: file:/Users/grant/Library/Application Support/IntelliJIdea13/clover-idea-3.2.1.jar: java.net.URISyntaxException: Illegal character in path at index 37: file:/Users/grant/Library/Application Support/IntelliJIdea13/clover-idea-3.2.1.jar java.lang.RuntimeException: java.net.URISyntaxException: Illegal character in path at index 37: file:/Users/grant/Library/Application Support/IntelliJIdea13/clover-idea-3.2.1.jar com.cenqua.clover.idea.LibrarySupport.getCloverClassBase(LibrarySupport.java:150) com.cenqua.clover.idea.build.CloverCompiler$RefreshCloverGlobalLibraryTask.execute(CloverCompiler.java:282) com.intellij.compiler.impl.CompileDriver.a(CompileDriver.java:2375) com.intellij.compiler.impl.CompileDriver.access$900(CompileDriver.java:122) com.intellij.compiler.impl.CompileDriver$8.run(CompileDriver.java:706) com.intellij.compiler.progress.CompilerTask.run(CompilerTask.java:167) com.intellij.openapi.progress.impl.ProgressManagerImpl$TaskRunnable.run(ProgressManagerImpl.java:464) com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:178) com.intellij.openapi.progress.ProgressManager.executeProcessUnderProgress(ProgressManager.java:209) com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:212) com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:171) com.intellij.openapi.progress.impl.ProgressManagerImpl$8.run(ProgressManagerImpl.java:373) com.intellij.openapi.application.impl.ApplicationImpl$8.run(ApplicationImpl.java:436) java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) java.util.concurrent.FutureTask.run(FutureTask.java:138) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) java.lang.Thread.run(Thread.java:695) com.intellij.openapi.application.impl.ApplicationImpl$1$1.run(ApplicationImpl.java:153) Caused by: java.net.URISyntaxException: Illegal character in path at index 37: file:/Users/grant/Library/Application Support/IntelliJIdea13/clover-idea-3.2.1.jar java.net.URI$Parser.fail(URI.java:2810) java.net.URI$Parser.checkChars(URI.java:2983) java.net.URI$Parser.parseHierarchical(URI.java:3067) java.net.URI$Parser.parse(URI.java:3015) java.net.URI.(URI.java:577) com.cenqua.clover.idea.LibrarySupport.getCloverClassBase(LibrarySupport.java:121) ... 19 more java.net.URISyntaxException: Illegal character in path at index 37: file:/Users/grant/Library/Application Support/IntelliJIdea13/clover-idea-3.2.1.jar: java.net.URISyntaxException: Illegal character in path at index 37: file:/Users/grant/Library/Application Support/IntelliJIdea13/clover-idea-3.2.1.jar java.lang.RuntimeException: java.net.URISyntaxException: Illegal character in path at index 37: file:/Users/grant/Library/Application Support/IntelliJIdea13/clover-idea-3.2.1.jar com.cenqua.clover.idea.LibrarySupport.getCloverClassBase(LibrarySupport.java:150) {noformat}",2 +CLOV-1408,"As a developer I'd like to see JUnit Parameterized tests in the report","Similarly to the Spock framework (CLOV-1256) I'd like to see runtime test names from the JUnit4 parameterized tests. Example: {code:java} import org.junit.*; import org.junit.runner.*; import org.junit.runners.*; import java.util.*; import static org.junit.Assert.*; import static org.junit.runners.Parameterized.*; @RunWith(Parameterized.class) public class FibonacciTest { @Parameters public static Collection data() { return Arrays.asList(new Object[][] { { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 },{ 6, 8 } }); } private int fInput; private int fExpected; public FibonacciTest(int input, int expected) { fInput= input; fExpected= expected; } @Test public void test() { assertEquals(fExpected, Fibonacci.compute(fInput)); } } class Fibonacci { static int compute(int a) { return a; } } {code} ",5 +CLOV-1409,"Split velocity templates to 2 sets: adg and classic","make a copy of original templates extend HtmlReporter and add option to choose one of them, e.g.: HtmlReporter -style classic/adg ADG is the default one",2 +CLOV-1410,"Add report style=adg/classic options for Ant, Maven, Grails","scope: ant, maven, grails plugins new toggle, default adg, pass to HtmlReporter",2 +CLOV-1411,"Add radio button style=adg/classic in eclipse and idea IDEs","optional: add radio button in reports wizards alternatively: use the default one (ADG) ",1 +CLOV-1412,"Use ADG-compliant colour set for widgets","Replace existing colours by those recommended by ADG: * https://developer.atlassian.com/design/latest/colors.html Scope: (/) tree map (/) cloud view (/) coverage bars (dashboard, package/class/file summary) (/) test results bars (dashboard, test results pages) (/) coverage markers on the page margin (/) class coverage distribution / class complexity diagrams (use ""Blue"" from ADG) (/) colours of hyperlinks ",1 +CLOV-1413,"as a developer I expect that Clover will automatically configure IntelliJ IDEA compiler settings","Since IDEA12 a new external build feature has been introduced. It has also an option to perform parallel build (Settings > Compile > Build independent modules in parallel toggle), however Clover does not support parallel instrumentation (see CLOV-1284). Clover should automatically disable the parallel build toggle whenever compilation starts (it can notify about this fact by a baloon), otherwise it will throw various runtime exceptions during compilation.",1 +CLOV-1415,"The clover2:clover goal does not pass the sourcepath property to underlying task","*Original problem from the cloned issue:* {quote} Clover database contains FileInfo objects for every source file. One of FileInfo fields is an absolute path to given file. When database is written, it uses current platform file separator for file name ('\' for windows, '/' for Linux/MacOS). However, when database is read it interprets file name using again current platform file separator. As a consequence, when database is generated on Windows and report generated on Linux, it cannot resolve file name properly - it takes whole path as a single path segment, resulting in paths like: /path/from/report/generation/sourcepath/D:/path/from/instrumented/build/file.java As a consequence report generation does create html file containing source code with highlighted coverage. {quote} *Problem with the clover2:clover goal:* The clover2:clover call using a default report descriptor (which is located in the maven-clover2-plugin-X.X.X.jar/default-clover-report.xml). This report descriptor has a reporting defined like: {code:xml} {code} i.e. there is no property. Possible fix #1: * add the property * set it's value to a list of standard source roots, similarly as it's done for tag _excerpt from the CloverReportMojo:_ {code:java} antProject.setProperty(""testPattern"", ""**/src/test/**""); {code} _excerpt from the default-clover-report.xml:_ {code:xml} ... {code} so it could be like this: {code:java} antProject.setProperty(""sourceRootsPattern"", ""**/src/test/*;**/src/main/*""); ... {code} (!) potential problem: build may have source roots different than src/test/xxx and src/main/xxx; in such case sources would not be found; it means that settings this property should be optional; it could be done via boolean flag Possible fix #2: * add the property to the clover2:clover goal * if it's not null then pass it's value to the property in the goal in the report descriptor (!) potential problem: how developers could easily find all source roots in all modules in their maven project in order to pass it as the property? ",2 +CLOV-1419,"change project/package statistics to the boxed component","Change this: !package_summary.png! Move it under a horizontal navigation (on overview tab for instance). Keep it as a boxed component (div grid). ",2 +CLOV-1420,"change package and class list tables into TablesSortable","Change this (project summary, package summary): !package_and_class_list.png! into a sortable table like this: https://docs.atlassian.com/aui/latest/sandbox/#",2 +CLOV-1423,"change contributing tests table to TablesSortable etc","Change a table with contributing tests: !contributing_tests.png! To do: * table into TableSortable * ""Show/hide tests"" label into expander * ""Select all/deselect all"" labels into single master toggle * remember about highlighting of lines of code and class' methods in a table",5 +CLOV-1424,"change small class histogram into container","similarly as for coverage statistics put into a box: https://developer.atlassian.com/design/1.2/containers.html this: !small_histogram.png!",1 +CLOV-1425,"change dashboard boxes look","This: [^dashboard_boxes.png] should look like this: https://developer.atlassian.com/design/1.2/containers.html",1 +CLOV-1426,"change page footer look","This: [^page_footer.png] should look like this: https://developer.atlassian.com/design/1.2/page-footer.html ",1 +CLOV-1427,"change cloud tabs","The ""Package risks"" and ""Quick Wins"" tabs: !cloud_tabs.png! should have an ADG tabs look: https://developer.atlassian.com/design/1.2/tabs.html ",1 +CLOV-1428,"change classes/tests/results bottom left frame","Change this: !classes_tests_results.png! Scope: * add a title: https://developer.atlassian.com/design/1.2/typography.html * use tabs: https://developer.atlassian.com/design/1.2/tabs.html * use sortable table: https://developer.atlassian.com/design/1.2/tables.html ",2 +CLOV-1429,"chage test result labels to lozenges","""pass"" / ""fail"" / ""error"" test statuses shall be changed to Subtle lozenges: https://developer.atlassian.com/design/1.2/lozenges.html ",1 +CLOV-1431,"JDK8 sources fail to compile when instrumented by Clover","See the attached comparison of original and instrumented code: [^unicode_decoding_error.png] A problem is as follows: * Clover has a UnicodeDecodingReader class which translates 6-letter character sequences ""\uNNNN"" into a single UTF16 character * this is used to correctly tokenize code identifiers (IDENT) written in non-ascii characters (a variable with German umlaut for instance) In this specific example, some ""\uNNNN"" sequences were translated inside comments, and some characters were ""swallowed"". So for instance a fragment: {noformat} {@code \u} {noformat} ends with ""java: illegal unicode escape"". Related issues: * CLOV-1305 - syntax highlighting problem * CLOV-1131 - Eclipse/IDEA editors get out of sync ",3 +CLOV-1432,"Integration tests are not being instrumented in Grails 2.3","Clover does not instrument integration tests in Grails 2.3. Caused by: * new GrailsIntegrationTestCompiler wrapper introduced in Grails 2.3.0 is not being recognized by Clover as a Groovy compiler * GrailsTestRunner calls Groovy compiler internally and this compiler does not have grover.jar on a classpath, thus Clover AST transformer is not called Todo: * check how to recognize/pass inclusion/exclusion patterns to the internal compiler of GrailsTestRunner Workaround: * not available",3 +CLOV-1434,"Transitive dependency resolution fails in Grails 2.3 during installation of the Clover plugin","Since Grails 2.3 sth has changed in the dependency resolution mechanism. As a consequence, when the Clover plugin is being installed for a first time, the transitive dependency to com.cenqua.clover:clover is not resolved and this jar is not available on class path. As a consequence build fails when it tries to import ""cloverlib.xml"". Workaround: define a dependency to com.cenqua.clover:clover in BuildConfig.groovy (or in pom.xml) - in the very same way as it was made in Clover-for-Grails 3.1.12 or older under the Grails 2.2. Fix: 1) reconfigure dependencies.groovy / pom.xml ? 2) roll back to a previous approach - i.e. merge clover-grails1 branch into default, produce one plugin version, rollback documentation",1 +CLOV-1438,"Create an API for plugging custom I/O handler","Currently Clover uses a standard Java IO/NIO libraries to read from and write to: a coverage database, coverage recording files (global and per-test), test optimization snapshots. This is not sufficient when user want to run an application on a custom file system, such as Apache HDFS. Provide an API which would allow to provide a custom IO handler. Scope: * writing coverage files (global and per-test) * reading/writing database (optional - we deal a lot with file channels which might be a problem; a growable coverage recorder can be used at runtime instead of this) * writing optimization snapshot (optional - not everyone uses test optimization) References: * https://answers.atlassian.com/questions/255286/does-clover-support-to-read-and-write-clover-db-and-coverage-recording-files-from-hdfs * https://answers.atlassian.com/questions/48360/how-can-i-get-functional-test-code-coverage-reports-for-mapreduce-program",8 +CLOV-1441,"Clover plugin doesn't load on IDEA 13 Startup","{noformat} null java.lang.NullPointerException com.cenqua.clover.idea.LibrarySupport.getValidatedCloverLibrary(LibrarySupport.java:81) com.cenqua.clover.idea.build.CloverLibraryInjector$1.run(CloverLibraryInjector.java:44) com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:997) com.cenqua.clover.idea.build.CloverLibraryInjector.addCloverLibrary(CloverLibraryInjector.java:61) com.cenqua.clover.idea.build.CloverLibraryInjector.updateModulesDependencies(CloverLibraryInjector.java:35) com.cenqua.clover.idea.ProjectPlugin.projectPostStartup(ProjectPlugin.java:116) com.cenqua.clover.idea.ProjectPlugin$1.run(ProjectPlugin.java:86) com.intellij.ide.startup.impl.StartupManagerImpl$7.run(StartupManagerImpl.java:286) com.intellij.ide.startup.impl.StartupManagerImpl.a(StartupManagerImpl.java:259) com.intellij.ide.startup.impl.StartupManagerImpl.access$100(StartupManagerImpl.java:52) com.intellij.ide.startup.impl.StartupManagerImpl$4.run(StartupManagerImpl.java:184) com.intellij.openapi.project.DumbServiceImpl.a(DumbServiceImpl.java:238) com.intellij.openapi.project.DumbServiceImpl.access$500(DumbServiceImpl.java:53) com.intellij.openapi.project.DumbServiceImpl$IndexUpdateRunnable$1$3.run(DumbServiceImpl.java:420) java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733) java.awt.EventQueue.access$200(EventQueue.java:103) java.awt.EventQueue$3.run(EventQueue.java:694) java.awt.EventQueue$3.run(EventQueue.java:692) java.security.AccessController.doPrivileged(Native Method) java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) java.awt.EventQueue.dispatchEvent(EventQueue.java:703) com.intellij.ide.IdeEventQueue.e(IdeEventQueue.java:696) com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:524) com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:335) java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) java.awt.EventDispatchThread.run(EventDispatchThread.java:91) {noformat} ",2 +CLOV-1442,"Use more unique property names in clover.xml","The clover.xml contains the following properties: {code:xml} {code} Their names are not very unique so there's some chance that developer could actually use similar ones in his project. This may lead to clash an Ant properties are not read-only once set. Use more distinct names, e.g. ""clover.project.name"". Update documentation on CAC accordingly. ",2 +CLOV-1443,"Clover Grails Plugin fails when tests are launched from IDEA","Steps to reproduce: * import Grails-based project into IntelliJ IDEA * add Clover Grails plugin to the project * run *forked* tests from IDEA Build fails with an error like: {noformat} | Error Error running forked test-app: No such property: testNames for class: _Events (Use --stacktrace to see the full trace) | Error Forked Grails VM exited with error {noformat} Workaround: * disable forked test execution in IDEA Probable cause: IDEA does not call ""grails test-app"" but executes the GrailsScriptRunner, e.g.: {noformat} java -cp ... org.codehaus.groovy.grails.cli.support.GrailsStarter --main org.codehaus.groovy.grails.cli.GrailsScriptRunner {noformat} The most probably this runner does not import the _GrailsTest.groovy, which contains a definition of the testNames property.",2 +CLOV-1446,"Tree map report has an empty line in context menu","Open TreeMap report in IDEA, right click on a class, a context menu is opened which has an empty first line: !jump_to_source.png! ",2 +CLOV-1447,"Add possibility to configure in Eclipse and IDEA IDEs","The and tasks allow to define section, where we can select coverage recorder type etc. There's no possibility to configure it in Clover-for-Eclipse and Clover-for-IDEA plugins.",5 +CLOV-1448,"Test spock under gradle","We don't support Gradle. However, it's worth checking how our Spock works (or not :-) ) with open-source gradle clover plugins available. To do: * prepare a sample app with a build.gradle script * integrate Clover into it using the https://github.com/bmuschko/gradle-clover-plugin * check if spock instrumentation works here * publish results on CAC as a developer guide ",3 +CLOV-1449,"Test spock with XML importing","Test how the can be used together with: * Spock Spec classes with @Unroll * test results imported from an external XML file Purpose of test: * check if runtime test names recorded by Clover matches test names reported by Spock Outcome: * document whether it works (and how) or not",2 +CLOV-1451,"Fix uncheched warnings for code instrumented by Clover","Follow up of CLOV-1399: {quote} I tried it with 3.2.2 same issue for every instrumented class. [WARNING] /Users/kasperni/workspace/cake-container/cake-container/cake-container-api/target/clover/src-instrumented/org/cakeframework/container/RuntimeContainerException.java:[24,758] unchecked cast required: I found: java.lang.Object It is this generated line that generates the warning: return (I) java.lang.reflect.Proxy.newProxyInstance(l.getClass().getClassLoader(), l.getClass() .getInterfaces(), h); It can be solved by adding a @SuppressWarnings(""unchecked"") to the instrumented file: @SuppressWarnings(""unchecked"") public static I lambdaInc(final int i, final T l, final int si) {........} {quote}",2 +CLOV-1455,"///Clover:OFF does not work with lambdas","The following piece of code fails to be instrumented {code:java} public class Foo { // /CLOVER:OFF public static void main(String[] args) { new ConcurrentHashMap<>().computeIfAbsent(""foo"", e -> null); } // /CLOVER:ON } {code} Results in [ERROR] /Users/kasperni/workspace/cake-container/cake-container/cake-container-impl/target/clover/src-instrumented/org/cakeframework/internal/container/handler/Foo.java:[28,58] cannot find symbol symbol: variable __CLR3_2_2133133hrrnhz2t location: class org.cakeframework.internal.container.handler.Foo",2 +CLOV-1457,"clover-for-grails plugin is not working with grails.project.fork","Hello, When I run the grails test-app command in grails 2.3.5. I get the following error: {noformat} Error running forked test-app: No such property: testNames for class: _Events groovy.lang.MissingPropertyException: No such property: testNames for class: _Ev ents at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptByteco deAdapter.java:50) at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty( PogoGetPropertySite.java:49) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjec tGetProperty(AbstractCallSite.java:231) at _Events$_run_closure3.doCall(_Events.groovy:75) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces sorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(Refl ectiveInterceptor.java:1254) at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java: 90) at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:233) at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1086) at groovy.lang.ExpandoMetaClass.invokeMethod(ExpandoMetaClass.java:1110) {noformat} ",2 +CLOV-1459,"native2ascii error converting i18n bundles for plugin","When running with -clover.on in our CI environment (TeamCity), we are getting a weird error: Error native2ascii error converting i18n bundles for plugin [xxxx] java.lang.reflect.InvocationTargetException It's not constrained to a single plugin, typically it lists different plugins. The full stack trace is: {code} [15:28:49][Step 4/8] | Error native2ascii error converting i18n bundles for plugin [spring-security-core-1.2.7.3] java.lang.reflect.InvocationTargetException [15:28:49][Step 4/8] | Error Error executing script TestApp: : java.lang.reflect.InvocationTargetException (NOTE: Stack trace has been filtered. Use --verbose to see entire trace.) [15:28:49][Step 4/8] : java.lang.reflect.InvocationTargetException [15:28:49][Step 4/8] org.codehaus.gant.GantBuilder.invokeMethod(GantBuilder.java:99) [15:28:49][Step 4/8] _GrailsTest_groovy$_run_closure1.doCall(_GrailsTest_groovy:102) [15:28:49][Step 4/8] org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy:185) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding.withTargetEvent(GantBinding.groovy:90) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding.this$4$withTargetEvent(GantBinding.groovy) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy:185) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy) [15:28:49][Step 4/8] org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133) [15:28:49][Step 4/8] TestApp$_run_closure1.doCall(TestApp:32) [15:28:49][Step 4/8] org.codehaus.gant.GantMetaClass.invokeMethod(GantMetaClass.java:133) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy:185) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16_closure18.doCall(GantBinding.groovy) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding.withTargetEvent(GantBinding.groovy:90) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding.this$4$withTargetEvent(GantBinding.groovy) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy:185) [15:28:49][Step 4/8] org.codehaus.gant.GantBinding$_initializeGantBinding_closure5_closure16.doCall(GantBinding.groovy) [15:28:49][Step 4/8] gant.Gant$_dispatch_closure5.doCall(Gant.groovy:381) [15:28:49][Step 4/8] gant.Gant$_dispatch_closure7.doCall(Gant.groovy:415) [15:28:49][Step 4/8] gant.Gant$_dispatch_closure7.doCall(Gant.groovy) [15:28:49][Step 4/8] gant.Gant.withBuildListeners(Gant.groovy:427) [15:28:49][Step 4/8] gant.Gant.this$2$withBuildListeners(Gant.groovy) [15:28:49][Step 4/8] gant.Gant$this$2$withBuildListeners$0.callCurrent(Unknown Source) [15:28:49][Step 4/8] gant.Gant.dispatch(Gant.groovy:415) [15:28:49][Step 4/8] gant.Gant.this$2$dispatch(Gant.groovy) [15:28:49][Step 4/8] gant.Gant.invokeMethod(Gant.groovy) [15:28:49][Step 4/8] gant.Gant.executeTargets(Gant.groovy:591) [15:28:49][Step 4/8] gant.Gant.executeTargets(Gant.groovy:590) [15:28:49][Step 4/8] org.grails.wrapper.GrailsWrapper.main(GrailsWrapper.java:93) [15:28:49][Step 4/8] Caused by: java.lang.reflect.InvocationTargetException [15:28:49][Step 4/8] ... 30 more [15:28:49][Step 4/8] Caused by: java.util.ConcurrentModificationException [15:28:49][Step 4/8] com.atlassian.clover.ant.groovy.GroovycSupport.logGroovycTasks(GroovycSupport.java:102) [15:28:49][Step 4/8] com.atlassian.clover.ant.groovy.GroovycSupport.taskStarted(GroovycSupport.java:123) [15:28:49][Step 4/8] org.apache.tools.ant.Project.fireTaskStarted(Project.java:2184) [15:28:49][Step 4/8] ... 30 more [15:28:49][Step 4/8] | Error Error executing script TestApp: : java.lang.reflect.InvocationTargetException [15:28:50][Step 4/8] Process exited with code 1 {code} Running without ""-clover.on"" removes this problem. ",2 +CLOV-1462,"ClassNotFoundException when running tests in IDEA 13.1 RC with Clover enabled","Install IDEA 13.1 RC and Clover 3.2.2. Load Java project. Create a run configuration for JUnit, select ""Test kind: All in package"", select ""Before launch: Make"". Run tests with Clover disabled - all tests are executed. Run tests with Clover enabled - all tests are executed, but after second and next runs - ClassNotFoundException on a test class occurs. ",2 +CLOV-1466,"Several tests fail with Cannot cast object ... to class 'com_cenqua_clover.CoverageRecorder'","See here for a travis build exhibiting this problem: https://travis-ci.org/thehyve/transmart-core-db/jobs/21220075 19 tests there fail because of this problem. The culprit seems to be this line: https://github.com/thehyve/transmart-core-db/blob/5e8f0400b9ddce75e1d3d2adccf747e42bff3ee6/src/groovy/org/transmartproject/db/dataquery/clinical/TerminalConceptVariablesTabularResult.groovy#L39",3 +CLOV-1467,"Rename com.cenqua to com.atlassian","Rename all references to ""Cenqua"" to ""Atlassian"". It affects: * java packages - com.cenqua.* and com_cenqua_clover (/) * Clover-for-Eclipse plugins and features (/) * com.cenqua.clover:clover artifact (clover core) (/) Optional: Rename also Clover-for-Maven plugin from 'maven-clover2-plugin' to 'clover-maven-plugin'. (x) The maven plugin will not be renamed. Reason? Typing 'mvn clover:setup' in a project where clover-maven-plugin is not explicitly defined in pom.xml causes that Maven resolves the 'clover:setup' as 'com.atlassian.maven.plugins:maven-clover-plugin:maven-plugin:3.7' which is wrong. So it will be very confusing for customers. ",3 +CLOV-1469,"Maven plugin sholud handle target/generated-test-sources","The AbstractInstrumenter recognizes only the target/generated-sources path: {code:java} private boolean isGeneratedSourcesDirectory(final String sourceRoot) { String generatedSrcDirDefaultLifecycle = File.separator + ""target"" + File.separator + ""generated-sources""; String generatedSrcDirCloverLifecycle = File.separator + ""target"" + File.separator + ""clover"" + File.separator + ""generated-sources""; return sourceRoot.indexOf(generatedSrcDirDefaultLifecycle) != -1 || sourceRoot.indexOf(generatedSrcDirCloverLifecycle) != -1; } {code} It shall also detect the target/generated-test-sources.",1 +CLOV-1470,"Maven clover2:setup ignores generated sources","We have several maven projects that contain only generated sources (target/generated-sources/...). The default source directory does not exist for those projects. clover2:setup does not work properly for those projects: the generated sources do not get compiled. We currently work around the issue by creating a marker file in the default source directory.",1 +CLOV-1471,"Maven clover2:setup triggers duplicate class exception","We have several maven projects that have more than one source directory. The non-default directories are added using the build-helper plugin. The clover2:setup goal instruments all source folders, but then sets all non-generated directories as source folders on the maven project. That results in compile errors, since source files are both present in the clover instrumented sources and original location. Example: java/src << 1. default source folder java/src-build << 2. additional source folder target/generate-sources/jaxb << 3. generated source folder Case (2) is causing problems.",3 +CLOV-1478,"Double instrumentation error when running 'mvn site' on JDK8","Run 'mvn clean site' on the src/it/setTestFailureIgnore project using the JDK8 and Maven 2.2.1. It fails with an error: {noformat} [INFO] Processing files at 1.8 source level. [INFO] Instrumentation error com.atlassian.clover.api.CloverException: Double instrumentation detected: f:\Work\release\release-maven-clover2-plugin-hg\src\it\setTestFailureIgnore\target\clover\src-instrumented\com\atlassian\maven\plugin\clover\samples\setTestFailureIgnore\Simple.java appears to have already been instrumented by Clover. com.atlassian.clover.instr.java.CloverTokenStreamFilter.guardAgainstDoubleInstrumentation(CloverTokenStreamFilter.java:66) ... {noformat} The same site goal works correctly under JDK7. ",1 +CLOV-1481,"Invalid instrumentation code for test methods inside anonymous inline classes","Clover generates incorrect reference to the static field __CLR3_2_2_TEST_NAME_SNIFFER in case when a test method is declared inside an inner (static or non-static) or inside an anonymous inline class, which are located inside a non-test top-level class. In such case, the top-level class doesn't have the __CLR3_2_2_TEST_NAME_SNIFFER field (as it's not a test class), but inner/inline classes (which are test ones) are trying to access this field. {noformat} [clover] 2 test methods detected. [javac] ---------- [javac] 1. ERROR in ... [javac] public boolean test() {__CLR3_2_262c962c9htee2hlb.R.globalSliceStart(getClass().getName(),284284);int $CLV_p$=0;java.lang.Throwable $CLV_t$=null;try {boolean $CLV_r$=__CLR3_2_2qua64563cs();$CLV_p$=1;return $CLV_r$;} catch(java.lang.Throwable $CLV_t2$){if($CLV_p$==0&&$CLV_t$==null){$CLV_t$=$CLV_t2$;}_CLR3_2_262c962c9htee2hlb.R.rethrow($CLV_t2$);return false;}finally{CLR3_2_262c962c9htee2hlb.R.globalSliceEnd(getClass().getName(),""com.xyz.RuntimeDebugger.SaveTestCaseAction.getDefaultAvailablePredicate.test"",CLR3_2_2_TEST_NAME_SNIFFER.getTestName(),284284,$CLV_p$,$CLV_t$);}}private boolean __CLR3_2_2qua64563cs(){_CLR3_2_262c962c9htee2hlb.R.inc(284284); [javac] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [javac] __CLR3_2_2_TEST_NAME_SNIFFER cannot be resolved [javac] ---------- [javac] 1 problem (1 error) {noformat} Code example: {code:java} public class SnifferInInnerAndInline { interface TestAction { boolean test(); } static class InnerStaticTest { public void testInnerStatic() { // FAILS HERE } } class InnerTest { public void testInnerNonStatic() { // FAILS HERE } } TestAction testWithInline() { return new TestAction() { public boolean test() { // FAILS HERE (assuming that we have a custom test pattern which matches it) return true; } }; } public static void main(String[] args) { new SnifferInInnerAndInline.InnerStaticTest().testInnerStatic(); new SnifferInInnerAndInline().new InnerTest().testInnerNonStatic(); new SnifferInInnerAndInline().testWithInline().test(); } } {code} ",2 +CLOV-1486,"change historical report","scope: header, footer, tables with ""added"" and ""movers"", optionally, put charts in some boxes",1 +CLOV-1490,"Clover safeEval method is imcompatible with Groovy's @CompileStatic annotation","When trying to use Clover on a Groovy class that is marked @CompileStatic and it contains a null-safe operator (e.g. Bar bar = foo?.bar), then the groovyc compilation fails with the error: No such property: bar for class: java.lang.Object The error is that the generated {code}$CLV_safeEval${code} method returns an Object instead of the type of the property. This then causes Groovy compiler to fail later. I've created a sample project that exhibits the problem at https://github.com/johnrengelman/clover-grooyv-compilestatic Simply run {code}./gradlew test{code} ",3 +CLOV-1492,"Grails' controller methods are not shown as entered","Hello, For some reason the method in a controller is marked as not entered even though the content inside is shown to be executed. Please can you help me rationalize/ understand this? Please refer to me screenshots: index_method_not_executed.png: to see that the index() method is not executed even though its contents are. test_for_index_method.png: the test that is run to get the method to run. ",3 +CLOV-1496,"reduce html report size","As a developer I'd like to have small HTML report size in order to reduce disk space consumption, especially in case of builds on CI server. Possible ways to reduce report size: 1) extract list of packages to separate JSON file and load it dynamically using JS function (instead of embedding it on virtually every page) (/) DONE 2) use some html compression utility (which would strip all whitespace etc) https://code.google.com/p/htmlcompressor/#Compressing_selective_content_in_Velocity_templates (x) performance of the HtmlCompressor is unacceptable (+340% time) 3) remove whitespace from most frequent loops from velocity templates (/) DONE",3 +CLOV-1497,"improve report accessiblity",http://www.w3.org/TR/wai-aria-practices/#TreeView,3 +CLOV-1498,"improve navigation between report entities","We can navigate vertically and horizontally, but on a file level we've got a break: {noformat} project - dashboard | app | test | results | clouds | treemap v package - app | test | results | clouds | +--------------------------------------------------+ v v file - classes | contr tests | methods test class v test {noformat} fix it so that we can jump from test file to test results for a file fix it so that we have one ""source"" tab for a file -> put 'classes and methods' and 'contributing tests' into expandable tables, dialogs etc ",3 +CLOV-1500,"implement global search in the html report - backend","Implement search box in a blue app header. Generate JSON data: * packages, files, classes, methods, tests Split into several indexes (for smaller file size) as theoretical size is up to 40MB (200'000 objects per 200 chars). Add ""automatic"" option (up to 10'000 elements). (/) Add options for: /// (/) Add option for HtmlReporter: --globalSearchScope=package,file,class,method,test|auto --globalSearchLimit=10000 to choose which elements shall be searchable.",8 +CLOV-1502,"tree view is not compacted properly when only 1 package is present","!tree_view_bug.png! We have com.cenqua + samples.money instead of exactly one (root) node named ""com.cenqua.samples.money"". ",1 +CLOV-1503,"provide explanation when number of files is greater than number of classes for a package","There might be a case that number of files > number of classes listed: !more_files_than_classes.png! This is normal behaviour, because by default Clover hides entities having no executable code, such as: empty classes, enums (with no methods), interfaces (with no virtual extension methods). However, this may be confusing for end user. How we could improve this: 1) Set the showEmpty to true by default. Benefit: 'classes >= files' in all cases. Drawback: report will contain unnecessary noise. 2) Add [(?) Help] button above the table. Example: !package_help.png! 3) Add tooltip for 'Files' (TotalElements.getHelp()) 4) Add small text below the class table. For example: ""3 classes are not listed because they contain no executable code."" ",1 +CLOV-1505,"replace a vertical navigation component by a sidebar","Instead of the aui-vertical-nav use the aui-sidebar component. ",3 +CLOV-1508,"Upgrade HTML report to ADG 2.0 / AUI 5.7","Upgrade AUI library to 5.7.x. We may need to make some corrections of CSS to be compatible (probably: colors, shadows, notification messages).",2 +CLOV-1509,"as a developer I'd like to have nanosecond precision for test duration","In reports lots of tests have duration = 0. This is because unit tests are fast and the System.currentTimeMillis() is used to record start and end time of a test. Which is not precise by design. We could increase precision to nanoseconds using System.nanoTime(). Note: we'd still need to call System.currentTimeMillis() to record datetime when test was run.",3 +CLOV-1510,"Remove ""See more"" links from the report dashboard","for: * Most complex packages * Most complex classes * Least tested methods * Class Coverage Distribution * Class Complexity ",1 +CLOV-1511,"""Show contributing test"" change to ...","""Select tests to highlight the code coverage"" or something similar",1 +CLOV-1512,"The ""Show methods"" link does not open the modal dialog","This happens for inner classes (i.e. when a class name contains ""."") May be caused by a way how Modal Dialog handles element id.",1 +CLOV-1514,"tool tips in dashboard widgets shall not be displayed on the right","Tool tips are by default placed on the right, so they don't fit in the 'Clover Dashboard' view: !screenshot-1.png!",1 +CLOV-1515,"use ADG fonts and colours in Cloud View in IDEA","The ADG HTML report in Clover 4 uses new colour set (shades of red instead of blue-red) for tag clouds. The Clover-for-Eclipse has this theme: [^cloud_view_eclipse.png] but the Clover-for-IDEA still uses the old colour set: [^cloud_view_idea.png]",1 +CLOV-1517,"AntIntegrator adds unnecessary double quotes for -Dparam=value JVM options","Class com.atlassian.clover.ci.AntIntegrator puts values of the following properties: -Dclover.historydir and -Dclover.license.cert, -Dclover.license.path in double quotes. On Windows platform it causes problems when a value contains space character - parameters are being split. See BAM-10740. Add a check if OS is Windows and don't add double quotes in such case. ",1 +CLOV-1518,"implement global search in the html report - frontend","Implement search box in blue app header. Generate JSON data: * packages, files, classes, methods, tests Split into several indexes (for smaller file size) as theoretical size is up to 40MB (200'000 objects per 200 chars). Add ""automatic"" option (up to 10'000 elements). Add options for to choose which elements shall be searchable.",5 +CLOV-1526,"View latest Clover information (BAM-14428)","See BAM-14428.",5 +CLOV-1527,"Clover tab with an HTML report generated by Clover 4 shall have a vertical scroll bar (BAM-14777)","See BAM-14777.",1 +CLOV-1528,"Configure Fisheye/Crucible build to use Clover 4",NULL,1 +CLOV-1534,"Move CloverCompilerAdapter out from org.apache.tools.ant.taskdefs package","The org.apache.tools.ant.taskdefs.CloverCompilerAdapter may cause conflicts with Apache Ant packaged as OSGI bundle which exports the same package. Possible fix: (x) The Javac.getFileList() is a getter for compileList. Try using it - we must ensure that compileList and replacementCompileSet have the same size or (/) Use reflections to access the package-protected field. Thanks to this we could move CloverCompilerAdapter to com.atlassian.clover package. ",1 +CLOV-1535,"Application Packages list is empty in Classic report",NULL,1 +CLOV-1538,"Instrumenting assignment of method reference to field results in reference to undefined symbol.","Instrumenting the following snippet results in the compilation error [ERROR] clover/src-instrumented/Test.java:[2,18] cannot find symbol [ERROR] symbol: variable __CLR3_3_000hysmxbbd [ERROR] location: class Test Source: public class Test { Runnable r = System::currentTimeMillis; } Instrumented code: /* $$ This file has been instrumented by Clover 3.3.0#2014033113020816 $$ */public class Test { Runnable r = __CLR3_3_000hysmxbbd.lambdaInc(0,System::currentTimeMillis,1); } ",2 +CLOV-1540,"BAM-13404 BAM-15085 Use BuildConfig to install Clover",NULL,8 +CLOV-1541,"BAM-13208 Automatic integration in multi-module builds","Follow the approach #1",8 +CLOV-1542,"BAM-7272 BAM-10516 BAM-11151 Working subdirectory",NULL,8 +CLOV-1543,"BAM-14734 BAM-14907 Clover charts","https://jira.atlassian.com/browse/BAM-14734 https://jira.atlassian.com/browse/BAM-14907",5 +CLOV-1544,"Release Clover 4.0.2","ant, eclipse, idea, maven, grails",2 +CLOV-1546,"Resolve path to clover.jar when packed as OSGI bundle","ClassPathUtil.getCloverJarPath() searches for a JAR in case when URL returned by class loader is like: {noformat} jar:file:!/path/to/clover.jar/com/atlassian/clover/util/ClassPathUtil.class {noformat} or {noformat} file:/path/to/classes/directory/com/atlassian/clover/util/ClassPathUtil.class {noformat} However, it does not handle a case for OSGI bundles, which have an URI like: {noformat} bundle://28.0:2/com/atlassian/clover/util/ClassPathUtil.class {noformat} Fix: use getClass().getProtectionDomain().getCodeSource().getLocation().toURI() ",1 +CLOV-1547,"The Grails' @Transactional annotation conflicts with Clover's AST transformations","The @Transactional annotation is the new Grails-y way of controlling transactional behavior in a service. It uses an AST transformation to essentially wrap public methods (if added to the class) in a GrailsTransactionTemplate. So you get code that looks like this: {code:java} public void reject(Invoice invoice) { Reference invoice = new Reference(invoice); CallSite[] arrayOfCallSite = $getCallSiteArray(); GrailsTransactionAttribute $transactionAttribute = (GrailsTransactionAttribute)ScriptBytecodeAdapter.castToType(arrayOfCallSite[9].callConstructor(GrailsTransactionAttribute.class), GrailsTransactionAttribute.class); GrailsTransactionTemplate $transactionTemplate = (GrailsTransactionTemplate)ScriptBytecodeAdapter.castToType(arrayOfCallSite[10].callConstructor(GrailsTransactionTemplate.class, this.transactionManager, $transactionAttribute), GrailsTransactionTemplate.class); $transactionTemplate.execute(new _reject_closure5(this, invoice)); } {code} The real body of the method is in the reject_closure5, which ends up calling a method named ""$tt_reject(...)"". Clover doesn't realize that the code originally under the reject method has essentially been relocated to the $tt__reject method. Given that @Transactional is a core part of Grails (starting in 2.3, I believe) and the recommended way to control transactions going forward, this is probably something that should be addressed in Clover core.",3 +CLOV-1552,"Upgrade FastUtil library to version 6.5.2 or later","API was changed since version 4.4.3, some methods used by Clover are missing and there's no direct replacement for them. Migrate Clover's code. ",3 +CLOV-1553,"Upgrade Atlassian Extras to 3.2.x","API has changed in Atlassian Extras 3.x vs 2.5. There's no LicenseManagerFactory.getLicenseManager() We can compose our own license manager and decoder using: Version1LicenseDecoder + Version2LicenseDecoder + DelegatingLicenseDecoder + CloverProductLicenseFactory + DefaultLicenseManager However, there are problems with decoding the ""Clover Desktop"" license = the CloverLicenseTest.testDesktopLicense fails. Investigate: * maybe Clover Desktop license format has changed? * or maybe overlooked by atlassian-extras developers? * or ... ?",3 +CLOV-1554,"Replace iText library","Replace current iText 2.0.1 library by: * a commercial version of iText 5.x or * a PDFBox (http://pdfbox.apache.org) or other tool based on a good open-source license (Apache 2.0, MIT, BSD, PD).",5 +CLOV-1557,"Improve HTML ADG side bar view and a package tree performance",NULL,1 +CLOV-1559,"Create Bitbucket Connect Clover Plugin","Bitbucket - Dan Bennett (Team Lead) - Investigate the creation of a Connect plugin to expose Clover functionality in Bitbucket diff & file viewer (same as Stash functionality)",40 +CLOV-1560,"S3 Artifact handler corrupts Clover tab in Bamboo","Bamboo 5.7 introduces new artifact handler to store files in Amazon S3. Due to a fact that it works on a file-by-file basis, we cannot expose the entire HTML report as a 'site' embedded in the