Skip to content

LiteVCS#9

Open
ArtyomLobanov wants to merge 35 commits into
masterfrom
task7
Open

LiteVCS#9
ArtyomLobanov wants to merge 35 commits into
masterfrom
task7

Conversation

@ArtyomLobanov
Copy link
Copy Markdown
Owner

No description provided.

Comment thread README.txt
@@ -0,0 +1,19 @@
Список команд:
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

такая штука тоже полезна, но это пользовательская информация. под кратким описанием внутреннего устройства в условии имелось в виду описание архитектуры

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавил описание архитектуры

for (String path : e.getConflicts()) {
System.out.println(" " + path);
}
} catch (LostFileException e) {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

а почему бы все эти сообщения не заворачивать внутрь объекта исключения при его создании? тогда тут можно будет сделать catch по базовому классу и просто вывести сообщение

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну, идея была в том, чтобы максимально вынести логику написания сообщений из библиотеки. Вдруг пользовательский интерфейс на другом языке будет, например?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

локализация другими средствами делается -- обычно текстовые строки выносятся в отдельные файлы, и подменяются для нужного языка. на уровне кода с этим оооочень геморройно будет работать. тут важнее определить, кто конкретно знает, что за проблема произошла, и это скорее всего именно то место, которое создаёт объект исключения

private LiteVCS() {
}

public static void hello(@NotNull String path, @NotNull String author) throws BrokenFileException,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

этому методу явно не хватает документации

*/
public static void init(@NotNull String path) throws RecreatingRepositoryException,
RepositoryNotInitializedException {
new DataManager(path).initRepository();
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

очень интересно будет посмотреть, как вы будете модульные тесты к такому коду писать :)

ContentDescriptor stage = dataManager.getStage();
ContentDescriptor updatedStage;
if (!file.isFile()) {
throw new Error("Possible to add files only");
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch (source)

Error это обычно разного рода аппаратные ошибки, ошибки при работе с памятью и т.п. в своём коде лучше использовать RuntimeException

*/
public static void createBranch(@NotNull String path, @NotNull String branchName)
throws BrokenFileException, LostFileException, ConflictNameException, RepositoryNotInitializedException {
DataManager dataManager = new DataManager(path);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

вот смотрите, паттерн в том, что каждый метод тут начинается с создания DataManager'а. а можно было бы хранить в себе просто локально экземпляр и вызывать у него нужные методы, передавая им правильный путь. и тогда эта зависимость была бы явно видна, и её можно было бы пытаться замокать в тестах


private static final String ROOT_DIRECTORY_NAME = ".liteVCS";
private static final String PATH_TO_VERSIONS_FILES = Paths.get(ROOT_DIRECTORY_NAME, "versions").toString();
private static final String PATH_TO_CONTENT_DESCRIPTORS_FILES = Paths.get(ROOT_DIRECTORY_NAME, "descriptors").toString();
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

не влезает строчка в 120 символов

* Special class which provides all the main
* functionality of library by static methods
*/
public class LiteVCS {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

вообще мне нравится, как у вас получилось разделить логику от работы с файлами. теперь нужно сделать этот класс более тестируемым

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вынес DataManager в поле, сделал все основные методы не статическими. В конструктор можно передавать DataManager. Можно для тестов подсунуть свой, фейковый.


import static org.junit.Assert.*;

public class DataManagerTest {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

:(



@Test
public void addBranchSwitchChangeSwitchMerge() throws Exception {
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

два больших сценария -- это хорошо, но хотелось бы ещё кучку сценариев поменьше + модульные тесты всё же

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Добавил маленьких тестов

@jzuken
Copy link
Copy Markdown

jzuken commented Apr 2, 2017

✗ java -jar ../liteVCS-1.0-SNAPSHOT.jar init
✗ cp ~/.zshrc .
✗ java -jar ../liteVCS-1.0-SNAPSHOT.jar add
Error: wrong number of arguments
✗ java -jar ../liteVCS-1.0-SNAPSHOT.jar add .zshrc
Error: com/google/common/hash/Hashing

я что-то сделал не так?

@ArtyomLobanov
Copy link
Copy Markdown
Owner Author

А там есть такой файл? Я что-то типа *.fgvvv не делал. Надо сделать?

@jzuken
Copy link
Copy Markdown

jzuken commented Apr 2, 2017

есть конечно. я переименовал файл, чтобы в его имени не было точки, ошибка та же выдалась. оно от меня чего-то особого хочет?

@jzuken
Copy link
Copy Markdown

jzuken commented Apr 20, 2017

✗ java -jar ../my_svn-1.0-SNAPSHOT.jar init a
Error: wrong number of arguments

пишет еррор, а репозиторий всё равно инициализирует

UPD: а, нет. оно только папку с логами создаёт. и это мешает потом проинициализировать репозиторий уже по-нормальному:

✗ java -jar ../my_svn-1.0-SNAPSHOT.jar init
Error: Looks, like you tried to create repository second time

@jzuken
Copy link
Copy Markdown

jzuken commented May 19, 2017

лог писать прямо в рабочую копию -- это не айс, конечно. особенно если его ещё и в выводе команды status показывать постоянно пользователям. давайте их хотя бы из статуса уберём?

@jzuken
Copy link
Copy Markdown

jzuken commented May 19, 2017

очень хочется какой-то хелп со списком команд и аргументов

@jzuken
Copy link
Copy Markdown

jzuken commented May 19, 2017

ещё пусть status выводит текущий бранч, а то хрен разберёшься, где находишься

@jzuken
Copy link
Copy Markdown

jzuken commented May 19, 2017

сделал два бранча с разными файлами, замерджил один в другой, файла второго не увидел. хотя может я что не так делал, хелпа по командам то нет

@ArtyomLobanov
Copy link
Copy Markdown
Owner Author

Логи по плану пишутся в .liteVCS/logs и, конечно, не отображаются в status. Была проблема с различием форматов путей к файлам в Windows и Linux, поэтому раньше её не замечал. Протестировал в виртуальной машине. Теперь должно работать как надо)

@ArtyomLobanov
Copy link
Copy Markdown
Owner Author

Название активной ветки в status выводит

@ArtyomLobanov
Copy link
Copy Markdown
Owner Author

help [название команды] выводит описание команды
Но я бы умер столько по-английски писать, так что на русском

@ArtyomLobanov
Copy link
Copy Markdown
Owner Author

help --all выводит список всех команд

@ArtyomLobanov
Copy link
Copy Markdown
Owner Author

При слиянии веток, пользовательские файлы не обновляются. Чтобы увидеть изменения надо сделать reset [file] или checkout [id последнего коммита в ветке]

@jzuken
Copy link
Copy Markdown

jzuken commented May 28, 2017

в итоге по 9 баллов за обе задачи из-за большого количества замечаний и ошибок по ходу

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants