Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
/.idea
/out

# Ignore Gradle project-specific cache directory
.gradle

# Ignore Gradle build output directory
build
27 changes: 13 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
### Команда №3 (MSE'23)
- Васильев Анатолий
- Васильев Максим
- Мензоров Константин
- Золотухин Илья

### Цель работы

**Требования и нюансы bash**:
- команды `cat`, `echo`, `wc`, `pwd`, `exit`
- 'одинарные' и "двойные" кавычки (full and weak quoting)
- команды вида `var=value`, оператор `$var`
- вызов внешних программ
- пайплайны, т.е. оператор `|`
Команда #2 добавила команды `cd`, `ls` и юнит-тесты, а также архитектурный ревью к команде #3

# Ревью архитектуры

Архитектура в целом монолитная - все состояние приложения держится в `main`. В рамках данной задачи это работает, но могут возникнуть трудности при необходимости вычислений со своим контекстом (запуск подпрограмм).

Из хорошего: разбор пользовательского ввода на команды вынесен в отдельный модуль, добавление новых команд для разбора выполняется легко. Но выразительности недостаточно, чтобы указать количество/формат параметров, принемаемых командой. Поэтому проверкой правильности аргументов выполняется внутри класса команды в методе `start`.

Несмотря на то, что есть класс `PipeManagerCommands`, который по всей видимости должен заниматься управлением пайпами, по факту за вызов следующей команды в пайпе ответственна именно текущая команда. Т. е. механизм пайпов абстрагирован не лучшим образом.

Добавление команды `cd` вышло достаточно трудоемким, поскольку все команды были завязаны на текущую директорию jvm, которую менять нельзя. Поэтому пришлось внести модификации в каждую команду, которая работает с файловой системой.

Добавление же команды `ls` не вызвало особых трудностей. Достаточно было создать новый класс `Ls`, реализовать логику и проверку аргументов, и "зарегистрировать" команду в глобальном словаре команд.
11 changes: 11 additions & 0 deletions SD.iml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
Binary file removed SD.png
Binary file not shown.
91 changes: 0 additions & 91 deletions arch_docs.md

This file was deleted.

40 changes: 40 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
plugins {
id "java"
id 'application'
}

group = "mse.sd.bash.analyze"
version = "1.0-SNAPSHOT"

repositories {
mavenCentral()
}

dependencies {
implementation("org.jetbrains:annotations:16.0.2")
testImplementation(platform("org.junit:junit-bom:5.7.0"))
testImplementation("org.junit.jupiter:junit-jupiter")
}

java {
sourceSets {
main {
java {
srcDirs = ["src/main"]
}
}
test {
java {
srcDirs = ["src/test"]
}
}
}
}

tasks.compileJava {
options.release.set(17)
}

tasks.test {
useJUnitPlatform()
}
Binary file added gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
7 changes: 7 additions & 0 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading