Skip to content

Commit

Permalink
Fix some edge case bugs related to no dir
Browse files Browse the repository at this point in the history
  • Loading branch information
quackduck committed Feb 10, 2021
1 parent 8b4d946 commit b2f2835
Show file tree
Hide file tree
Showing 7 changed files with 150 additions and 44 deletions.
13 changes: 13 additions & 0 deletions .cspell.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"version": "0.1",
"language": "en",
"ignorePaths": [
"**/node_modules/**",
"**/vscode-extension/**",
"**/.git/**",
".vscode",
"package-lock.json",
"report"
],
"words": []
}
87 changes: 87 additions & 0 deletions .github/workflows/mega-linter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
---
# Mega-Linter GitHub Action configuration file
# More info at https://nvuillam.github.io/mega-linter
name: Mega-Linter

on:
# Trigger mega-linter at every push. Action will also be visible from Pull Requests to master
push: # Comment this line to trigger action only on pull-requests (not recommended if you don't pay for GH Actions)
pull_request:
branches: [master, main]

env: # Comment env block if you do not want to apply fixes
# Apply linter fixes configuration
APPLY_FIXES: all # When active, APPLY_FIXES must also be defined as environment variable (in github/workflows/mega-linter.yml or other CI tool)
APPLY_FIXES_EVENT: pull_request # Decide which event triggers application of fixes in a commit or a PR (pull_request, push, all)
APPLY_FIXES_MODE: commit # If APPLY_FIXES is used, defines if the fixes are directly committed (commit) or posted in a PR (pull_request)

jobs:
# Cancel duplicate jobs: https://github.com/fkirc/skip-duplicate-actions#option-3-cancellation-only
cancel_duplicates:
name: Cancel duplicate jobs
runs-on: ubuntu-latest
steps:
- uses: fkirc/skip-duplicate-actions@master
with:
github_token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }}

build:
name: Mega-Linter
runs-on: ubuntu-latest
steps:
# Git Checkout
- name: Checkout Code
uses: actions/checkout@v2
with:
token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }}
fetch-depth: 0

# Mega-Linter
- name: Mega-Linter
id: ml
# You can override Mega-Linter flavor used to have faster performances
# More info at https://nvuillam.github.io/mega-linter/flavors/
uses: nvuillam/mega-linter/flavors/go@v4
env:
# All available variables are described in documentation
# https://nvuillam.github.io/mega-linter/configuration/
VALIDATE_ALL_CODEBASE: true # Set ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} to validate only diff with master branch
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# ADD YOUR CUSTOM ENV VARIABLES HERE TO OVERRIDE VALUES OF .mega-linter.yml AT THE ROOT OF YOUR REPOSITORY

# Upload Mega-Linter artifacts
- name: Archive production artifacts
if: ${{ success() }} || ${{ failure() }}
uses: actions/upload-artifact@v2
with:
name: Mega-Linter reports
path: |
report
mega-linter.log
# Create pull request if applicable (for now works only on PR from same repository, not from forks)
- name: Create Pull Request with applied fixes
id: cpr
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository
uses: peter-evans/create-pull-request@v3
with:
token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }}
commit-message: "[Mega-Linter] Apply linters automatic fixes"
title: "[Mega-Linter] Apply linters automatic fixes"
labels: bot
- name: Create PR output
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository
run: |
echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
# Push new commit if applicable (for now works only on PR from same repository, not from forks)
- name: Prepare commit
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'commit' && github.ref != 'refs/heads/master' && github.event.pull_request.head.repo.full_name == github.repository
run: sudo chown -Rc $UID .git/
- name: Commit and push applied linter fixes
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'commit' && github.ref != 'refs/heads/master' && github.event.pull_request.head.repo.full_name == github.repository
uses: stefanzweifel/git-auto-commit-action@v4
with:
branch: ${{ github.event.pull_request.head.ref || github.head_ref || github.ref }}
commit_message: "[Mega-Linter] Apply linters fixes"
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
*.DS_Store
__debug_bin
/tii
/rem
.idea
17 changes: 17 additions & 0 deletions .jscpd.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"threshold": 0,
"reporters": [
"html",
"markdown"
],
"ignore": [
"**/node_modules/**",
"**/.git/**",
"**/.rbenv/**",
"**/.venv'/**",
"**/*cache*/**",
"**/.github/**",
"**/.idea/**",
"**/report/**"
]
}
12 changes: 12 additions & 0 deletions .mega-linter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Configuration file for Mega-Linter
# See all available variables at https://nvuillam.github.io/mega-linter/configuration/ and in linters documentation

