public Optional<DbScmInfo> getScmInfo(Component file) { Optional<String> uuid = getFileUUid(file); if (!uuid.isPresent()) { return Optional.empty(); } LOGGER.trace("Reading SCM info from DB for file '{}'", uuid.get()); try (DbSession dbSession = dbClient.openSession(false)) { FileSourceDto dto = dbClient.fileSourceDao().selectByFileUuid(dbSession, uuid.get()); if (dto == null) { return Optional.empty(); } return DbScmInfo.create(dto.getSourceData().getLinesList(), dto.getSrcHash()); } }
@Test public void persist_source_hashes() { List<String> lineHashes = Arrays.asList("137f72c3708c6bd0de00a0e5a69c699b", "e6251bcf1a7dc3ba5e7933e325bbe605"); String sourceHash = "ee5a58024a155466b43bc559d953e018"; setComputedData(DbFileSources.Data.newBuilder().build(), lineHashes, sourceHash, null); underTest.execute(new TestComputationStepContext()); assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectByFileUuid(session, FILE1_UUID); assertThat(fileSourceDto.getLineHashes()).containsExactly("137f72c3708c6bd0de00a0e5a69c699b", "e6251bcf1a7dc3ba5e7933e325bbe605"); assertThat(fileSourceDto.getSrcHash()).isEqualTo("ee5a58024a155466b43bc559d953e018"); verify(fileSourceDataWarnings).commitWarnings(); }
@Test public void update_sources_when_src_hash_is_missing() { dbClient.fileSourceDao().insert(dbTester.getSession(), createDto(dto -> dto.setSrcHash(null))); dbTester.getSession().commit(); DbFileSources.Data sourceData = DbFileSources.Data.newBuilder().build(); setComputedData(sourceData, Collections.singletonList("lineHash"), "newSourceHash", null); underTest.execute(new TestComputationStepContext()); assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectByFileUuid(session, FILE1_UUID); assertThat(fileSourceDto.getCreatedAt()).isEqualTo(PAST); assertThat(fileSourceDto.getUpdatedAt()).isEqualTo(NOW); assertThat(fileSourceDto.getSrcHash()).isEqualTo("newSourceHash"); verify(fileSourceDataWarnings).commitWarnings(); }
@Test public void not_update_sources_when_nothing_has_changed() { dbClient.fileSourceDao().insert(dbTester.getSession(), createDto()); dbTester.getSession().commit(); Changeset changeset = Changeset.newChangesetBuilder().setDate(1L).setRevision("rev-1").build(); setComputedData(DbFileSources.Data.newBuilder().build(), Collections.singletonList("lineHash"), "sourceHash", changeset); underTest.execute(new TestComputationStepContext()); assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectByFileUuid(session, FILE1_UUID); assertThat(fileSourceDto.getSrcHash()).isEqualTo("sourceHash"); assertThat(fileSourceDto.getLineHashes()).isEqualTo(Collections.singletonList("lineHash")); assertThat(fileSourceDto.getCreatedAt()).isEqualTo(PAST); assertThat(fileSourceDto.getUpdatedAt()).isEqualTo(PAST); verify(fileSourceDataWarnings).commitWarnings(); }
@Test public void insert() { FileSourceDto expected = new FileSourceDto() .setProjectUuid("PRJ_UUID") .setFileUuid("FILE2_UUID") .setBinaryData("FILE2_BINARY_DATA".getBytes()) .setDataHash("FILE2_DATA_HASH") .setLineHashes(of("LINE1_HASH", "LINE2_HASH")) .setSrcHash("FILE2_HASH") .setCreatedAt(1500000000000L) .setUpdatedAt(1500000000001L) .setLineHashesVersion(1) .setRevision("123456789"); underTest.insert(dbSession, expected); dbSession.commit(); FileSourceDto fileSourceDto = underTest.selectByFileUuid(dbSession, expected.getFileUuid()); assertThat(fileSourceDto.getProjectUuid()).isEqualTo(expected.getProjectUuid()); assertThat(fileSourceDto.getFileUuid()).isEqualTo(expected.getFileUuid()); assertThat(fileSourceDto.getBinaryData()).isEqualTo(expected.getBinaryData()); assertThat(fileSourceDto.getDataHash()).isEqualTo(expected.getDataHash()); assertThat(fileSourceDto.getRawLineHashes()).isEqualTo(expected.getRawLineHashes()); assertThat(fileSourceDto.getLineHashes()).isEqualTo(expected.getLineHashes()); assertThat(fileSourceDto.getLineCount()).isEqualTo(expected.getLineCount()); assertThat(fileSourceDto.getSrcHash()).isEqualTo(expected.getSrcHash()); assertThat(fileSourceDto.getCreatedAt()).isEqualTo(expected.getCreatedAt()); assertThat(fileSourceDto.getUpdatedAt()).isEqualTo(expected.getUpdatedAt()); assertThat(fileSourceDto.getRevision()).isEqualTo(expected.getRevision()); }
@Test public void select_enabled_module_files_tree_from_project() { ComponentDto project = db.components().insertPrivateProject(); ComponentDto module = db.components().insertComponent(newModuleDto(project)); ComponentDto fileDirectlyOnModule = db.components().insertComponent(newFileDto(module)); FileSourceDto fileSourceDirectlyOnModule = db.fileSources().insertFileSource(fileDirectlyOnModule); ComponentDto subModule = db.components().insertComponent(newModuleDto(module)); ComponentDto directory = db.components().insertComponent(newDirectory(subModule, "src")); ComponentDto file = db.components().insertComponent(newFileDto(subModule, directory)); FileSourceDto fileSource = db.fileSources().insertFileSource(file); // From root project assertThat(underTest.selectEnabledFilesFromProject(dbSession, project.uuid())) .extracting(FilePathWithHashDto::getUuid, FilePathWithHashDto::getModuleUuid, FilePathWithHashDto::getSrcHash, FilePathWithHashDto::getPath, FilePathWithHashDto::getRevision) .containsExactlyInAnyOrder( tuple(fileDirectlyOnModule.uuid(), module.uuid(), fileSourceDirectlyOnModule.getSrcHash(), fileDirectlyOnModule.path(), fileSourceDirectlyOnModule.getRevision()), tuple(file.uuid(), subModule.uuid(), fileSource.getSrcHash(), file.path(), fileSource.getRevision())); // From module assertThat(underTest.selectEnabledFilesFromProject(dbSession, module.uuid())).isEmpty(); // From sub module assertThat(underTest.selectEnabledFilesFromProject(dbSession, subModule.uuid())).isEmpty(); // From directory assertThat(underTest.selectEnabledFilesFromProject(dbSession, directory.uuid())).isEmpty(); assertThat(underTest.selectEnabledFilesFromProject(dbSession, "unknown")).isEmpty(); }
boolean srcHashUpdated = !srcHash.equals(previousDto.getSrcHash()); String revision = computeRevision(latestChangeWithRevision); boolean revisionUpdated = !ObjectUtils.equals(revision, previousDto.getRevision());
.extracting(FilePathWithHashDto::getUuid, FilePathWithHashDto::getModuleUuid, FilePathWithHashDto::getSrcHash, FilePathWithHashDto::getPath, FilePathWithHashDto::getRevision) .containsExactlyInAnyOrder( tuple(fileDirectlyOnModule.uuid(), module.uuid(), fileSourceDirectlyOnModule.getSrcHash(), fileDirectlyOnModule.path(), fileSourceDirectlyOnModule.getRevision()), tuple(file.uuid(), subModule.uuid(), fileSource.getSrcHash(), file.path(), fileSource.getRevision())); .extracting(FilePathWithHashDto::getUuid, FilePathWithHashDto::getModuleUuid, FilePathWithHashDto::getSrcHash, FilePathWithHashDto::getPath, FilePathWithHashDto::getRevision) .containsExactlyInAnyOrder( tuple(fileDirectlyOnModule.uuid(), module.uuid(), fileSourceDirectlyOnModule.getSrcHash(), fileDirectlyOnModule.path(), fileSourceDirectlyOnModule.getRevision()), tuple(file.uuid(), subModule.uuid(), fileSource.getSrcHash(), file.path(), fileSource.getRevision())); .extracting(FilePathWithHashDto::getUuid, FilePathWithHashDto::getModuleUuid, FilePathWithHashDto::getSrcHash, FilePathWithHashDto::getPath, FilePathWithHashDto::getRevision) .containsExactlyInAnyOrder( tuple(file.uuid(), subModule.uuid(), fileSource.getSrcHash(), file.path(), fileSource.getRevision()));
public Optional<DbScmInfo> getScmInfo(Component file) { Optional<String> uuid = getFileUUid(file); if (!uuid.isPresent()) { return Optional.empty(); } LOGGER.trace("Reading SCM info from DB for file '{}'", uuid.get()); try (DbSession dbSession = dbClient.openSession(false)) { FileSourceDto dto = dbClient.fileSourceDao().selectSourceByFileUuid(dbSession, uuid.get()); if (dto == null) { return Optional.empty(); } return DbScmInfo.create(dto.getSourceData().getLinesList(), dto.getSrcHash()); } }
boolean srcHashUpdated = !srcHash.equals(previousDto.getSrcHash()); String revision = computeRevision(latestChangeWithRevision); boolean revisionUpdated = !ObjectUtils.equals(revision, previousDto.getRevision());