Update does nothing
- Dominant language
- Python
- Stars
- 15.7k
- Forks
- 2.1k
- Avg merge
- 4d 21h
- Merged PRs (30d)
- 31
Description
When running beet update the database doesnt get updated - changes are listed, but running update again yields the same output.
### Problem
Running upd in verbose (`-vv`) mode showed no errors (example):
```
skipping /mnt/Music/processed/MEGAREX/[M3-43] MEGAREX — TECHCORE EVANGELIX 01 {MRX-036}/2-30. YUKIYANAGI — want to change.flac because mtime is up to date (1751014406.0)
YUKIYANAGI - TECHCORE EVANGELIX 02 - Complex Mind
genre: UK Hardcore -> Techcore
Sending event: database_change
skipping /mnt/Music/processed/MEGAREX/[C98] MEGAREX — Tribal Frontier {MRX-063}/1-3. YUKIYANAGI — My Ritual.flac because mtime is up to date (1751014328.0)
...
Sending event: database_change
Sending event: database_change
Sending event: database_change
Sending event: cli_exit
```
Yet running the update again shows no changes, although the database file was modified.
### Setup
* OS: Arch Linux
* Python version: 3.11.13 (pipx)
* beets version: 2.3.1
* Turning off plugins made problem go away (yes/no): no
My configuration (output of `beet config`) is:
```yaml
directory: /mnt/Music/processed
# --------------- Main ---------------
library: ~/.config/beets/library.db
import:
copy: no
write: yes
move: yes
pluginpath: [/home/jakka/dotfiles/beets/beetsplugins/]
# --------------- Plugins ---------------
plugins: chroma fromfilename mbsync badfiles fish mbsubmit inline event extrafiles missing duplicates
musicbrainz:
extra_tags:
- year
- catalognum
- country
- media
- label
external_ids:
bandcamp: yes
genres: no
host: localhost:5000
https: no
ratelimit: 1000
chroma:
auto: yes
acoustid:
apikey: REDACTED
item_fields:
disc_and_track: u'%01i-%01i' % (disc, track)
paths:
default: "%if{$label,$label,$albumartist}/$event_pretty%if{$label,$albumartist \u2014 ,}$album%if{$catalognum, {$catalognum$}, {[none]$}}%aunique{albumartist album catalognum, media}/$disc_and_track. %if{$artist_credit,$artist_credit,$artist} \u2014 $title"
comp: "%if{$label,$label,Various Artists}/$event_pretty$album%if{$catalognum, {$catalognum$}, {[none]$}}%aunique{album catalognum, media}/$disc_and_track. %if{$artist_credit,$artist_credit,$artist} \u2014 $title"
badfiles:
check_on_import: yes
extrafiles:
patterns:
all: '*'
paths:
all: $albumpath/$filename
mbsubmit:
format: $track. $title - $artist ($length)
threshold: medium
picard_path: picard
missing:
count: no
total: no
album: no
duplicates:
album: no
checksum: ''
copy: ''
count: no
delete: no
format: ''
full: no
keys: []
merge: no
move: ''
path: no
tiebreak: {}
strict: no
tag: ''
pathfields: {}
album_fields: {}
```
im also using my own plugin for reading and using custom event tag:
```python
from beets.plugins import BeetsPlugin
import mediafile
class doujin_event(BeetsPlugin):
def __init__(self):
super().__init__()
field = mediafile.MediaField(
mediafile.MP3DescStorageStyle(u'event'),
mediafile.StorageStyle(u'event')
)
self.add_media_field('event', field)
self.template_fields['event_pretty'] = _tmpl_event
def _tmpl_event(item):
if item['event']:
return '[' + item['event'] + '] '
else:
return ''
```
Contributor guide
Research direction
Start by reproducing the issue with `beet update -vv` using the provided configuration and plugin list, then compare the database state and output from a second run. Trace the `beet update` entry point and the `database_change` events; done means the reported changes persist in the database and the next update no longer reports them.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- cli, database
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100