APPLY_FIXES: all # all, none, or list of linter keys
DEFAULT_BRANCH: main # Usually master or main
# ENABLE: # If you use ENABLE variable, all other languages/formats/tooling-formats will be disabled by default
# ENABLE_LINTERS: # If you use ENABLE_LINTERS variable, all other linters will be disabled by default
DISABLE:
- COPYPASTE # Comment to disable checks of abusive copy-pastes
- SPELL # Comment to disable checks of spelling mistakes # - SPELL # Uncomment to disable checks of spelling mistakes
SHOW_ELAPSED_TIME: true
FILEIO_REPORTER: false
Empty file removed lol
Empty file.
63 changes: 20 additions & 43 deletions rem.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,18 @@ var (
version = "dev"
helpMsg = `Rem - Get some rem sleep knowing your files are safe
Rem is a CLI Trash
Usage: rem [-h/--help | -v/--version | -d/--directory | -l/--list | --t/--set-trash | `
Usage: rem [<option>]
rem fileToTrash
rem -u/--undo fileToRestore
Options:
-h/--help | -v/--version | -d/--directory | -l/--list | --t/--set-trash`
home, _ = os.UserHomeDir()
trashDir = home + "/.remTrash"
logFileName = ".trash.log"
logSeparator = " ==> "
)

func main() {
//for key, value := range parseLogFile() {
// fmt.Println("Key:", key, "Value:", value)
//}
if len(os.Args) == 1 {
handleErrStr("too few arguments")
fmt.Println(helpMsg)
Expand Down Expand Up @@ -59,7 +60,7 @@ func main() {
}
if hasOption, _ := argsHaveOptionLong("empty-trash"); hasOption {
color.Red("Warning, permanently deleting these files in trash: ")
fmt.Println(listFilesInTrash())
printFormattedList(listFilesInTrash())
if promptBool("Confirm delete?") {
emptyTrash()
}
Expand Down Expand Up @@ -98,24 +99,6 @@ func main() {
}

func listFilesInTrash() []string {
//file, err := os.Open(trashDir)
//if err != nil {
// handleErrStr("Could not open " + trashDir)
// handleErr(err)
// return nil
//}
//defer func() {
// err = file.Close()
// if err != nil {
// handleErr(err)
// }
//}()
//list, err := file.Readdirnames(0) // >=0 to read all files and folders
//if err != nil {
// handleErrStr("An error occurred while trying to list files in " + trashDir)
// handleErr(err)
//}
//return list
m := parseLogFile()
s := make([]string, 0, 10)
for key, _ := range m {
Expand All @@ -129,13 +112,13 @@ func emptyTrash() {
}

func parseLogFile() map[string]string {
ensureTrashDir()
file, err := os.OpenFile(trashDir+"/"+logFileName, os.O_CREATE|os.O_RDONLY, 0644)
if err != nil {
handleErr(err)
return nil
}
defer file.Close()
//var lines map[string]string
lines := make(map[string]string)
scanner := bufio.NewScanner(file)
for scanner.Scan() {
Expand All @@ -149,12 +132,9 @@ func parseLogFile() map[string]string {
}

func setLogFile(m map[string]string) {
//err := os.Truncate(trashDir+"/"+logFileName, 0)
//if err != nil {
// handleErr(err)
// return
//}
f, err := os.OpenFile(trashDir+"/"+logFileName, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0644) // truncate to empty, create if not exist, write only
//f, err := os.OpenFile(trashDir+"/"+logFileName, os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0644) // truncate to empty, create if not exist, write only
ensureTrashDir()
f, err := os.Create(trashDir + "/" + logFileName)
if err != nil {
handleErr(err)
return
Expand Down Expand Up @@ -205,12 +185,10 @@ func trashFile(path string) {
return
}
if _, err = os.Stat(path); os.IsNotExist(err) {
// file specified does not exist
handleErrStr(color.YellowString(path) + " does not exist")
return
}
if i, err := os.Stat(toMoveTo); !(os.IsNotExist(err)) {
// file of same name in trash
handleErrStr("file with name " + color.YellowString(i.Name()) + " already in ~/.remTrash at " + color.YellowString(toMoveTo)) // as helpful as possible
return
}
Expand All @@ -219,20 +197,10 @@ func trashFile(path string) {
handleErr(err)
return
}
//f, err := os.OpenFile(trashDir+"/"+logFileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
//if err != nil {
// handleErr(err)
// return
//}
//defer f.Close()
//if _, err = f.WriteString(path + logSeparator + toMoveTo + "\n"); err != nil {
// handleErr(err)
// return
//}
m := parseLogFile()
m[path] = toMoveTo // logfile format is path where it came from ==> path in trash
setLogFile(m)
fmt.Println("Trashed " + color.YellowString(path) + " to " + color.YellowString(toMoveTo) + "\nUndo using " + color.YellowString("rem --undo "+path))
fmt.Println("Trashed " + color.YellowString(path) + "\nUndo using " + color.YellowString("rem --undo "+path))
}

func ensureTrashDir() {
Expand All @@ -244,6 +212,15 @@ func ensureTrashDir() {
}
}

func ensureLogFile() {
if _, err := os.Stat(trashDir + "/" + logFileName); os.IsNotExist(err) {
_, err = os.Create(trashDir + "/" + logFileName)
if err != nil {
handleErr(err)
}
}
}

func permanentlyDeleteFile(fileName string) {
err := os.RemoveAll(fileName)
if err != nil {
Expand Down

0 comments on commit b2f2835

Please sign in to comment.