diff --git a/src/init/Notes/ANSI-C-Notes-PL- b/src/init/Notes/ANSI-C-Notes-PL- deleted file mode 160000 index a4fad2e..0000000 --- a/src/init/Notes/ANSI-C-Notes-PL- +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a4fad2e7a532693520930153a8428c1acc105d77 diff --git a/src/init/Notes/Academy b/src/init/Notes/Academy deleted file mode 160000 index fe474e7..0000000 --- a/src/init/Notes/Academy +++ /dev/null @@ -1 +0,0 @@ -Subproject commit fe474e7fd10b9499e95bb1979777032267e33262 diff --git a/src/init/Notes/C-Primer-Plus-6th-Edition-Notes-PL- b/src/init/Notes/C-Primer-Plus-6th-Edition-Notes-PL- deleted file mode 160000 index 8513103..0000000 --- a/src/init/Notes/C-Primer-Plus-6th-Edition-Notes-PL- +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8513103a9b229c7565c921b11c38d25d0a2d58ba diff --git a/src/init/Notes/Effective-Modern-CPP-2014-Notes-PL- b/src/init/Notes/Effective-Modern-CPP-2014-Notes-PL- deleted file mode 160000 index 93acdc5..0000000 --- a/src/init/Notes/Effective-Modern-CPP-2014-Notes-PL- +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 93acdc5cdd91b76f88d0dc2261098333022b1c1b diff --git a/src/init/Notes/Getting-Started-with-SQL-Notes-PL- b/src/init/Notes/Getting-Started-with-SQL-Notes-PL- deleted file mode 160000 index 41eb403..0000000 --- a/src/init/Notes/Getting-Started-with-SQL-Notes-PL- +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 41eb40351739b8829c764b401a3e3beaf3615bf7 diff --git a/src/init/Notes/Introduction-To-Algorithms-CLRS-Notes-PL b/src/init/Notes/Introduction-To-Algorithms-CLRS-Notes-PL deleted file mode 160000 index b3a956e..0000000 --- a/src/init/Notes/Introduction-To-Algorithms-CLRS-Notes-PL +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b3a956e370673f83c2569c3b46491c5b7cd8227c diff --git a/src/init/Notes/Java-Complete-Reference-9th-Edition-Notes-PL- b/src/init/Notes/Java-Complete-Reference-9th-Edition-Notes-PL- deleted file mode 160000 index e6f99ef..0000000 --- a/src/init/Notes/Java-Complete-Reference-9th-Edition-Notes-PL- +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e6f99ef05157e12bdacce7fc4e9319ac50fa82eb diff --git a/src/init/Notes/Machine-Learning-Notes-PL b/src/init/Notes/Machine-Learning-Notes-PL deleted file mode 160000 index 59ad31a..0000000 --- a/src/init/Notes/Machine-Learning-Notes-PL +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 59ad31aeb9995a64a931ce1da9f0789148dbed96 diff --git a/src/init/Notes/MySQL-Dev-Library-4th-Notes-PL b/src/init/Notes/MySQL-Dev-Library-4th-Notes-PL deleted file mode 160000 index 1791ca1..0000000 --- a/src/init/Notes/MySQL-Dev-Library-4th-Notes-PL +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 1791ca10cbbdb2c7a56e41f35a92c5592b2e3abb diff --git a/src/init/Notes/Pro-Git-Second-Edition-Notes-PL- b/src/init/Notes/Pro-Git-Second-Edition-Notes-PL- deleted file mode 160000 index 9dafa34..0000000 --- a/src/init/Notes/Pro-Git-Second-Edition-Notes-PL- +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9dafa3492d6ee2ef74d8ef081e1f693db463fc28 diff --git a/src/init/Notes/Python-Essential-Reference-Notes-PL- b/src/init/Notes/Python-Essential-Reference-Notes-PL- deleted file mode 160000 index 2cffc2d..0000000 --- a/src/init/Notes/Python-Essential-Reference-Notes-PL- +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2cffc2d86fef7d66c656b9f62262b6a83ac26bc3 diff --git a/src/init/Notes/Sedgewick-Notes-PL b/src/init/Notes/Sedgewick-Notes-PL deleted file mode 160000 index 7b68d12..0000000 --- a/src/init/Notes/Sedgewick-Notes-PL +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7b68d123d6ee2e79a77dfb54416879f4558e6ccf diff --git a/src/init/Notes/The-CPP-Programming-Language-4th-Edition-Notes-PL- b/src/init/Notes/The-CPP-Programming-Language-4th-Edition-Notes-PL- deleted file mode 160000 index 5ad7864..0000000 --- a/src/init/Notes/The-CPP-Programming-Language-4th-Edition-Notes-PL- +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5ad7864f8a789f0c0c832bd4ba90b913672c6ea7 diff --git a/src/init/content.xml b/src/init/content.xml deleted file mode 100644 index 8ce3b48..0000000 --- a/src/init/content.xml +++ /dev/null @@ -1 +0,0 @@ -PODSTAWY GITAOTRZYMYWANIE REPOZYTORIUMINICJALIZACJA REPOZYTORIUM$ git initTWORZY NOWY PODFOLDER.gitZAWIERA WSZYSTKIE NIEZBĘDNEPLIKI REPOZYTORIUMSZKIELET REPOZYTORIUMKLONOWANIE REPOZYTORIUM$ git clone [url]PRZYKŁAD$ git clone https://github.com/libgit2/libgit21. TWORZY FOLDER O NAZWIE ZAWARTEJ W URLUINICJALIZUJE PLIK .gitWEWNĄTRZ2. KLONUJE REPOZYTORIUMŚCIĄGA PRAWIE WSZYSTKIE PLIKI Z SERWERAKLONOWANIE DO INNEGO FOLDERUDODAJESZ NAZWĘ FOLDERU PO KOMENDZIE$ git clone https://github.com/libgit2/libgit2 mylibgitTUTAJ mylibgitUZYWA RÓŻNYCH PROTOKOŁÓWgit://https://PROTOKÓŁ SSHŚLEDZENIE ZMIAN W REPOSPRAWDZANIE STATUSU PLIKÓW$ git statusSKRÓCONE$ git status -s$ git status --shortDOKŁADNIEJSZE$ git diffPOKAZUJE TYLKO ZMIANY W PLIKACHKTÓRE NIE BYŁY STAGE'OWANEPOKAZUJEDOKŁADNIE ZMODYFIKOWANE LINIJKIW DANYM PLIKUETC.git diff --stagedPOKAZUJE ZMIANY W PLIKACHKTÓRE SĄ JUŻ STAGE'OWANEALIASdiff --cachedWAŻNEJEST TEŻ ZEWNĘTRZNY PROGRAM diffSTRONA 54 PO INFOŚLEDZENIE NOWYCH PLIKÓW$ git add READMEINTERPRETUJ JAKODODAJ TEN KONTENTDO NASTĘPNEGO COMMITE'A!DODAJE PLIK O DANEJ NAZWIEDO ŚLEDZENIA PRZEZ GITADODAWANIE ZMODYFIKOWANYCH PLIKÓWSEKCJAChanged butnot staged for commit”WAŻNEJEŻELI DODASZ PLIKPOTEM GO ZMODYFIKUJESZBEZ COMMITE'ATO ZOSTANIE DODANA POPRZEDNIA WERSJATRZEBA DODAĆ JESZCZE RAZIGNOROWANIE PLIKÓWPO CO?PLIKI KTÓRYCH NIE CHCESZŚLEDZIĆ W REPONP. BUILDYPLIK .gitignoreDEFINIUJESZ W NIMSCHEMAT/NAZWYPLIKÓWKTÓRYCH NIE CHCESZ OBSERWOWAĆPRZYKŁAD*.[oa]*~REGUŁY STRONA 50COMMITOWANIE$ git commitCO ROBI?COMMITUJE WSZYSTKIE STAGE'OWANE PLIKIWŁĄCZA USTAWIONY EDYTOR TEKSTOWYI WYŚWIETLA PLIKW KTÓRYM MOŻESZ OPISAĆ COMMIT'EA$ git commit -m "Story 182: Fix benchmarks for speed"DODAJE OD RAZU KOMENTARZODNOŚNIE COMMITE'AOBOK DOMYŚLNEJ WIADOMOŚCI GITA$ git commit -a -m 'added new benchmarks'DODAJE WSZYSTKIE PLIKI DO STAGE'APOTEM COMMITUJEUSUWANIE PLIKÓW$ git rm PROJECTS.mdUSUWA PLIK NA TRWALE!WAŻNE!NIE MUSISZ ICH USUWAĆZE STAGE'A-fWYMUSZASZ USUNIĘCIEJEŻELI PLIK ZOSTAŁ ZMIENIONYI DODANY DO STAGE'A$ git rm --cached READMEUSUWA ZE STAGE'APRZENOSZENIE PLIKÓW$ git mv file_from file_toZMIENIA NAZWĘ PLIKUTAK JAK NORMALNA KOMENDAWAŻNENIE MUSISZ PONOWNIE DODAWAĆ PLIKUDO STAGE'AŚLEDZENIE HISTORII ZMIAN$ git logPOKAZUJE HISTORIĘ COMMITE'ÓW$ git log -pPOKAZUJE DOKŁADNĄ ZMIANĘ W DANYM COMMIT'CIEKTÓRA LINIJKA ETC.--statPOKAZUJE GŁOWNIE WIADOMOŚĆODNOŚNIE DANEGO COMMITE'A--prettyCO ROBI?ZMIENIA OUTPUT NA INNY FORMATPRZYKŁAD$ git log --pretty=onelineDANY COMMIT W JEDNEJ LINIIWYŚWIETLA TYLKO WIADOMOŚĆODNOŚNIE ZMIANINNE OPCJEshortfullfuller$ git log --pretty=format:"%h - %an, %ar : %s"WŁASNY FORMATLISTA OPCJISTRONA 62--graphPOKAZUJE GRAF ASCIIODNOŚNIE BRANCHYOGRANICZANIE LOGU OUTPUTU$ git log -LICZBAPOKAZUJE LICZBA OSTATNICH COMMITE'ÓW--sincePOKAZUJE LOG OD PEWNEGO MOMENTU$ git log --since=2.weeks--untilPOKAZUJE LOG DO PEWNEGO MOMENTUSTRONA 64-65 WIĘCEJ OPCJI$ git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \WIĘCEJ NA STRONIE 63COFANIE ZMIANgit commit --amendBIERZE STAGING AREAI UŻYWA GO DO COMMITE'APOWTÓRZENIE COMMITE'AWCZEŚNIEJ DODAJ PLIKI DO STAGE'A PRZEZ ADDTEN COMMIT ZAMIENIA TEN POPRZEDNI!UNSTAGE'INGgit reset HEAD NAZWA_PLIKUgit status PRZYPOMINA O TYMODMODYFIKOWANIE PLIKU W STAGE'Ugit checkout -- NAZWA_PLIKUWAŻNEPO COMMIT'CIEMOŻNA ODZYSKAĆ WIĘKSZOŚĆ PLIKÓWZDALNE REPOZYTORIAgit remote -vWYPLUWA NAZWĘ ZDALNYCH REPOZYTORIÓWKTÓRYMI ZARZADZADODAWANIE REPOZYTORIÓWgit remote add [skrót] [URL]git fetch [skrót]ŚCIAGA WSZYSTKIE INFPRMACJEZ REPO KTÓRYCH NIE POSIADASZWAŻNEJEŻELI KLONUJESZ REPOZYTORIUMTO GIT NAZYWA JE originJEST TO WSPOMNIANY WYŻEJ SKRÓTgit push [zdalna-nazwa] [nazwa brancha]PUSHUJE WERSJĘ DO DANEGO BRANCHAMOŻESZ PUSHOWAĆTYLKO WTEDY GDYMASZ NAJNOWSZE REPOZYTORIUMgit remote show [nazwa]POKAZUJE DANE ODNOŚNIE REPOZYTORIUMUSUWANIE I ZMIENIANIE NAZWY git remote rename pb paul git remote rm paulTAGOWANIECO TO?ZAZNACZENIE DANEGO MIEJSCA W HISTORIINP, WYDANIE WERSJI 1.0git tagWYŚWIETLA UTWORZONE JUŻ TAGI git tag -l 'v1.8.5*' WYSZUKUJE TYLKO WERSJI 1.8.5WPISYWANIE NORMALNYCH REGEXÓWRODZAJE TAGÓWLEKKIE JAK NIEZMIENNY BRANCHWSKAŹNIK NA KONKRETNY COMMITgit tag v1.4-lw-lw DO LIGHTWEIGHT TAGUADNOTACJEPEŁEN OBIEKTWERYFIKOWALNY PRZEZ GPGPOSIADA NAZWĘ TAGGUJACEGOE-MAIL ETC.git tag -a v1.4 -m 'my version 1.4'TWORZENIE TAGU -a-m WIADOMOŚĆ ODNOŚNIE TAGUDODAWANIE TAGÓW TO COMMITE'ÓW git tag -a v1.2 9fceb02NUMER HEX TO NUMER COMMITAgit log --pretty=onelineTAK MOŻEMY SPRAWDZIĆDZIELENIE TAGÓWPUSHUJE JE TAK SAMO JAK ZMIANYgit push [NAZWA_REPO] [NAZWA_TAGU]git push origin --tags PUSHUJE WSZYSTKIE TAGI DO REPOZYTORIUMALIASYALIASY DLA DANYCH KOMENDW PLIKU git configPRZYKŁADY$ git config --global alias.co checkoutWYKRZYKNIK JEŚLI CHCEMY KOMENDĘ SPOZA GITAgit config --global alias.visual '!gitk'Sheet 1 \ No newline at end of file diff --git a/src/init/init.py b/src/init/init.py index 766ad0e..57e5864 100644 --- a/src/init/init.py +++ b/src/init/init.py @@ -1,42 +1,30 @@ #DODAC COMMITE'Y -from argparse import ArgumentParser -from zipfile import ZipFile import xml.etree.ElementTree as xmlET -import os import mysql.connector -from getpass import getpass -import sys import pexpect + +from argparse import ArgumentParser +from zipfile import ZipFile from time import sleep from subprocess import run - +from getpass import getpass +from os import walk from setup_database import setup_database -sys.path.append('../procedures') -from setup_procedures import setup_procedures -#TO FIX -id=1 +#RECURSIVE READ OF MIND MAPS def recursive_read(root, cursor, database): - global id + global MAP_ID if root.text is not None: - cursor.callproc('add_node', (id, root.text)) - print('Adding branch: ' + str(id), end='\r') - id += 1 + cursor.callproc('add_node', (MAP_ID, root.text))[0] + print('Added branch: ' + str(MAP_ID) , end='\r') + MAP_ID += 1 for elem in root.getchildren(): recursive_read(elem, cursor, database) -#id = 1 -#def recursive_read(root, cursor, database): -# global id -# if root.text is not None: -# cursor.callproc('add_node', (id, root.text)) -# database.commit() -# print('[GATHERING DATA] Working on branch: ' + str(id), end='\r') -# id += 1 -# for elem in root.getchildren(): -# recursive_read(elem, cursor, database) + +#ARGUMENT PARSING AND MAIN PROGRAM LOGIC parser = ArgumentParser( description=''' @@ -76,6 +64,13 @@ def recursive_read(root, cursor, database): help='''Engine used for database creation [DEFAULT: InnoDB]''', default='InnoDB') +parser.add_argument('--no_store_password', '-n', required=False, action='store_true', + help='''Do not store password in secured file in the database\n + WARNING! if this argument is specified, xms searcher will ask you\n + to provide MySQL password each time! + ''', + default=True) + parser.add_argument('--experimental', required=False, action='store_true', help='''Turns on experimental functions [Mind Maps XSD validation]\n IMPORTANT: Slows down the program significantly\n''', @@ -110,6 +105,7 @@ def recursive_read(root, cursor, database): process.sendline('source ../procedures/setup_procedures.sql') #BUDUJEMY NAPIECIE sleep(1) + #process.interact() #ZBUDOWANO NAPIECIE process.close() print("Procedures loaded correctly\n") @@ -117,20 +113,26 @@ def recursive_read(root, cursor, database): #SET UP ROOT cursor.execute('''INSERT INTO tree (content, lft, rgt) VALUES ('root', 1, 2) ''') - for subdir, dirs, files in os.walk(args.path): + for subdir, dirs, files in walk(args.path): for i, file in enumerate(files): if file.endswith('.xmind'): archive = ZipFile(subdir + r'/' + file, 'r') + + #EXPERIMENTAL if args.experimental: print('Validating file ' + file) run(['xmllint', '--noout', '--schema', '../validations/mind_map.xsd', archive.extract('content.xml')]) + run(['rm', 'content.xml']) + + #SCANNING MIND MAPS with archive.open('content.xml', 'r') as content: - id = 1 + MAP_ID = 1 print('Adding branches from file ' + file + ' to database') tree = xmlET.parse(content) recursive_read(tree.getroot(), cursor, database) print('Branches from file ' + file + ' added successfully\n') -except Error as e: + +except Exception as e: print(e) finally: cursor.close() diff --git a/src/init/setup_database.py b/src/init/setup_database.py index 149ca74..de5b5b3 100644 --- a/src/init/setup_database.py +++ b/src/init/setup_database.py @@ -20,7 +20,7 @@ def setup_database(database, args): content TEXT NOT NULL, lft BIGINT NOT NULL, rgt BIGINT NOT NULL, - FULLTEXT (content) + FULLTEXT(content) )ENGINE=''' + args.engine ) return cursor; diff --git a/src/procedures/setup_procedures.sql b/src/procedures/setup_procedures.sql index 1b0a720..fd98384 100644 --- a/src/procedures/setup_procedures.sql +++ b/src/procedures/setup_procedures.sql @@ -20,8 +20,8 @@ proc: BEGIN START TRANSACTION; - UPDATE tree SET lft = CASE WHEN lft > parent_rgt THEN lft + 2 ELSE lft END - ,rgt = CASE WHEN rgt >= parent_rgt THEN rgt + 2 ELSE rgt END + UPDATE tree SET lft = CASE WHEN lft > parent_rgt THEN lft + 2 ELSE lft END, + rgt = CASE WHEN rgt >= parent_rgt THEN rgt + 2 ELSE rgt END WHERE rgt >= parent_rgt; INSERT INTO tree (content, lft, rgt) @@ -39,7 +39,8 @@ DROP PROCEDURE IF EXISTS find_node; // CREATE DEFINER = CURRENT_USER PROCEDURE find_node ( - IN searched TEXT + IN searched TEXT, + IN off BIGINT ) proc: BEGIN @@ -47,7 +48,9 @@ proc: BEGIN SELECT parent.content FROM tree AS node, tree AS parent - WHERE node.lft BETWEEN parent.lft AND parent.rgt AND MATCH(node.content) AGAINST(searched IN BOOLEAN MODE) + WHERE node.lft BETWEEN parent.lft AND parent.rgt + AND node.content = + (SELECT content FROM tree WHERE match(content) AGAINST(searched IN BOOLEAN MODE) LIMIT 1 OFFSET off) ORDER BY parent.lft; END // diff --git a/src/xms.py b/src/xms.py index ba10b36..7fb578a 100644 --- a/src/xms.py +++ b/src/xms.py @@ -22,7 +22,7 @@ ) parser.add_argument('--database', '-d', required=False, - help='''Name of the database [DEFAULT: mind_maps]''', + help='''Name of the database [DEFAULT: xmindmaps]''', default='xmindmaps') @@ -39,13 +39,16 @@ ) cursor = database.cursor() -cursor.callproc('find_node', (args.keyword,)) - -for result in cursor.stored_results(): - limit = 0 - for branch in result.fetchall(): - if limit % 5 == 0: - print('%s' % branch) - else: - print('%s' % branch, end='->') - limit += 1 + +id = 0 +while True: + print() + cursor.callproc('find_node', [args.keyword, id]) + + for result in cursor.stored_results(): + for indent, branch in enumerate(result.fetchall()[1:]): + print(' '*indent + '%s' %branch) + decision = input('\nShow next result?\n [Y] yes [OTHER] no ') + if decision.lower() != 'y': + break + id += 1